Repository navigation
CI: fail pnpm e2e legs that skip every test (#1054) - #1400
Conversation
The pnpm-family e2e suites return early with a SKIP line when pnpm or corepack is missing, and libtest reports those tests as passed. Their CI rows set no gate, so a runner without pnpm would turn the leg green without running anything; with corepack hidden, the PR row's 8 tests "passed" in 0.02s. The Linux rows of e2e_redirect_pnpm_build, e2e_safety_pnpm and e2e_redirect_rush_sim now set SOCKET_PATCH_PNPM_E2E_REQUIRED, and the three suites fail instead of skipping under it. A bare major pin (pnpm@10) now passes the version check when the installed release is inside that major. Empty values count as unset, since the shared step passes '' on every other leg. A script test pins the gate to those rows and suites. Refs #1054 Assisted-by: Claude Code:claude-opus-5-5
Review follow-up. The pnpm gate is now a per-row pnpm_required key, like npm_required, instead of an exact-suite-name match in the shared step, so a multi-suite row can't silently lose it. Also: e2e_safety_pnpm uses one skip helper, rush_sim's corepack probe doc is back on its function, the pnpm_build docs no longer call the non-@10 legs opportunistic, and e2e_vendor_pnpm_build treats an empty gate as unset like its siblings. The script test now checks the row key and that each suite reads the gate. Refs #1054 Assisted-by: Claude Code:claude-opus-5-5
|
BugBot review 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 21dcac0. Configure here.
|
Ready for review at
Generated by Claude Code |
Final review briefWhat it does. Three pnpm-family e2e suites print Risk: low. Only test files, ci.yml and a script test change. The main effect is stricter: under the gate the PR-tier pnpm row now needs all five corepack majors (7–11), so a corepack download failure there fails the leg instead of skipping silently. That's the intent, but it could show up as a new kind of flake. Look here
Verified
Changes I made: none. Open questions: none blocking. The full-tier rows ( Auto-merge (squash) is armed, so approving sends it straight to the merge queue. Generated by Claude Code |
LLM Description written by Claude Code:claude-opus-5-5
Refs #1054. The Linux rows are fixed here. The issue stays open for the Windows and macOS pnpm-family rows (full tier only), which I couldn't check against the gate from a Linux sandbox.
Problem
The pnpm-family e2e suites return early with a
SKIPline when pnpm or corepack is missing, and libtest reports those tests as passed. The e2e step'spassed > 0guard (ci.yml:1759) can't tell a skip from a real pass. Every other non-vlt e2e row already sets a*_REQUIREDgate, but these three rows set none:e2e_redirect_pnpm_build(PR tier, ci.yml:1262)e2e_safety_pnpm,e2e_redirect_rush_sim(full tier)So a runner without pnpm would turn those legs green without testing anything. Today they do run: merge-queue run 38170303367 ran all 8 pnpm tests.
Change
pnpm_required: '1', set on the Linux rows of the three suites. The run step passes it on asSOCKET_PATCH_PNPM_E2E_REQUIRED: ${{ matrix.pnpm_required || '' }}, the same pattern asnpm_required.e2e_redirect_pnpm_buildalready read the variable for the (disabled) pinned-matrix workflow, but only accepted an exact version. A bare major pin (pnpm@10) now passes when the installed release is inside that major. Exact pins still have to match exactly.''on every other leg.e2e_vendor_pnpm_build(not in ci.yml) gets the same rule so the four pnpm suites agree.scripts/tests/test_ci_e2e_tiers.py::PnpmRequiredGatechecks the step reads the key, that every Linux row running these suites sets it (and no other row does), and that each suite defines and reads the gate.RUSH_E2E=1opt-in skip is unchanged.Runner usage
No job, step or runner change. A lean PR run keeps the same 28 Linux jobs and about the same job-minutes before and after. The pnpm leg already does the real installs, so the gate adds no time.
Test evidence
Hiding corepack/pnpm (
PATH=/usr/bin:/bin:~/.cargo/bin):--ignored)=1e2e_redirect_pnpm_build(PR filter)e2e_redirect_rush_simRUSH_E2Eopt-in)e2e_safety_pnpmWith the real toolchain (node 22 corepack, pnpm on PATH) and the gate set: pnpm_build 8 passed (26s), rush_sim 3 passed (73s), safety_pnpm 4 passed (9s).
python3 -m pytest scripts/tests -q: 334 passed, 6 skipped. The newPnpmRequiredGatetests fail on origin/main (4 failed) and pass here.actionlinton ci.yml: the newmatrix.pnpm_requiredread adds the same "property is not defined" warning that every per-row key in this anchor-shared step already gets (npm_required,sbt,pip, ...): 3 more of the 165 existing.zizmor --offline: same 59 findings as origin/main.cargo fmt --all -- --check: clean.cargo clippy --locked --workspace --all-features -- -D warnings: clean. Clippy on the pnpm_build and safety_pnpm test targets: no new lints. The rush_sim test target has a pre-existingduplicate_modlint on origin/main; CI doesn't lint test targets./code-review high
9 findings, none a correctness bug. Fixed: exact-suite-name gate replaced by the
pnpm_requiredrow key, docs that still called the non-Anson (@10) legs opportunistic, rush_sim's displaced doc comment, the four pasted skip blocks ine2e_safety_pnpm(now one helper),e2e_vendor_pnpm_build'sis_some()disagreeing on empty values, and the brittle script-test checks.Not fixed:
pnpm_required()throughtests/common/. That belongs to the Tracking: share CLI test helpers through one test-support module instead of 100+ per-file copies #824 helper-dedup tracker.Follow-up (stays on #1054)
Gate the Windows and macOS rows of the same suites once a full-scope run confirms corepack/pnpm is present there.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q7te2UYzmfvjJPqfjfGazq
Generated by Claude Code