130 lines
2.6 KiB
YAML
130 lines
2.6 KiB
YAML
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' |