Skip to content

Stop running the Linux test suite twice per CI run - #619

Merged
Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/fold-ubuntu-test-into-coverage
Oct 5, 2026
Merged

Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/fold-ubuntu-test-into-coverage

Conversation

@mikolalysenko

@mikolalysenko Mikola Lysenko (mikolalysenko) commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

ci.yml ran the full Linux test suite twice per CI run:

  • test (ubuntu-latest): cargo test --workspace --no-fail-fast (debug profile, default features).
  • coverage (ubuntu-latest): cargo llvm-cov --workspace --no-report. This is the same cargo test --workspace (debug profile, default features), instrumented, and it fails the job on any test failure.

The test selection is the same. No code checks cfg(coverage), and the workspace has no doctests that execute: cargo test --workspace --doc runs 0 tests, plus 1 that is ignored. So the ubuntu test leg only added the following, which this PR moves into coverage:

  • Go 1.24 and vexctl on PATH
  • SOCKET_PATCH_GO_E2E_REQUIRED=1
  • --no-fail-fast

Evidence: 15 green CI runs on 2026-10-02 (runs 37053267702 … 37070816606, PR and main pushes).

job median duration median of its test step
test (ubuntu-latest) 11.6 min (518–727 s) 10.6 min
coverage 13.1 min (593–830 s) 12.8 min

Between 14:53 and 22:25 UTC that day, 47 CI runs completed. At ~11.5 job-minutes each, that is about 540 runner-minutes in 7.5 h spent re-running tests coverage already ran. Neither job is on the critical path: test (windows-latest) takes ~29 min and test-release ~20 min.

Fix

  • test matrix: [macos-latest, windows-latest]. The ubuntu leg is gone.
  • coverage now has what that leg had on top of its own setup:
    • actions/setup-go 1.24, the same SHA pin.
    • The vexctl v0.3.0 Linux release binary, sha256-checked like test's step.
    • SOCKET_PATCH_GO_E2E_REQUIRED=1 and SOCKET_PATCH_GO_E2E_VERSION=1.24.
    • --no-fail-fast.
  • Every job that had needs: test now has needs: [test, coverage]. The same goes for [test, e2e-build], which becomes [test, coverage, e2e-build]. Those jobs stay gated on the Linux results, and coverage finishes long before test (windows), so no job starts later.
  • The comments are updated: coverage reports numbers without gating on them, but it does gate on test failures.

Where the removed leg's tests still run

Every test that ran in test (ubuntu-latest) now runs in coverage, on every PR and every main push. That includes:

  • the real-go suites, now required to run rather than soft-skip;
  • the e2e_vex vexctl validation, which coverage used to skip because vexctl wasn't on PATH.

macOS and Windows are unchanged.

Check-name change for the owner: the test (ubuntu-latest) check disappears. main has no required status checks (no branch protection; the rulesets only require reviews, signatures, linear history and the GHA audit workflow), so nothing blocks on it.

Proof

  • CI on this head: CI run 37075059143 is green. coverage (now gating Linux, with Go and vexctl) took 11.6 min, test (macos-latest) 12.6 min and test (windows-latest) 26 min. Every other workflow on ee253ce is green, and Bugbot found no issues.

  • cargo llvm-cov --no-fail-fast --no-report ran locally with vexctl v0.3.0 on PATH, Go 1.24.7, and SOCKET_PATCH_GO_E2E_REQUIRED=1 SOCKET_PATCH_GO_E2E_VERSION=1.24. Results:

    • e2e_golang_build: 18 passed
    • e2e_golang_hosted_build: 19 passed
    • e2e_golang_hosted_state: 22 passed
    • e2e_golang_workspace_build: 11 passed
    • e2e_vex: 17 passed
    • 0 failed. These are the suites the new env and tools affect, run under instrumentation.
  • The --no-fail-fast flag is accepted by cargo-llvm-cov 0.8.7 (cargo llvm-cov --help).

  • Coverage of non-test files cannot drop. The removed job never fed the coverage report, and coverage now runs strictly more (vexctl paths, required Go suites).

  • actionlint 1.7.7 reports the same 6 findings before and after. All 6 are existing false positives: actionlint doesn't understand the steps: *anchor YAML aliases. No new findings.

🤖 Generated with Claude Code

https://claude.ai/code/session_0186JrVwWG4Rs1xfqZ2v3eS6


Generated by Claude Code

The `coverage` job already runs `cargo test --workspace` on ubuntu
(debug, default features) under cargo-llvm-cov and fails on any test
failure, so `test (ubuntu-latest)` ran every Linux test a second time:
~11.5 job-minutes per CI run for no extra signal.

Drop the ubuntu leg from `test` and give `coverage` what that leg had
on top: Go 1.24 and vexctl on PATH, the SOCKET_PATCH_GO_E2E_* env that
turns the real-go suites' soft skips into failures, and
`--no-fail-fast`. Jobs that waited on `test` now also wait on
`coverage`, so they stay gated on the Linux results; `test (windows)`
remains the critical path, so wall-clock is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0186JrVwWG4Rs1xfqZ2v3eS6
@mikolalysenko Mikola Lysenko (mikolalysenko) added the ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) label Oct 2, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

bugbot run


Generated by Claude Code

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit ee253ce. Configure here.

@mikolalysenko Mikola Lysenko (mikolalysenko) added the Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review label Oct 3, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

[burn-down agent] Labeled Ready for review at ee253cef22851398bfe4fb14a16a2a08fbc65990.

  • CI: 338/338 completed check runs green (6 skipped by path filters), no failures.
  • Bugbot: reviewed ee253ce — no issues found; 0 unresolved review threads.
  • Reviewer focus: CI-only change: the ubuntu test leg is folded into coverage (Go/vexctl setup and --no-fail-fast moved there; downstream needs: now include coverage). No branch-protection required check names the removed job.
  • Slack announcement: not sent (Slack send tool unavailable in this run); next run will retry.

Generated by Claude Code

@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Reviewed ee253cef22851398bfe4fb14a16a2a08fbc65990. Ready to merge as-is; no actionable findings.

Verified the Linux debug/default-feature run remains mandatory in coverage, with the same Go pin, required Go environment, vexctl binary/checksum and --no-fail-fast. All seven downstream jobs that required test now require Linux coverage too; macOS/Windows, release and feature-specific jobs remain unchanged.

The exact-head coverage log confirms 9,695 passed and 252 ignored, including all 70 real-Go tests and 17 VEX tests. Current doctests contain no executable cases, and the unchanged Linux release job still runs them. Live branch rules do not require the removed test (ubuntu-latest) check.

Validation used workflow structure, primary cargo-llvm-cov source and completed CI logs; no full local rebuild. Actionlint introduced no diagnostics relative to the base. Merge check and exact-head Bugbot are clean.

Final check: 338 successful checks, 6 skipped; all six workflows completed successfully, no pending checks or unresolved review threads. This recommendation covers the commit above; human approval is still required.

@mikolalysenko
Mikola Lysenko (mikolalysenko) merged commit a20b82c into main Oct 5, 2026
344 checks passed
@mikolalysenko
Mikola Lysenko (mikolalysenko) deleted the ci-janitor/fold-ubuntu-test-into-coverage branch October 5, 2026 11:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants