Skip to content

ci: move rivet-core mutation matrix to nightly so it stops saturating runners (#498)#504

Merged
avrabe merged 1 commit into
mainfrom
ci/nightly-mutation-matrix
Jun 6, 2026
Merged

ci: move rivet-core mutation matrix to nightly so it stops saturating runners (#498)#504
avrabe merged 1 commit into
mainfrom
ci/nightly-mutation-matrix

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented Jun 6, 2026

Problem (#498)

The 16-shard rivet-core mutation matrix is non-gating (continue-on-error) but runner-heavy: 16 shards × 45 min on the self-hosted lean-mem pool. Running it on every push saturated the pool, queueing the actual gating jobs (test, clippy, the rivet-cli mutation gate) behind it for hours.

Change

Split mutation testing into two jobs by cost/role:

Job Crate Shards When Gating?
mutants-core rivet-core 16 nightly (cron '0 3 * * *') + workflow_dispatch no (continue-on-error)
mutants-cli (new) rivet-cli 1 every push + PR yes (exit 1 on surviving mutants)
  • Added schedule: + workflow_dispatch: to on:.
  • mutants-core gated with if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'.
  • mutants-cli is a new, fast, single-shard hard gate that keeps mutation coverage on the CLI surface on the every-push path.

test is ungated, so it runs on schedule too — satisfying both jobs' needs: [test]. The heavy sweep still runs daily; it just no longer blocks interactive CI.

Verification

  • actionlint .github/workflows/ci.yml — clean apart from the pre-existing custom self-hosted runner-label false positives (light, rust-cpu), which predate this change.
  • python3 -c "import yaml; yaml.safe_load(...)" — parses.
  • Confirmed nothing needs: [mutants] (the old job name), so no dependents break.

Closes #498.

🤖 Generated with Claude Code

… runners (#498)

The 16-shard rivet-core mutation matrix is non-gating (continue-on-error)
but runner-heavy: 16 shards x 45min on the self-hosted lean-mem pool. On
every push it saturated the pool, queueing the actual gating jobs (test,
clippy, mutants-cli) behind it for hours (#498).

Split the mutation work:
- mutants-core (rivet-core, 16 shards): now NIGHTLY + manual only via
  `if: github.event_name == 'schedule' || workflow_dispatch`, with a new
  `schedule: cron '0 3 * * *'` + `workflow_dispatch:` trigger. Stays
  non-gating.
- mutants-cli (rivet-cli, single shard): NEW per-push/PR hard gate
  (0 surviving mutants, no continue-on-error). Fast enough to stay on the
  every-push path; preserves mutation coverage on the CLI surface.

`test` is ungated so it runs on schedule too, satisfying both jobs'
`needs: [test]`. Confirmed with actionlint (clean apart from the
pre-existing custom self-hosted runner-label false positives) and a
yaml.safe_load parse.

Trace: skip
Refs: #498

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@avrabe avrabe merged commit 2750e9f into main Jun 6, 2026
18 of 19 checks passed
@avrabe avrabe deleted the ci/nightly-mutation-matrix branch June 6, 2026 06:55
@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 6, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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.

Non-gating 16-shard rivet-core mutation matrix runs on every push — saturates self-hosted runners, CI queues for hours

1 participant