Repository navigation
CI: type-check Windows in the queue, in parallel (#1385) - #1386
Conversation
Assisted-by: Claude Code:claude-opus-5-5
The lean merge queue's only Windows job built and linked every CLI test binary after waiting for clippy, then uploaded a bundle nothing in lean scope downloads. It set the queue's critical path in 27 of 30 runs, about 9.5 minutes of a 9.6-minute run. A new windows-compile-check job now runs on lean merge_group runs instead. It starts at once and runs cargo check over the CLI and every CLI test target, which still catches a cfg(unix) slip (#1324). Full scope, nightly and dispatch keep the full e2e-build-windows build that their Windows legs consume. Pull requests are unchanged. Fixes #1385 Assisted-by: Claude Code:claude-opus-5-5
A cargo build cache can't satisfy cargo check, so restoring the nightly build cache left the queue check re-checking every dependency. The nightly run now also runs windows-compile-check under its own key, and only main saves it, so queue entries restore a cache that matches. The check now also covers the lib and the socket-patch bin in non-test mode, so code under cfg(not(test)) is type-checked on Windows too. The scheduling test now exempts the job only from the clippy-ancestor rule. The rule against always() still applies to it. Assisted-by: Claude Code:claude-opus-5-5
|
BugBot review Generated by Claude Code |
|
Ready for review at
Slack announcement pending (no Slack send tool in this run; the next run retries). Generated by Claude Code |
Final review briefWhat it does. In the lean merge queue, replaces the Windows full test build ( Risk: low–medium. CI-only, no Rust changes. Trade-off accepted in the description: a Windows-only link error now surfaces in the nightly instead of the queue. The new job can't run before this PR's own merge_group run, so that first queue run is its real test. Look here
Verified. Read the full diff; confirmed the Changes I made. None. Open questions. None blocking. Heads-up: this PR and #1383 both edit Auto-merge is armed: approving sends it straight to the merge queue. Generated by Claude Code |
e2e-build-windows keeps this branch's full-scope-only condition and gains main's pr_unchanged gate. The scheduling test pins the combined condition. 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 9471a78. Configure here.
LLM Description written by Claude Code:claude-opus-5-5
Fixes #1385
Problem
#1378 put
e2e-build-windowsin the lean merge queue to catchcfg(unix)slips (#1324), because lean PR runs skip Windows. The job reuses the full*e2e-build-steps: acargo test --no-runthat codegens and links every CLI test binary (~7.2 min on a hosted 4-vCPU runner), then a 41 MB bundle upload that no lean job downloads. It also waits onclippy, only to readoutputs.reuse, which is nevertrueon a merge_group run. #1385 found it was the last job beforeci-okin 27 of 30 queue runs (p50 9.45 of 9.6 min).Fix (
.github/workflows/ci.yml)windows-compile-checkruns on lean merge_group runs (vars.CI_SCOPE != 'full'). It has noneeds, so it starts at t≈0. It runscargo check --locked -p socket-patch-cli --all-features --lib --bins --tests, so the lib, the shipped bin (includingcfg(not(test))code) and every CLI test target are type-checked on Windows. There's no bundle and no upload.e2e-build-windowsnow runs only on full scope, schedule and dispatch, wheree2e-windowsandcargo-vex-matrix-windowsconsume its artifact. In the queue, exactly one of the two jobs runs.cargo check, and a merge-queue ref can't share a cache it saves. So the check uses its owncheck-windows-latestkey, and the nightly also runs the job only so that main saves that key (save-if: github.ref == 'refs/heads/main').ci-okneeds the new job. The required check names (ci-ok,clippy) and the aggregation are unchanged. The Linux Depot mapping and kill switch are untouched; this job is hosted Windows, like the one it replaces.scripts/tests/test_ci_scheduling.py: a new test pins the split (if-conditions, noneeds, check-not-build, the cache key andsave-if, no upload). The preflight test exempts this job only from the clippy-ancestor rule. The no-always()rule still applies to it.Runner usage
pull_request)Merge-queue critical path: the Windows leg should now finish around minute 4–5, before
coverage(~7.1). merge_group created →ci-okshould drop from p50 ~9.6 to ~7.1–8 min. The Windows timing is an estimate. Lean CI can't exercise this job before it enters the queue (a dispatch runs the full-scopee2e-build-windowsinstead), so the first queue run of this PR is the measurement. I'll post it on #1385.Trade-offs (from /code-review high, kept on purpose)
clippypasses. An entry that fails clippy (~1.3 min) also holds a Windows runner untilmerge-queue-fail-fast.pycancels the run, usually within one 30 s poll. Gating on clippy would put 1.3 min back on every merge, and that is the latency this PR removes.Fixed from the same review in 7ca55aa: a restore-only reuse of the nightly build cache (it couldn't satisfy
cargo check, so every dependency was re-checked), the bin not being checked in non-test mode, the over-broad test exemption, and the hard-coded coupling to the build job's cache key.Validation
python3 -m pytest scripts/tests -q: 323 passed, 4 skipped. The old preflight test failed on the new job before the exemption was added.cargo check --locked -p socket-patch-cli --all-features --lib --bins --testspasses locally (Linux, cold: 2m48s on 4 cores).actionlintv1.7.7: the same kinds of finding as on main, plus one more instance of its existing YAML-anchor limitation (env: *e2e-build-env, the same line ase2e-build-windows).zizmor --offline: 23 low, 0 medium/high, the same as main. There is one more suppressed finding.fromJSONmatrix is unchanged, andci-ok.needsequals every other job.cfgcode changed, so there's no full-scope dispatch.🤖 Generated with Claude Code
https://claude.ai/code/session_01XkkCjPuNE3yz1M8n4EB44N
Generated by Claude Code
Note
Low Risk
Workflow and scheduling tests only; merge-queue Windows coverage drops linking in lean scope, so link-only failures may surface in nightly/full runs instead of the queue.
Overview
Lean merge queue no longer runs
e2e-build-windows(link ~60 test binaries + artifact upload). It runs a newwindows-compile-checkjob that **cargo check**ssocket-patch-cli(lib, bins, tests) on Windows without waiting onclippy, so Windows validation can start immediately and shorten the queue critical path.e2e-build-windowsis limited toCI_SCOPE=full, nightly, andworkflow_dispatch—wheree2e-windows/cargo-vex-matrix-windowsstill need built binaries. Nightly also runswindows-compile-checksomaincan write the separatecheck-windows-latestcache (build caches do not satisfycargo check).ci-oknow depends onwindows-compile-check.test_ci_scheduling.pypins the split (conditions, no artifact, parallel-start exemption) and documents that lean queue Windows coverage is type-check only, not link/run.Reviewed by Cursor Bugbot for commit 9471a78. Configure here.