Skip to content

ci: run the engine's CI on the GCP fleet (pf-gcp-pr / pf-gcp-main) - #472

Closed
luisleo526 wants to merge 6 commits into
mainfrom
ci/ci2a-gcp-engine-labels
Closed

luisleo526 wants to merge 6 commits into
mainfrom
ci/ci2a-gcp-engine-labels

Conversation

@luisleo526

@luisleo526 luisleo526 commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Owner order (「趕快切過去」, laneboss #1056/#1057): the engine runs all CI on the fixed GCP fleet.

  • 0de8e9d: 16 runs-on sites. authz + every non-release job -> ["self-hosted","pf-gcp-pr"] on every ref; release.yml release / prebuilt (linux-x86_64 slice) / notify-hub and promote-baseline promote -> ["self-hosted","pf-gcp-main"]. macOS / arm / hosted legs untouched.
  • 643af69 + debbc06: the linux-x86_64 prebuilt slice skips the sudo apt Eigen install on pf-gcp-main (Eigen 3.4.0 is baked into its Ubuntu 22.04 image) and fails closed if the image ever loses it (the 1.6.2 x86_64 leg failed on exactly this sudo step).
  • 2e7bc1a: actionlint declares both fleet labels.
  • b816635: preflight pins + tests + docs/ci.md follow the move; refusal tests kept and widened (cross-class route, retired/void labels, hosted fallback, dropped job, legacy corpus conditional).

Job names and required-check contexts are unchanged. The CI policy checker flags R2/R6 on the runs-on lines until LB-509 lands (#1053). The PR CI on pf-gcp-pr is the proof; pf-gcp-main legs run only after merge to main.

🤖 Generated with Claude Code


Security commit 7adc4ec (fork-PR gate; owner CI-FORK: outsider fork PRs run NO CI, no hosted fallback). corpus-parity.yml and docs.yml now start with the canonical authz job (byte-identical to ci.yml's), and every other job in them needs: [authz]; docs.yml build moves to ["self-hosted","pf-gcp-pr"]. Preflight pins it (gated_workflow_findings()), with 11 new refusal tests (none deleted).

Sweep of every engine job reachable from pull_request / pull_request_target / workflow_run:

workflow jobs gated by authz changed here
ci.yml authz, changes, preflight, build, sanitizers, kernel-only, native-live, corpus-parity-subset, build-gate yes (all need authz) runs-on only
corpus-parity.yml corpus-parity, corpus-parity-subset yes YES: authz added (was ungated)
docs.yml build yes YES: authz added + moved to the fleet (was ungated, hosted)
native-live.yml native-live, gate yes (no direct PR trigger) runs-on only
release.yml release, prebuilt, notify-hub n/a (workflow_dispatch only) runs-on + Eigen step
promote-baseline.yml promote n/a: pull_request_target, runs main's own copy and checks out no PR code runs-on only; NOTE: the fleet's JOB_STARTED hook refuses pull_request_target, so promote must use workflow_dispatch until CR-231 (#470) moves its trigger

luisleo526 and others added 6 commits October 21, 2026 22:26
…cp-pr and pf-gcp-main

Laneboss bulletin #1056 (CORE-TOP 22:23): the engine and app share a fixed GCP self-hosted fleet. `["self-hosted", "pf-gcp-pr"]` runs authz and every non-release job on every ref; `["self-hosted", "pf-gcp-main"]` (Ubuntu 22.04, no sudo, no docker) runs release.yml prebuilt / release / notify-hub and promote-baseline.yml promote, and its runner group accepts only the engine's workflow files at refs/heads/main.

16 runs-on sites, nothing else: release.yml release, prebuilt linux-x86_64 matrix entry, notify-hub and promote-baseline.yml promote -> pf-gcp-main; ci.yml authz, changes, preflight, sanitizers, kernel-only, build-gate and the build matrix entry os: ubuntu-24.04, corpus-parity.yml corpus-parity and corpus-parity-subset (the two multi-line conditional expressions replaced by one literal each), native-live.yml authz, native-live and native-live-gate -> pf-gcp-pr. The two authz blocks carry the canonical text of laneboss notes/authz-canon-hosted.md (comment line and the `["self-hosted", "pf-gcp-pr"]` literal, byte for byte). Untouched: docs.yml build (ubuntu-latest), release.yml prebuilt linux-aarch64 (ubuntu-22.04-arm) and macos-universal (macos-latest), ci.yml build macos-26. Job ids, job names, needs, if and every step are unchanged; no timeout-minutes added.

The preflight pins in scripts/ci_preflight.py, their tests and docs/ci.md still name the old pool labels and follow in a separate commit; this commit alone is not expected to pass the engine preflight. The labels go live when laneboss's fleet is online (ETA 22:45); until then jobs on these labels queue.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…64 slice

That slice now runs on the self-hosted pf-gcp-main fleet, which has no sudo and
bakes libeigen3-dev 3.4.0 into its image. The hosted Linux slice (linux-aarch64)
still installs it, so the step is kept and narrowed to it.

Co-Authored-By: Claude Code <[email protected]>
Companion to the narrowed apt step: on the self-hosted linux-x86_64 slice the job now asserts the Eigen 3.4 headers exist before configuring, so a missing system Eigen stops the release instead of falling back to an unverified source.

Co-Authored-By: Claude Code <[email protected]>
The previous commit moved 16 engine runs-on sites to ["self-hosted","pf-gcp-pr"]
and ["self-hosted","pf-gcp-main"]. .github/actionlint.yaml only declares the
retired pool labels, so actionlint (and the engine's own
test_actionlint_runner_labels_rejects_removed_label, which removes one of these
two labels from the config and requires the checker to refuse) would fail on
the new workflows.

This declares both labels and keeps every existing label declared; nothing is
removed. It is outside the pins lane's three-file scope and was edited by the
supervisor as a two-line glue change.

Co-Authored-By: Claude Code <[email protected]>
Preflight pins, their tests and docs/ci.md follow the runs-on move to
["self-hosted","pf-gcp-pr"] (authz and every non-release job, every ref)
and ["self-hosted","pf-gcp-main"] (release, the linux-x86_64 prebuilt,
notify-hub and baseline promotion), owner order via laneboss #1056/#1057.
The LIGHT/LINUX pool split and the corpus conditional pin are retired.
Refusal tests are kept and widened: a release-class job on -pr, a
non-release job on -main, any retired pool label or the void
pf-gcp-engine-* labels, a hosted fallback expression, a dropped routed job
and the legacy corpus conditional all fail the check.

Lane core-org-engflip-pins (ORG-CX); diff read by CORE-TOP. Tests not run on
the Mac; the PR's CI on pf-gcp-pr is the proof.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… the fleet

corpus-parity.yml triggers on pull_request (corpus and parity-tooling paths)
and had no authz job. Its old conditional runs-on was the only fork and
pull_request_target guard; moving both jobs to a literal
["self-hosted","pf-gcp-pr"] left a fork pull request running untrusted code on
a fleet that has sudo and docker. docs.yml accepted pull_request too, with an
ungated job still on GitHub-hosted ubuntu-latest.

Both workflows now start with the canonical authz job, byte-identical to
ci.yml's (the same header comment, the space inside the array, the same single
step whose sha256 scripts/ci_preflight.py pins), and every other job needs it:
corpus-parity and corpus-parity-subset, and docs build. Docs build moves from
ubuntu-latest to ["self-hosted","pf-gcp-pr"]; its Cloudflare deployment step
still skips pull_request. Outsider pull requests run no CI and get no hosted
fallback; dependabot counts as ours through the authz allowlist (CI-DEPBOT A).

scripts/ci_preflight.py gains gated_workflow_findings(): first job authz,
verbatim canon header and step hash, no authz overrides (needs/if/env/uses/
strategy/continue-on-error), needs authz on every other job, readable events
without pull_request_target, and a literal fleet array on every runs-on. It
pins corpus-parity.yml and docs.yml. They are deliberately not routed through
the full authz contract: corpus-parity needs persisted checkout credentials for
its private HTTPS submodule and git lfs pull, and docs deploys with Cloudflare
secrets; forcing persist-credentials: false or banning secrets there would
break them. docs.yml moves out of HOSTED_JOB_RUNNERS, which is now empty.

Refusal tests added for each mutation (authz job dropped, needs removed from
either corpus job or from docs build, one-character change to the authz
script, a hosted fallback expression, docs build back on ubuntu-latest,
pull_request_target, authz reordered or given an extra step/override), each
asserting the intended finding and the whole-workflow contract; every existing
assertion is kept. Not executed on this Mac: the PR's preflight job on
pf-gcp-pr is the proof.

Sweep of every engine workflow triggered by pull_request,
pull_request_target or workflow_run: ci.yml fully gated; corpus-parity.yml
and docs.yml were the ungated ones and are fixed here; native-live.yml has no
direct PR trigger; promote-baseline.yml's promote is pull_request_target,
ungated, and unchanged in this commit (it runs main's own copy of the file,
checks out and runs no PR code, and its WIF condition admits only
refs/heads/main) — reported to CORE-TOP rather than widened into a release
workflow.

Lane core-org-472sec (ORG-CX); diff read by the supervisor. Tests not run on
the Mac; CI is the proof.

Co-Authored-By: Claude Code <[email protected]>
@luisleo526

Copy link
Copy Markdown
Collaborator Author

Superseded by #474: the same tree (10809b3756) as ONE commit whose message names the docs/ci.md rewrite, because #472's preflight failed only on the doc-reverts gate (19 unnamed deletions introduced by 21ba62b / 03b2406 / b816635; each commit is judged with its own message, and these were already pushed, so no rewrite). The branch is kept. Every fleet leg here was green: authz, corpus-parity full + subset, kernel-only, build Release + Debug, sanitizers, native-live x3, macOS.

@luisleo526 luisleo526 closed this Oct 21, 2026
luisleo526 added a commit that referenced this pull request Oct 21, 2026
…ork-gated (#474)

Owner orders (laneboss #1056/#1057; engine channel 「趕快切過去」): engine CI runs
on the fixed GCP fleet. authz and every non-release job use
["self-hosted","pf-gcp-pr"] on every ref; release.yml release, the
linux-x86_64 prebuilt slice and notify-hub, and promote-baseline's promote use
["self-hosted","pf-gcp-main"]. macOS and arm legs stay hosted.

One commit with the tree of PR #472's head 7adc4ec (0de8e9d, 643af69,
debbc06, 2e7bc1a, b816635, 7adc4ec), so the doc-reverts gate judges the
docs/ci.md rewrite with a message that names it:

- The CI-routing sentences of docs/ci.md introduced by 21ba62b (the pf-ci
  pool canon: pf-ci-x64 / pf-ci-x64-16 / pf-ci-crj, PF_CI_LABELS matching,
  pf-ci-release reservation, REL-HOSTED = B, the legacy corpus expression and
  the remaining hosted routes) are replaced by the fleet routing above.
- The routing sentence introduced by 03b2406 is replaced the same way, and the
  interim sentences b816635 added are folded into the final text.

Also: the linux-x86_64 prebuilt slice skips the sudo apt Eigen step on
pf-gcp-main (Eigen 3.4.0 is baked into its Ubuntu 22.04 image) and fails
closed if Eigen is missing; actionlint declares both fleet labels; preflight
pins the routing with refusal tests; corpus-parity.yml and docs.yml get the
canonical authz job with needs: [authz] on every other job (owner CI-FORK:
fork PRs run no CI, no hosted fallback); docs build moves to pf-gcp-pr.

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
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