Repository navigation
ci(runner pools): tests resolve RUNNER_POOLS reads to the declared pool members - #32417
Conversation
… the pool's members Groundwork for routing every runs-on through the declared pools instead of a literal single-size Blacksmith label (Leo, 2026-10-28: "Where the f***ing are the generalized solution to all these problems that these incessant pins?"). - .github/runners.json gets a copy of main's `pools` declaration (the one scripts/ci/runner_pools.py reads); tests/test_ci_runner_pools_copy.py keeps it equal to main's and refuses a pool read that names no declared pool. - tests/runs_on_labels.py parses `.<pool>` after fromJSON(vars.RUNNER_POOLS) and resolves it to that pool's members, so guards that resolve labels keep working when a literal last resort becomes a pool read. - docs/ci-runners.md: the Runner pools section. Leo-ask: ask-973a915bea Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-04cad32e0d917ebc8a49
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Shipped in:
|
|
Found 4 test failures on Blacksmith runners: Failures
|
…ool set with main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-04cad32e0d917ebc8a49
|
Review (subagent claude-opus-5-5 medium): SHIP at d570ad0 The earlier blocker is fixed: the pools copy test is a manual test with a reason and is listed in UNWIRED, and the wiring test passes. The tokenizer was checked over all 2,854 workflow expressions: none tokenize differently, and the 17 that newly parse are all Follow-ups: the |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo-ask: ask-973a915bea
Leo, 2026-10-28: "Where the f***ing are the generalized solution to all these problems that these incessant pins?"
This is step 1 of 4 on feat-cmux-next. It is groundwork and changes no workflow. 475 runs-on lines end in a literal single-size Blacksmith label, and a re-run cannot move a literal. The next PRs point each of those at its size's pool,
fromJSON(vars.RUNNER_POOLS).<pool>. main declares those pools (#32393), andrunner_pools.pykeeps them on a live member. The last PR adds a guard test that refuses a new literal.What this PR changes:
.github/runners.jsongets a copy of main'spoolsdeclaration.tests/test_ci_runner_pools_copy.pykeeps the copy equal to main's wherever origin/main is in the checkout. It also refuses a workflow that reads an undeclared pool, which would read '' and queue forever.tests/runs_on_labels.pynow parsesfromJSON(vars.RUNNER_POOLS).<pool>and resolves it to that pool's members (never ''). Every guard built on it keeps resolving labels after a literal becomes a pool read. Before this change, the tokenizer stopped at.<pool>.docs/ci-runners.mdgets a Runner pools section.Observed / Not run
python3 tests/X.pyfor every test that imports runs_on_labels, plus test_ci_runner_pools_copy, test_ci_runner_set, test_ci_repo_variable_defaults, test_ci_fork_runner_routing and test_ios_internal_builder. All pass.Performance
Changelog
none
Agent session: agent session
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Makes CI tests resolve
fromJSON(vars.RUNNER_POOLS).<pool>reads to the declared pool members, so label guards keep working when a literal runs-on label becomes a pool read. Workflows themselves are unchanged.poolsdeclaration into.github/runners.json; a new hand-run test keeps the copy equal to main's across the full pool set and refuses reads of an undeclared pool (which would resolve to''and queue forever).tests/runs_on_labels.py's parser with property access (.pool) and resolves it to that pool's members.docs/ci-runners.md.Written for commit d570ad0. Summary will update on new commits.