Repository navigation
[CI] Warm only Linux for compiler recipe changes - #28081
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to Compiler-only changes warm Linux alone while the other intended events retain platform warming. The one-time old/new overlap may duplicate cache work, but does not replace cache entries or fail warmer jobs; no material merge-blocking risk was identified. Pre-merge checks ·
|
8cec1c5 to
4f18bdf
Compare
ELI5
Compiler cache recipe edits currently start five warmers, although only Linux x64 uses that recipe. This change starts just that Linux job for compiler-only edits, leaving more runners available for tests.
What Changed
The existing four platform/fixture jobs move unchanged into a reusable workflow. Static workflow paths select Linux alone for compiler-only main pushes and PRs. Native/global recipes, warmer workflow edits, mixed changes, scheduled repair, and manual runs retain five parallel jobs. Native-only PRs remain unselected. Two cache-policy test files now follow the actual platform caller’s workflow path to the moved Windows, ARM, and fixture jobs; the Linux x64 reader stays in the original workflow. Every original case and assertion remains.
Each physical role has one concurrency group per PR or ref. Compiler-only edits replace Linux work while preserving unaffected native/fixture repairs already running. Windows architectures have separate groups. Cache keys, permissions, actions, installation steps, and budgets stay unchanged.
Why
Static routing removes four redundant allocations without adding a runner to detect changed paths. Keeping existing steps avoids introducing another cache implementation. Independent job concurrency prevents compiler edits from discarding scheduled repair for unrelated cache roles.
Linked Issue
N/A — ongoing maintainer CI capacity work.
Visual Proof
N/A — workflow configuration only; no app interaction changes.
Testing
Before/after allocation prediction: compiler-only event: 5 → 1 physical runners (four fewer); all other previously selected classes: at most the original five. These are locally verified configuration counts, not hosted before/after timings. Overall runner-second savings and fleet throughput remain unmeasured.
Local accepted qualification commands used 0.089763s wall / 0.094800s child CPU. An initial actionlint attempt found the enclosing worktree instead of the owned candidate; that failed context attempt cost 0.077218s / 0.079035s, was retained, and was corrected by giving only the owned candidate its own Git root. The formatter was not repeated.
The first ordinary wave on head
8cec1c58failed on an untouched upstream production file exceeding the 300-line limit. Its four attempt-1 runs used 451 assigned runner-seconds / 9 physical allocations, with 581 queue-seconds recorded separately. All five warmer jobs passed; full test qualification was blocked. These costs remain counted.This head incorporates actual upstream main
9c1d5d2f, which extracted the declaration into a separate module without changing the lint limit. The unchanged three YAML files were reapplied; the PR adds no production edits. A complete copy of that main source passed the actual oxlint check locally: 32,154 files, zero warnings/errors; 7.475840s wall / 15.837510s child CPU. The pinned public CLI ran with the ordinary--format githubflags. Previously passed formatter/actionlint/routing checks were preserved.An earlier local attempt stopped before oxlint: pnpm automatically began dependency preparation through a shared dependency link and rejected the hoist directory. Its 2.358974s wall / 2.151269s CPU cost is retained separately. It rewrote local bin wrappers; the known original oxlint wrapper was restored, and that broader local provider is quarantined. The successful correction used separately copied unchanged public lint tools, with no pnpm, installs, shared dependency link, or library changes. No unchanged CI rerun or waiver was used.
The second ordinary wave on
4f18bdffpassed static analysis and all five warmers, but two unit shards failed because the cache-policy tests still looked for moved jobs in the old workflow. This regression came from this change. The correction follows the real platform caller’susespath, so disconnected or misrouted workflow jobs still fail the contracts. Its four attempt-1 runs used 3,793 assigned runner-seconds / 16 physical allocations, with 67 queue-seconds separate. Across both terminal PR waves: 4,244 runner-seconds / 25 allocations; 648 queue-seconds separate. These costs remain counted.The two-file correction was formatted once (0.081830s wall / 0.021760s CPU). Its two targeted lint commands and all 67/67 tests passed in 1.742304s wall / 2.163381s child CPU on a healthy independent local provider, using the current workflow/action readers and stock Bun configuration, isolation, six setups, and four-worker limit. All source overlays were restored and owned process groups closed; the quarantined provider was not used. This scoped result does not claim full local root/native readiness. Ordinary CI on corrected head
4ad77dcapassed: all five full unit shards, static analysis, relay integration, all five warmers, the Headless detector, and the LoC check. Its five attempt-1 runs used 3,669 assigned runner-seconds / 17 physical allocations, with 1,298 queue-seconds separate. Across all three terminal PR waves, including both failures: 7,913 runner-seconds / 42 allocations; 1,946 queue-seconds separate. There were no reruns, manual dispatches, or manual cancellations.The PR merged as
845b7232at 2026-10-12 23:34:58 UTC after complete legacy-main queued and in-progress queries were both empty. All three automatic main push runs also passed: both warmer entrypoints and Headless. They used 457 runner-seconds / 6 allocations; 71 queue-seconds separate. The full known PR plus automatic main lifecycle used 8,370 runner-seconds / 48 allocations; 2,017 queue-seconds separate, including both failed PR waves. Unrelated manual dispatches sharing the workflow SHA are recorded separately and are not attributed to this change.Review
The moved jobs preserve their original bodies, and the two caller jobs allocate no physical runners. GitHub documents same-commit local workflow reuse and caller-associated context, preserving PR cache-save restrictions. Its job concurrency rules allow one active and one pending job per role. Schedules do not cancel active roles; other events request cancellation of matching active roles. New same-role jobs replace pending jobs. Cache roles share no artifacts or job dependencies.
Agent skill upstream boundary
Notes
Merge only after old workflow-level warming for the same main ref is naturally terminal; otherwise old and new concurrency groups cannot coordinate during transition. No manual cancellation is needed. Linux ARM and both Windows jobs are unchanged; SSH/mobile and production behavior are unaffected. Whole-lifecycle runner-second improvement is not claimed from static routing alone. Local verification recorded Git environment only after the first owned-project initialization; the owned Git root and unchanged primary state were verified afterward. Subsequent preparation explicitly guarded inherited Git variables.
Checklist