ci: add sealed Rust 1.99 beside 1.93 behind a toolchain selector #20
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/runner-rust199"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ready: the owner approved the Rust 1.99.0 move in full on 2026-10-13 ("just go"). The coordinator relayed it. Merged with a merge commit, so the image's source revision
34a2916ec7b0stays reachable from main. Codewire's own move to Rust 1.99.0 still lands after its v0.3.388 release.Outcome
An additive runner-image leaf: Rust 1.99.0 (with
aarch64-unknown-linux-muslas a sixth target) beside the Rust 1.93.0 the image already has, behind one fixed toolchain selector. Each repository runs the toolchain it pins, so adopting the image changes nothing for a repository until it changes its ownrust-toolchain.toml. This PR adds source only. It builds, publishes and adopts nothing.Dockerfile.system-hz-rust199RUNover the Rust 1.93 image: installs six checksum-pinned archives into/opt/infra-rust/1.99.0and the selector into/opt/infra-rust/bin, first onPATHsystem-hz-rust-select.shrust199-inputs.jsonchannel-rust-1.99.0.toml(2026-10-01, SHA-256ce6dddc8…16b6a2)test-system-hz-rust199.pyverify-installed-system-hz-rust199.pytest-installed-system-hz-rust199.pyREADME.system-hz-rust199.mdHow selection works
The selector follows rustup's order:
RUSTUP_TOOLCHAIN; else thechannelof the nearestrust-toolchain.tomlorrust-toolchainfrom the working directory upward; else the image default, 1.93.0. It runs/opt/infra-rust/<version>/bin/<tool>with that prefix first onPATHandRUSTUP_TOOLCHAINset, so children stay on the same toolchain. An uninstalled toolchain, or a toolchain file that names no channel, exits 66. Nothing is installed at job time.rustup show active-toolchainandrustup target list --installedreport the selected toolchain's own values (five targets for 1.93.0, six for 1.99.0); every otherrustupoperation still exits 64.Decisions to review
sha256:37f659e6…), at the coordinator's direction, so there is no red window. The first commit on this branch (eeb7d98) built a replacing leaf on that image's parent; the second (34a2916) converts it; the third (29979d6) only corrects a size figure in the notes. A replacing image breaks Codewiremain(it asserts 1.93.0) from adoption until Codewire's own change merges.sha256:3208f9a7…once nothing pins it.PATHedits per repository. The alternative (defaultPATHstays 1.93.0; each repository's own step adds/opt/infra-rust/<version>/bin) needs a change in every consumer, covers only the steps after that one, and would not let Codewire's assertions pass unchanged.RUSTUP_TOOLCHAIN, gets 1.93.0, as today. A job that runscargofrom a scratch directory should exportRUSTUP_TOOLCHAIN.rust-lld. The recipe asserts the 1.99.0 toolchain's ownrust-lld, and the verifier links a static arm64 musl probe with it, the way Codewire's guest build links.scripts/forgejo-runner-image(noel/infra#1372) owns the host side.README.mdis unchanged. The Rust 1.93 host controller freezes its SHA-256 and its test checks it, so the notes are inREADME.system-hz-rust199.md.Both Codewire assertions pass unchanged
The verifier runs Codewire's
assert-ci-runner-image.shtwice, each from a directory holding that revision's ownrust-toolchain.toml, so the selector picks the toolchain exactly as a job in a Codewire checkout does:mainat049161a6b61326164…565cchore/rust-upgradeatc9349f21700ea0f8d…8023If either file changes before publication, its pin in the verifier must be updated and the image rebuilt.
Evidence
Workstation, 2026-10-12, at commit
34a2916ec7b0bc8ec4455205642d9e43579355b7(the image's source revision; the branch head29979d6changes onlyREADME.system-hz-rust199.md).python3 -I -B test-system-hz-rust199.py Dockerfile.system-hz-rust199 rust199-inputs.json channel-rust-1.99.0.tomlRUST199_TEST_CUSTODY_SOURCE=… python3 -I -B test-installed-system-hz-rust199.pyshellcheck -s sh system-hz-rust-select.shscripts/forgejo-runner-image dry-run(noel/infra#1372)Dry-run artifact: manifest
sha256:e54a2c5df3a30adc900715efabd336991b214d7338988f27be53f65a8926e31a, configsha256:5c95d5489f5849b56acdf62ddbaf447e994cc89202fe2317a45af305cba156fc, archive SHA-2560f00a3f20977e80663b05562de750277cdd38f42647692ff5208423d380b87a3(2,466,947,072 bytes). It is local only. The build is not reproducible, so that archive is the artifact to publish; a rebuild has a new digest.Not run:
test-system-hz-rust193.pyand the Rust 1.93 host tests. This PR changes none of their inputs.Dependencies and order
34a2916estays reachable as the image's source revision.main, its open branches and Infra keep selecting 1.93.0. Codewire's Rust 1.99.0 PR can then merge whenever it is ready.Owner gates
registry.noel.sh/oci-approved/act-node-dockerwithrobot$oci-promoter.WIP: DO NOT MERGE — ci: add sealed Rust 1.99 runner leafto WIP: DO NOT MERGE — ci: add sealed Rust 1.99 beside 1.93 behind a toolchain selectorWIP: DO NOT MERGE — ci: add sealed Rust 1.99 beside 1.93 behind a toolchain selectorto ci: add sealed Rust 1.99 beside 1.93 behind a toolchain selector