Skip to content

CI: run the full e2e tier nightly, not per push (#1414) - #1415

Open
Mikola Lysenko (mikolalysenko) wants to merge 2 commits into
mainfrom
agent/fix-ci-full-tier-nightly
Open

Mikola Lysenko (mikolalysenko) wants to merge 2 commits into
mainfrom
agent/fix-ci-full-tier-nightly

Conversation

@mikolalysenko

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

Copy link
Copy Markdown
Collaborator

LLM Description written by Claude Code:claude-opus-5-5

Fixes #1414

Root cause

e2e-full, yarn-berry-full and cargo-vex-matrix-full were gated on event != pull_request && event != merge_group. That also matches push, so every landing on main ran all 41 full-tier legs, even though the workflow header calls this tier nightly. On push run 38197830089 (1779317), 41 of the 50 non-skipped jobs were these legs: ~21 wall-minutes, ~41 billed job-minutes.

Change

The three jobs now use the same gate as e2e-docker: schedule, workflow_dispatch (so release-qa(full) still runs and still finds e2e-full*, per docs/release-train/DESIGN.md), the release/v5-prerelease PR, plus push && vars.CI_SCOPE == 'full', so flipping CI_SCOPE=full still brings the tier back on landings. The trade-off: a regression that only this tier catches shows up at the next nightly instead of on the landing.

e2e-build also stops bundling, compressing and uploading the ~94 MB ubuntu e2e binaries on a push that reuses the merge-queue result, unless `CI_SCOPE` is `full`. Those binaries were kept on reused pushes only for the full tier, and nothing else downloads them there.

Also updated: the header and job comments, the `ci-reuse-merge-group.py` log line, docs/testing/yarn-berry-compatibility.md, and the two scheduling tests that pinned the old condition (test_full_jobs_run_nightly_only_and_share_steps, test_unchanged_pr_merge_skips_only_what_the_queue_re_tests). test_reused_push_keeps_cache_writers_and_unqueued_jobs now also pins the new upload guard.

Credit to Austen Stone (@austenstone), who reported this and proposed the same gate in a fork. This is an independent implementation, not a cherry-pick of that commit.

Runner usage

  • Lean PR run: unchanged. These jobs never ran on PRs (~28 Linux jobs, ~8 min).
  • Merge queue: unchanged.
  • Push to main: 50 → 9 non-skipped jobs, about −41 billed job-minutes per landing, plus the e2e-build bundle and upload step time (45 pushes on Oct 10-11 would have saved ~1,845 jobs).
  • Nightly / dispatch: unchanged.
  • ci-ok needs list and required check names are unchanged; ci-ok already treats skipped jobs as passing. Depot mapping and DISABLE_DEPOT_RUNNERS are untouched.

Validation

  • python3 -m pytest scripts/tests -q: 334 passed, 6 skipped.
  • Red→green: with origin/main's ci.yml and the updated tests, 4 subtests fail (all three jobs in test_full_jobs_run_nightly_only_and_share_steps, plus yarn-berry-full in the scheduling test). With this ci.yml they pass.
  • actionlint 1.7.7: 36 findings before and after, all pre-existing "alias node" complaints about steps: *anchor.
  • zizmor --offline: identical (59 findings, 0 medium/high) before and after.
  • ci.yml parses with PyYAML. No fromJSON matrix was touched.
  • No Rust, cfg(windows) or platform code was touched, so no full-scope dispatch is needed.

/code-review high

The review found no correctness bugs. Fixed: the redundant ubuntu artifact upload on reused pushes, and the stale comments, log line, test comment and doc. Not changed:

  • Writing the gate once as a YAML scalar anchor. The repo's workflow tests read `if:` lines textually and couldn't see an alias, and actionlint already rejects aliases here. The gate stays written out on each of the three jobs, and the tests pin it.
  • docs/release-train/DESIGN.md primary-candidate selection (a green `push` run is accepted). A reused push already skipped every test job and `e2e-docker`, so a green push run was never full-tier evidence. `release-qa(full)` (dispatch) still runs the full tier and is the gate. The release train is release tooling, which this lane doesn't edit.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Cxz4F7nBdZPMSx1tya1sBt


Generated by Claude Code

e2e-full, yarn-berry-full and cargo-vex-matrix-full only skipped
pull_request and merge_group, so all 41 of their legs also ran on
every push to main: 41 of the 50 jobs a landing ran, about 41 billed
runner-minutes each time. Gate them like e2e-docker instead: nightly,
workflow_dispatch (release-qa) and the v5 integration PR, plus pushes
to main when CI_SCOPE is full. A regression only this tier catches now
shows up in the next nightly rather than on the landing.

Update the two scheduling tests that pinned the old condition and the
yarn-berry doc that said the job runs on main pushes.

Fixes #1414

Assisted-by: Claude Code:claude-opus-5-5
A push to main that reuses the merge-queue result still bundled,
compressed and uploaded the ~94 MB ubuntu e2e binaries, only so the
full tier could download them. The full tier no longer runs on such a
push unless CI_SCOPE is full, so ship the binaries only then.

Also correct the comments, the reuse log line and the yarn-berry doc
that still said a push to main runs the full tier.

Refs #1414

Assisted-by: Claude Code:claude-opus-5-5
@mikolalysenko
Mikola Lysenko (mikolalysenko) marked this pull request as ready for review October 12, 2026 03:59
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

BugBot review


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 fec483f. Configure here.

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

Copy link
Copy Markdown
Collaborator Author

Ready for review (burn-down agent)

  • Head: fec483f
  • CI: 37/37 non-skipped checks green (50 skipped by path filters); mergeable, no conflicts.
  • Bugbot: reviewed fec483f, no findings; no open review threads.
  • Reviewer focus: the three full-tier e2e jobs now run on schedule / workflow_dispatch / CI_SCOPE=full pushes only, so a regression only that tier catches surfaces at the next nightly rather than on landing (CI perf: full tier (41 legs) runs on every push to main, not just nightly #1414).

Generated by Claude Code

@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Final review brief

What it does. The three full-tier jobs (e2e-full, yarn-berry-full, cargo-vex-matrix-full, 41 legs) stop running on every push to main and run only nightly, on workflow_dispatch (so release-qa(full) still gets them), on the v5 integration PR, and on main pushes when vars.CI_SCOPE == 'full'. e2e-build also stops uploading the ~94 MB ubuntu e2e bundle on reused pushes unless CI_SCOPE is full, since only the full tier consumed it there.

Risk: low. CI config only; no Rust or runtime code. PR and merge-queue tiers are unchanged and ci-ok already treats skipped jobs as passing. The trade-off is intentional: a regression only the full tier catches surfaces at the next nightly instead of on the landing.

Look here

Verified

  • Read the full diff. Checked that nothing else downloads e2e-bin-ubuntu-latest on a reused push (e2e, e2e-extended and cargo-vex-matrix already skip on reuse; hosted-e2e builds its own), and that schedule/dispatch never reuse, so they still bundle.
  • python3 -m unittest discover -s scripts/tests: 339 run, OK (7 skipped). ci.yml parses. CHANGELOG.md untouched.
  • CI on fec483f: ci-ok and clippy green, no failing checks; Bugbot clean; no open review threads.

Changes I made: none.

Open questions: none blocking. Optional: decide whether a nightly-only full tier is acceptable for release cadence (the PR author's stated trade-off).

Auto-merge is armed, so approving sends it straight to the merge queue.


Generated by Claude Code

This branch has not been deployed

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

Labels

ci-perf CI / merge-queue performance finding (profiler routine) 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.

CI perf: full tier (41 legs) runs on every push to main, not just nightly

2 participants