Skip to main content

Race tests

Read this when a race-test run fails, when you add code that needs race coverage, or when you change .github/workflows/race-bazel.yaml.

race-bazel.yaml runs the Tadoku API's race-instrumented targets, including the HTTP E2E target, with --@rules_go//go/config:race. It passes --nocache_test_results, so every listed target runs fresh each time instead of reusing a cached pass; compilation still uses the Bazel cache. Add a target to its list when new code needs race coverage. It is scheduled daily at 15:37 UTC. GitHub starts this repository's scheduled runs hours late and can skip them, so runs are not exactly 24 hours apart. Pushes and pull requests do not run it, except pull requests that change the workflow itself. Start it manually from the Actions tab, or with gh workflow run race-bazel.yaml --ref main, to validate a fix or recover a missed run.

It uses the same tadoku-ci runner, digest-pinned services, private Bazel cache, Lab CA and resource budget as build-bazel.yaml, and retains the same bazel-performance artifact. Keep its service images identical to build-bazel.yaml's, which the runner Pods pre-pull.

When a scheduled or manual run fails, times out or is cancelled, its alert job posts a warning to the homelab Notify service on topic ci with the result, revision and run link; Notify routes warnings to the owner. Notify must admit tadoku-ci runner Pods as a producer through the homelab network policies. The job fails with an error annotation when Notify does not accept the alert, so the run still shows the failure.