Skip to content

ci: move post-merge verification to GCP and forbid paid runners - #555

Merged
luisleo526 merged 1 commit into
mainfrom
ci/post-fleet-gcp
Oct 27, 2026
Merged

luisleo526 merged 1 commit into
mainfrom
ci/post-fleet-gcp

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

Move the post-merge verification legs back to the GCP post fleet and forbid paid runners

What changes

  • Six job definitions (seven matrix cases: native-live is one job with the profiles live-sanitizers and live-tsan) run on ["self-hosted","pf-gcp-post"] instead of a paid larger runner: ci-post.yml jobs build (Release shards), build-debug, sanitizers, kernel-only; native-live.yml jobs native-live and native-live-shards.
  • Shard axes, counts, commands, aggregates, cache keys, artifact names and check names are unchanged. build-arm stays on the standard ubuntu-24.04-arm label. Release and promotion pins are untouched.
  • scripts/ci_preflight.py: the six jobs are pinned to the exact two-label post array (a scalar, a reordered array, an extra label, pf-gcp-pr or pf-gcp-main is refused); every pf-linux-x64-<n> / pf-linux-arm64-<n> label and every large / larger / xlarge suffix is refused at every job with no exemption (the old per-job exception helper is deleted). Note: a suffixed spelling such as pf-linux-x64-16-foo is not matched by the regex; it is not a declared label, so actionlint refuses it.
  • .github/actionlint.yaml: the three pf-linux-x64-* labels are removed.
  • docs/ci.md: rewritten line for line, still 2014 lines. The removed sentences and their introducing commits are named in the commit message.

Capacity (facts from the workflows and the fleet)

  • Post fleet: 6 VMs of c3d-standard-8, 2 runners each = 12 runners at 8 vCPU per VM.
  • One ci-post round puts 22 jobs on it: 18 moved shard executions (Release 4, Debug 2, sanitizers 4, kernel 2, native 4, live-sanitizers 1, live-tsan 1) + preflight + preflight-slow + the two corpus-parity.yml executions (ci-post.yml calls it twice, mode: subset and mode: full; the other job of each call is skipped). With the cost-balanced shard counts of the held shard change (Release 6, Debug 3, native 8) the round has 29 jobs.
  • 22 jobs on 12 runners means two waves. The first round is expected to be far above 15 minutes (the same legs took 41 to 92 minutes on this fleet before they were sharded). The plan to reach 15 minutes on our own machines follows separately.
  • No job has a timeout-minutes (the workflows carry only the comment that none is set), so there is no timeout margin to list.

Proof

  • Preflight and Release legs on the exact tree: see the run ids in the hand-off.
  • Per-leg wall on the post fleet: the first push-to-main ci-post run after merge, reported next to the paid-runner numbers.

🤖 Generated with Claude Code

Route the amd64 post shards (Release, Debug, kernel, sanitizers), the native
shards and both live sanitizer profiles to ["self-hosted","pf-gcp-post"].
Shard counts, matrices, verification commands, aggregates and check names are
unchanged. The workflow checker now refuses every numeric pf-linux-x64 and
pf-linux-arm64 label and every large/larger/xlarge suffix at every job, with no
per-job exception, and the paid label declarations leave the actionlint config.

docs/ci.md is rewritten line for line and stays at 2014 lines. These sentences,
introduced by 3ea5a0d (the routing and capacity claims), are replaced:

- "Post Release/Debug/kernel and native shards use `pf-linux-x64-16`; post
  sanitizers use `pf-linux-x64-32`; native-live sanitizers use
  `pf-linux-x64-64`."
- "One full post run needs four x64-16 and two x64-64 native runners
  concurrently."
- "The amd64 post build shards request hosted `pf-linux-x64-16`; the two arm64
  post cells run on hosted `ubuntu-24.04-arm`."
- "Hosted exceptions include the named light jobs, amd64 post shards, native
  profiles, arm64 and the existing release/promotion pins."
- "`native-live.yml` runs four `native` shards on hosted `pf-linux-x64-16`;
  `live-sanitizers` and `live-tsan` each build once on hosted
  `pf-linux-x64-64`."
- "The four amd64 post legs and native verification use hosted runners; their
  aggregates use the light image."
- The `ci-post.yml` and `native-live.yml` rows of the workflow table that name
  the pf-linux labels.
- "Hosted shards also run on a branch dispatch; the remaining post fleet still
  requires `main`."
- "Release uses four `build` shards, Debug two `build-debug` shards, and kernel
  two shards on 16 cores; sanitizers uses four on 32 cores."
- "`HOSTED_JOB_RUNNERS` pins hosted jobs; its larger/arm64 exceptions exclude
  PR callers."
- "Larger labels are allowed only at their exact named jobs' `runs-on` keys;
  `larger_runner` keys stay refused."

The historical timing sentence introduced by 0212cab keeps every measured
value and only names the former paid pool. The rollback sentence introduced by
b0f4341 no longer tells a reader to restore a paid label.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@luisleo526
luisleo526 merged commit 8154993 into main Oct 27, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant