Repository navigation
Run e2e suites that share a toolchain in one leg - #1234
Conversation
CI spawns ~134 e2e legs per run and most finish in under 2.5 min, with ~64% of each leg spent on job setup, checkout and downloading the e2e binaries (#1178). Rows that differ only in `suite` pay that overhead twice or three times for the same toolchain. The shared run step already loops over a space-separated `suite` and fails any suite that runs no test, so list the suites in one row instead: composer (6 -> 3 legs), bundler eras (14 -> 7), bun text-lock eras (12 -> 4 on Linux, 3 -> 1 on Windows), Maven lines (10 -> 6) and the e2e-full bundler 2.7.2 pair (2 -> 1). e2e_bun_lockb keeps its own legs because its env gates key on the row's suite. Every (suite, OS, toolchain) cell still runs in the same job on the same events. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bp6XLBUDPLHroKWxwtXi25
|
bugbot run Generated by Claude Code |
There was a problem hiding this comment.
✅ 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 1cb87af. Configure here.
|
Burn-down agent: labeled Ready for review at head
Generated by Claude Code |
|
Dequeued on a failure this PR does not cause. In merge_group run 37904060236, Generated by Claude Code |
Fixes #1178 (first slice: rows that already share one toolchain setup; see "Not in this PR").
Problem
#1178: a CI run spawns ~134
e2elegs, 145 of 157 distinct legs have p50 < 2.5 min, and ~64% of a small leg is per-job overhead (Set up job, checkout, downloading and unpacking the e2e binaries, toolchain setup). Billing rounds every job up to a whole minute. The jobs also take up Linux runner slots, which pushes the Linux queue p90 to 12.8 min.Many
e2erows differ only insuite. They install the same composer line, Ruby + bundler era, bun release or Maven line, so each pays that overhead two or three times.Change
.github/workflows/ci.ymlonly. The shared "Run e2e tests" step already loopsfor suite in $E2E_SUITEand fails any suite that runs zero tests. So rows whose keys match except forsuiteare merged into one row with a space-separatedsuite:Each of these families' setup steps keys on the toolchain key (
composer,bundler,bun,jvm_tool), not onsuite.e2e_bun_lockbkeeps its own legs because theSOCKET_PATCH_BUN_LOCKB_*env gates checkmatrix.suite == 'e2e_bun_lockb'.e2e_safety_pnpm+e2e_redirect_rush_simalso stay separate, because the pnpm/npm setup steps key on the suite name. e2e-macos is left alone (#1176).Where each test runs
Nothing moves. A script expanded every row into (job, suite, toolchain keys) cells. That gives 207 cells before and 207 identical cells after, in the same jobs and on the same events. Per-suite failure reporting is unchanged: the loop runs every suite, tees each suite's log, and emits
::error::naming the suite that ran no tests.Expected saving
Baseline is merge_group run 37876502927 (Linux + Windows legs of these families):
Measured result
This PR's CI run is 37894197827 (pull_request, green). The baseline is merge_group run 37876502927. Both cover the Linux and Windows legs of the merged families:
So each run starts 24 fewer jobs, saving ~7 actual and ~14 billed job-min. Every merged leg passed, and the loop's per-suite
0 passedcheck confirms that each listed suite ran tests. Total jobs in the run went from 213 to 161, but that number also reflects PR-vs-merge_group differences elsewhere in the workflow. The profiler will verify the merge_group effect after merge.Validation
python3 -m unittest discover -s scripts/tests: 281 tests OK. This coverstest_ci_e2e_tiers: every row is a test target, e2e-full only adds releases to PR suites, and the bundle covers every OS.main, nothing new.Not in this PR
The rest of #1178 means merging rows that differ by toolchain version (uv/poetry/pdm/hatch VEX rows, vlt eras, dotnet). That needs a per-version setup loop inside a leg, so it is left for a follow-up.
Risk
Low. One failing suite now marks its merged leg red, and a re-run repeats 2–3 suites (each ~0.1–0.7 min). The job title lists every suite in the leg. Required checks
ci-ok/clippyare unchanged, andci-okdepends on thee2ejobs as a whole, not on leg names.🤖 Generated with Claude Code
https://claude.ai/code/session_01Bp6XLBUDPLHroKWxwtXi25
Generated by Claude Code