Repository navigation
ci(platform): verify Linux arm64 on native ARM runners - #229
Merged
Merged
Conversation
…y vulnerability govulncheck reports GO-2026-6809 (crypto/x509 distrusts compromised intermediate certificates) as reachable in Go 1.27.2 through the CLI's diagnostic output path, so the release candidate and every source gate fail at go:vulncheck. Go 1.27.3 contains the fix. - go.mod: toolchain go1.27.3; the go directive and every module requirement are unchanged. - release/change-record.v2.json: the toolchain addition now states that release binaries are built with Go 1.27.3 and why; the pinned copy in internal/tools/releasechange/record_test.go is regenerated from it. Proof on this tree: A local npm run check sequence on darwin/arm64 passed (exit 0) on tree f7cfc5f with npm 12.2.0, CPython 3.15.0 and Go 1.27.3: 561/561 browser cases in Chromium, Firefox and WebKit with zero retries. One recorded deviation: the host firewall blocks Go-built binaries from the network, so the go:vulncheck step ran govulncheck against a vulnerability database snapshot fetched with curl (modified 2026-10-21T00:27:29Z) and found no vulnerabilities. With the same snapshot, Go 1.27.2 is reported affected by GO-2026-6809.
Add the required job "quality / platform smoke / linux-arm64" on the GitHub-hosted ubuntu-24.04-arm runner. Its first step fails unless uname -m reports aarch64. It then sets up the same pinned Node 26.11.1, verified npm, Go and Python 3.15.0 toolchains as the macOS platform jobs, runs the rootpath, repositorytransaction, processgroup and projectstatus packages natively, runs npm run npm:version and npm run platform:smoke, builds the complete current release wheel set, and runs the CPython 3.11.0 installed-wheel smoke, which selects the manylinux_2_17_aarch64 wheel and the pinned linux/arm64 CPython 3.11.0 image digest. The required aggregate needs the job and requires its success. The workflow oracles pin the job's name, runner, 15-minute timeout and exact ordered steps, the five required leaf jobs and the aggregate shell. They refuse mutants that move the job to another runner, drop, move or weaken its architecture check, drop or narrow its invariant, smoke, wheel-set or CPython 3.11.0 steps, or remove it from the aggregate needs or result checks. The Python runtime oracle counts the job as a pinned Python consumer. README states that required CI executes Linux arm64 on ubuntu-24.04-arm and x64 on ubuntu-24.04, that CI does not execute a host at the manylinux 2.17 floor, and that the CPython 3.11.0 smoke runs on both Linux architectures; its projection test follows. REQ-PROOFKIT-QUALITY-011 now names the Linux arm64 platform job, its architecture check and its CPython 3.11.0 step, and five required leaf jobs instead of four. CONTRIBUTING lists ubuntu-24.04-arm among the source-check targets. Proof on this tree: A local npm run check sequence on darwin/arm64 passed (exit 0) on tree 5573507 with npm 12.2.0, CPython 3.15.0 and Go 1.27.3: 561/561 browser cases in Chromium, Firefox and WebKit with zero retries. One recorded deviation: the host firewall blocks Go-built binaries from the network, so go:vulncheck ran against a vulnerability database snapshot fetched with curl (modified 2026-10-21T00:27:29Z): no vulnerabilities. The new arm64 job's success is proven only by hosted CI on this PR.
iperev
marked this pull request as draft
October 25, 2026 20:11
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.
Part of the UI-DESIGN-01 chain. Base branch:
chain/a0-go-1-27-3(#228, the Go 1.27.3 fix). This PR is one commit on that branch's head. Merge after #228. This is the first PR of the chain; the visual-reference PR stacks on it.README says Linux is supported on arm64, but no CI runner has ever executed Linux arm64. This PR adds a required native ARM job, so the arm64 claim is backed the way the macOS claims are.
What changes
New required job
quality / platform smoke / linux-arm64runs on the GitHub-hostedubuntu-24.04-armrunner with a 15-minute timeout. Its steps:uname -misaarch64. The job declares no container, so this checks the runner host itself.go.mod, and Python 3.15.0.rootpath,repositorytransaction,processgroup,projectstatus). Those packages contain Linux build-tagged tests, includingTestLinuxObservationClassification. They qualify the host for the source tools' process lifecycle, whichplatform:smokeand the CPython smoke use there.npm run npm:versionandnpm run platform:smoke. These build the native binary, run its--help, build themanylinux_2_17_aarch64wheel and runverify-current.packagebuild allandpythonpackage build), whichverify-minimumrequires.go run ./internal/tools/pythonpackage verify-minimum. The command picks the wheel and image from the Docker daemon's native architecture, here themanylinux_2_17_aarch64wheel and the arm64 CPython 3.11.0 image digest already pinned ininternal/tools/pythonpackage/minimum.go(python@sha256:924c9f87…). It then runs the existing offline, unprivileged installed-wheel smoke.Required aggregate.
quality / required aggregatenow needs the job and requires it to succeed. There are now five required leaf jobs.Workflow oracles (
scripts/workflow_*_test.go):needslist and the aggregate shell. The Python-runtime oracle now counts the job as a consumer of the pinned Python.|| true, or is replaced by the Darwin check;needs, whose result is unchecked or masked, or that is removed consistently from both.failure,skippedorcancelledLinux arm64 result cannot produce aggregate success.README. The platform block now says:
ubuntu-24.04-armandubuntu-24.04.The README projection test follows the new text. It also checks that each OS's architecture list is still
arm64, x64, the order in which the README names the runners.Requirements and docs.
REQ-PROOFKIT-QUALITY-011is changed explicitly, because "the same four required leaf jobs remain in the aggregate" would otherwise be false. It now names the Linux arm64 platform lane, the native-architecture first step, the CPython 3.11.0 step in that job, and exactly five required leaf jobs. The overview of the supply-chain-quality spec follows.CONTRIBUTING.mdaddsubuntu-24.04-arm (arm64)to the source-check targets that need native host/API qualification, and the job now runs that qualification.NON_CLAIMS.md,REQ-PROOFKIT-QUALITY-013and theREQ-PROOFKIT-PACKAGE-*requirements were checked and stay unchanged: none of their clauses becomes false.Compatibility
Not breaking. The CLI binary, JSON contracts, wheel bytes and wheel tags are unchanged; the npm tarball changes only in README.md and the supply-chain-quality spec files. Branch protection may list the new check
quality / platform smoke / linux-arm64. The aggregate already requires it, so protection that requires onlyquality / required aggregateneeds no change.Proof
Proof: A local
npm run checksequence on darwin/arm64 passed (exit 0) on tree557350793e08with npm 12.2.0, CPython 3.15.0 and Go 1.27.3: 561/561 browser cases in Chromium, Firefox and WebKit with zero retries. One recorded deviation: the host firewall blocks Go-built binaries from the network, sogo:vulncheckran against a vulnerability-database snapshot fetched with curl (modified 2026-10-21T00:27:29Z): no vulnerabilities. The new arm64 job's success is proven only by hosted CI on this PR.go test -p 2 ./scripts ./internal/tools/pythonpackage, the packaged requirement-source admission test,go tool actionlint(which knows theubuntu-24.04-armlabel and rejects an unknown one),npm run text-policy,npm run source-hygiene,npm run mermaid:checkandgit diff --check.ubuntu:24.04arm64 container as a non-root user. The cross-filesystem test is skipped there, as on every host without its fixture.verify-minimum, run by the Go tool on the darwin/arm64 host, passes on this tree against the linux/arm64 CPython image digest and themanylinux_2_17_aarch64wheel.verify-minimumrefuses a current-platform-only wheel set, which is why the job builds the full set first.Non-claims
ubuntu-24.04-arm, including the Docker daemon and the Docker Hub pull there, are unverified until CI runs.