Skip to content

ci(repo): consolidate mutation runners and gate the score - #140

Open
systemfsoftware-maker wants to merge 6 commits into
mainfrom
better-mutation-ci
Open

ci(repo): consolidate mutation runners and gate the score#140
systemfsoftware-maker wants to merge 6 commits into
mainfrom
better-mutation-ci

Conversation

@systemfsoftware-maker

Copy link
Copy Markdown
Collaborator

What

Reworks .github/workflows/mutation.yml so the ~25 mutation packages run on a handful of runner machines instead of one per package, while keeping both incremental mechanisms and making the mutation score gate PRs.

Changes

  • Bucket the matrix (discover chunks sorted packages into groups of 5, emitting buckets + package_count; mutation matrix iterates buckets, running turbo mutation with --concurrency=2 --continue=dependencies-successful).
  • Warm the turbo cache — restore/save .turbo/cache under a mutation-specific per-bucket key (turbo-mutation-<os>-<bucket>-<sha>) so it never collides with the check job's turbo-... key on the same commit.
  • Keep per-package incremental reports — staged per bucket under bucket-incremental/, re-keyed to stryker-incremental-<bucket>-main.
  • Gate the score — removed continue-on-error: true from the mutation step, so a package below its break threshold fails the check (reverses the prior advisory posture).
  • Merge across bucketsscripts/tools/merge-mutation-reports.mjs readParts now discovers parts recursively so the aggregate report spans every bucket.
  • DoctrineAGENTS.md REPO-D1 updated: CI's Mutation workflow now gates on the score too.

Decisions (settled with user)

  • Fewer runners over worst-case wall-clock; dynamic runner count derived from package count (packages-per-bucket ratio).
  • Full-coverage merged report (spans every package), not changed-only.
  • Absolute-score gating: a package below its break threshold fails the check.

Verification

  • pnpm check:local exits 0 (run after the rebase onto main).
  • pnpm check:turbo-graph clean; guard-action-provenance clean.
  • merge-mutation-reports.mjs --selftest passes (8 fixtures); recursive readParts smoke-tested against a synthetic 2-bucket/3-package layout (merges 3 of 3, aggregate **all** row at 100.00).
  • turbo mutation --filter=./packages/oxlint-plugins/effect-store --dry=json confirms the volatile reports/stryker-incremental.json input is gone (0 incremental files in inputs).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant