ci: fix golangci-lint v2 compat, redesign release pipeline #29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| workflow_call: | |
| # Cancel in-progress runs for the same branch/PR to avoid wasted resources. | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| env: | |
| CGO_ENABLED: "0" # Match release build settings | |
| steps: | |
| # Pin actions to full SHA for supply-chain security. | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 | |
| with: | |
| go-version: "1.26.x" | |
| - run: go build ./cmd/dispatch/ | |
| - name: golangci-lint | |
| uses: golangci/golangci-lint-action@9fae48acfc02a90574d7c304a1758ef9895495fa # v7 | |
| with: | |
| version: latest | |
| install-mode: goinstall | |
| - run: go vet ./... | |
| - run: go test ./... | |
| - name: Test (race detector) | |
| env: | |
| CGO_ENABLED: "1" | |
| run: go test -race ./... -count=1 | |
| - name: govulncheck | |
| run: | | |
| go install golang.org/x/vuln/cmd/govulncheck@latest | |
| govulncheck ./... | |
| # Verify the binary compiles for all release platforms. | |
| # CGO_ENABLED=0 means cross-compilation is pure Go — no native runners needed. | |
| cross-compile: | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| env: | |
| CGO_ENABLED: "0" | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 | |
| with: | |
| go-version: "1.26.x" | |
| - name: Cross-compile all release targets | |
| run: | | |
| for pair in darwin/amd64 darwin/arm64 windows/amd64 windows/arm64; do | |
| os="${pair%/*}" | |
| arch="${pair#*/}" | |
| echo "Building $os/$arch..." | |
| GOOS=$os GOARCH=$arch go build -o /dev/null ./cmd/dispatch/ | |
| done |