# CI: build, vet, test, eeco's own attribution + workspace-path gates, # and the golangci-lint quality bar. Runs on every PR and on push to # main. Read-only token by design. name: ci on: pull_request: push: branches: [main] concurrency: group: ci-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} permissions: contents: read jobs: verify: name: verify + gates (${{ matrix.os }}) runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] defaults: run: # Force Git Bash on windows-latest so the Makefile recipes and # the smoke step share one shell with the linux job. shell: bash steps: - name: checkout uses: actions/checkout@v5 with: fetch-depth: 0 - name: setup-go uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true - name: verify run: make verify - name: coverage if: matrix.os == 'ubuntu-latest' run: make cover-check - name: codecov if: matrix.os == 'ubuntu-latest' uses: codecov/codecov-action@v5 with: files: coverage.out token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: false - name: gates run: make gates - name: check version badge if: matrix.os == 'ubuntu-latest' run: bash scripts/check-version-badge.sh - name: windows-smoke if: matrix.os == 'windows-latest' run: | set -eu mkdir -p tmp-smoke cd tmp-smoke git init -q git config user.email smoke@local git config user.name smoke ../eeco.exe init ../eeco.exe run leak-guard ../eeco.exe hooks pre-commit on ../eeco.exe hooks pre-commit off ../eeco.exe doctor lint: name: lint runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v5 - name: setup-go uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true # golangci-lint v2.12.2 needs Go >= 1.25 to build; eeco's go.mod # pins an older version and actions/setup-go exports # GOTOOLCHAIN=local. Set GOTOOLCHAIN=auto inline so `go run` # fetches the newer toolchain only to build the linter — eeco's # own build, in the verify job, stays on the go.mod version. - name: lint run: GOTOOLCHAIN=auto make lint