name: CI on: push: branches: [ main, work/review ] jobs: build: runs-on: ubuntu-latest strategy: matrix: go: ['1.20'] os: ['ubuntu-latest'] steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: ${{ matrix.go }} - name: Cache Go modules uses: actions/cache@v4 with: path: | ~/.cache/go-build ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Tidy modules run: go mod tidy - name: Format check run: | gofmt_out=$(gofmt -l . | wc -l); if [ "$gofmt_out" -ne "0" ]; then echo "gofmt needs to be run"; gofmt -w .; exit 1; fi - name: Vet run: go vet ./... - name: Static analysis (golangci-lint) uses: golangci/golangci-lint-action@v4 with: version: 'v1.59.0' - name: Build (amd64) run: make build - name: Cross build (linux/arm64) run: | GOOS=linux GOARCH=arm64 go build -o bin/arm64 ./... - name: Test run: make test - name: Coverage run: | go test -coverprofile=coverage.out ./... || true go tool cover -func=coverage.out | sed -n '1,200p' release-checks: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v3 - name: Echo OK run: echo "build and tests passed"