# Race, Go. Dispatched by hand, and never a gate on a push or a tag: the release tag is # cut only after `just gates` has already raced the tree, so this workflow is the # explicit second opinion, not a step of the release. # # The race detector roughly doubles both time and memory, which the shared runner box # cannot afford on every push. Locally it belongs to `just gates`, which runs it once per # task; here it is a decision rather than a routine. # # Every step is one command, so the step that fails is the gate that failed. name: Race on: workflow_dispatch: env: # One core: parallelism buys no speed here and costs memory the box does not have. GOFLAGS: -p=1 GOMAXPROCS: "2" jobs: race: runs-on: fedora timeout-minutes: 20 steps: - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true - name: Install gcc # The race detector needs cgo and the runner image carries no C compiler. run: dnf install -y gcc - name: Race # The pattern matches `packages` in the project's justfile: the logic # packages under internal/. run: go test -race -count=1 -timeout 10m ./internal/...