name: Build and Test on: push: branches: [ main, master ] pull_request: branches: [ main, master ] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.21' - name: Install dependencies run: go mod download - name: Run tests run: go test -v . - name: Run benchmarks run: go test -bench=. -benchmem . - name: Build application run: go build -o fft . - name: Check binary run: | ls -la fft file fft docker-test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and test in Docker run: | # Create Dockerfile cat > Dockerfile << 'EOF' FROM golang:1.21-bullseye WORKDIR /app # Copy source files COPY . . # Download dependencies RUN go mod download # Build the application RUN go build -o fft . # Run tests RUN go test -v . # Run benchmarks RUN go test -bench=. -benchmem . # Show binary info RUN ls -la fft RUN file fft # Show Go environment RUN go version RUN go env GOOS GOARCH GOAMD64 EOF # Build container docker build -t golang-fft . # Run tests in container docker run --rm golang-fft go test -v . # Run benchmarks in container docker run --rm golang-fft go test -bench=. -benchmem . # Show binary info docker run --rm golang-fft ls -la fft docker run --rm golang-fft file fft lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.21' - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: version: latest security: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@master with: scan-type: 'fs' scan-ref: '.' format: 'sarif' output: 'trivy-results.sarif' - name: Upload Trivy scan results to GitHub Security tab uses: github/codeql-action/upload-sarif@v2 if: always() with: sarif_file: 'trivy-results.sarif'