Skip to content

ci: run coverage in parallel jobs beside test - #158

Merged
github-actions[bot] merged 3 commits into
mainfrom
ci/split-coverage-jobs
Oct 31, 2026
Merged

github-actions[bot] merged 3 commits into
mainfrom
ci/split-coverage-jobs

Conversation

@brujack

@brujack brujack commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • The Test job ran three full builds and test runs one after another: nextest (288 s), the tarpaulin gate (327 s) and the informational network tarpaulin (325 s). That is about 16.5 min on the merge path (PR fix(claude): update each listed plugin once #156, run 41138976453).
  • Each tarpaulin run is now its own job, so it runs beside test on a separate runner:
    • coverage: the 81% gate and the badge push. It is in auto-merge needs:.
    • coverage-network: informational. It has job-level continue-on-error: true and is not in needs:. The ALLOWED entry still matches by name; its reason is updated.
  • test and coverage-network drop to contents: read. Only coverage keeps contents: write, for the existing coverage-data badge push.
  • CLAUDE.md's CI table and "Which jobs block" paragraph are updated. The "Run coverage as its own job" backlog row is removed.
  • Coverage was added to main's required status checks after this run reported it (operator-approved). Branch protection is as strong as when tarpaulin ran inside Test.

Test Plan

  • pytest tests/: 167 passed, including tests/test_continue_on_error.py, which still matches the job-level site.
  • The YAML parses. The structure was checked: needs:, permissions, and job-level continue-on-error on coverage-network only.
  • No Rust test needs shellcheck, ruff or pytest, so the coverage jobs install Rust and tarpaulin only.
  • This PR's own run (41149333695): Test took 4m34s, Coverage 5m34s and Coverage with network tests (informational) 6m48s, all in parallel. The PR merged 6 min after it opened; before the split, Test alone took about 16.5 min.
  • Coverage (run 41149333695): Rust 83.55% (5283/6323, floor 81); Python 95.28% (floor 90).

Code review

reviewed-sha: 8bc50f2
diff-hash: 6d59c3dc979c1fc2fd401db3c20842ff99a9d95aa013e991a9f9265121a2d5f9
reviewers: 5/5

Three rounds. Round 1 (0f58d46): two findings, fixed in 1c29943 (stale ALLOWED reason "the main coverage step gates"; moved step comment said an 80% gate against --fail-under 81). Round 2 (1c29943, verification): one finding, fixed in 8bc50f2 (comment said "the three" tarpaulin runs; there are two, after nextest). This was past the two-round fix cap; the operator chose to fix it and run one more check. Round 3 (8bc50f2, verification): no findings. Steps 2-3 ran inline: root CLAUDE.md is the only one in scope.

RESOLVED: 3 fixed, 0 kept

Spec alignment

SKIP: no open plan has a spec: line (backlog row, no plan)

🤖 Generated with Claude Code

https://claude.ai/code/session_01RMRWKLc4oBDsXjYryqoNxf

brujack and others added 3 commits October 30, 2026 19:57
The Test job ran three full builds and test runs back to back: nextest
(288 s), the tarpaulin gate (327 s) and the informational network
tarpaulin (325 s), about 16.5 min on the merge path. Each tarpaulin run
is now its own job on its own runner:

- coverage: the 81% gate and badge; in auto-merge needs.
- coverage-network: informational, job-level continue-on-error, not in
  needs (same ALLOWED entry).

test drops to contents: read; coverage keeps write for the badge push.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMRWKLc4oBDsXjYryqoNxf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMRWKLc4oBDsXjYryqoNxf
@github-actions
github-actions Bot merged commit e61761d into main Oct 31, 2026
13 checks passed
@brujack
brujack deleted the ci/split-coverage-jobs branch October 31, 2026 00:28
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