Repository navigation
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
Closed
luisleo526 wants to merge 6 commits into
luisleo526 wants to merge 6 commits into
Conversation
…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]>
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
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]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Owner order (「趕快切過去」, laneboss #1056/#1057): the engine runs all CI on the fixed GCP fleet.
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.ymlanddocs.ymlnow start with the canonicalauthzjob (byte-identical to ci.yml's), and every other job in themneeds: [authz];docs.ymlbuild 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:pull_request_target, runs main's own copy and checks out no PR codepull_request_target, so promote must useworkflow_dispatchuntil CR-231 (#470) moves its trigger