ci(nightly): build-nightly-app and the cold seed take blacksmith-6vcpu-macos-26, not the stalled 12 vCPU label
Stacked on #27444. The first two commits (4eed88bab78, 171e7934894) are #27444, which adds the picker's ONLY setting that this PR uses. Review c1e4add7d24 (test) and b832824b55d (fix). Merge #27444 first.
Summary
Two more nightly jobs on main can still route to blacksmith-12vcpu-macos-26, which hasn't started a job since 2026-10-28 20:32Z. In the last 100 nightly.yml runs (back to 2026-10-29 06:18Z), 0 of the 10 jobs that asked for it got a runner. Main's classic nightly run 40834485210 has waited since 07:47Z on that label for signing (#27444 fixes that path).
build-nightly-apptakes the trusted mini first. When the mini is busy or offline, and on every later attempt, it takespick-nightly-app-runner'scloud. The picker puts 12 vCPU first, so with both queues moving, or with no snapshot,cloudis 12 vCPU. Theruns-onliteral is 12 vCPU too. Now the pick setsONLY: 6vcpuand the literal is'blacksmith-6vcpu-macos-26'. The trusted-mini path doesn't change. The compilation cache keys on OS, arch and toolchain, not instance size. 6 vCPU built this app in 8 min today (runs 40833785678, 40834485210).refresh-test-compilation-cache(the scheduled cold seed) put its first matrix pool on the 12 vCPU sibling of the 6 vCPU pull-request pool. Now that entry is the pull-request pool as is:vars.MACOS_RUNNER_PR || 'blacksmith-6vcpu-macos-15', the same expression asseed-derived-data.yml'sSEED_POOL_2.test_seed_derived_data.pystill holds the nightly pools to a subset of the per-push seed pools.
Side effects:
seed_derived_data.py scopeputs the width (j<nproc>) in the key. So the nightly cold seed now writesj6keys, notj12. A 12 vCPU admission still gets the per-pushSEED_POOL_1chain and falls back toj6. WhileCI_PR_POOL_OWNED=1, the schedule skips this job, and only aseed_onlydispatch runs it.owned_pool_rescue.retry_labels()for nightly runs at new SHAs no longer counts the 12 vCPU label.
After this PR and #27444, no runs-on or matrix in nightly.yml names the 12 vCPU label, and its pickers never produce it.
Known nit, left on purpose: the step name "Pick the trusted mini or a moving cloud macOS label" in pick-nightly-app-runner is now out of date, because the cloud label no longer moves. A rename would need another review round.
Left as is: seed-derived-data.yml's SEED_POOL_1 still seeds the 12 vCPU sibling. That pool also publishes the app-host product, and pull-request admission can still pick 12 vCPU (pr_runner_pool.py). Moving it changes which seed widths exist, so it needs its own PR.
Testing
Regression: python3 tests/test_classic_nightly_build_runner.py. The new BuildAndSeedStayOffTwelveVcpu reads pick-nightly-app-runner's real step env and runs main() over 4 snapshot states and attempts 1 and 2. It also checks build-nightly-app's fallback literal and that no nightly.yml runs-on or matrix names the 12 vCPU label. On c1e4add7d24 (test only) it fails 10 checks. On the head, all tests pass. tests/test_nightly_universal_build.sh, which pins the build's runs-on, also fails on c1e4add7d24 and passes on the head.
Observed / Not run
Observed, run locally on the head, all pass:
test_classic_nightly_build_runner.pyandtest_seed_derived_data.py.test_ci_owned_pool_rescue.pyand the signing keychain guard.test_ci_publisher_mac_jobs_move.py,test_ci_pr_runner_pool.pyandtest_ci_queue_janitor.py.test_runner_label_policy.py,test_ci_runs_on_values.py,test_ci_no_github_hosted_macos.pyandtest_ci_nightly_off_blacksmith.py.test_ci_pull_request_caches_are_read_only.py,test_delivery_workflows_cancel.py,test_nightly_delivery_concurrency.pyandtest_ci_workflow_concurrency.py.test_seed_decide.py,test_ci_canonical_build_root.py,test_reuse_app_host_products.py,test_ci_cloud_overflow_switch.pyandtest_ci_repo_variable_defaults.py.tests/test_nightly_universal_build.sh,tests/test_ci_test_compilation_cache_seed.shandtests/test_ci_self_hosted_guard.sh.- actionlint 1.7.7 (
SHELLCHECK_OPTS=-S warning) onnightly.yml: clean.
test_ci_owned_pool_sources.py fails 1 check, the same way on origin/main 18f2c43e955. That check reads the feat-cmux-next tree, so this PR doesn't cause it.
Not run: a nightly or a scheduled seed with this change. A cold build on 6 vCPU was not timed; today's two 6 vCPU builds were warm. The job's timeout stays 90 min.
Changelog
none