Repository navigation
Pin the Rust toolchain so a new compiler arrives as a pull request - #273
Merged
Merged
Conversation
CI and the crates.io publish installed floating stable, so a Rust release changed what main and every open pull request built with at once. The repository now names one exact version, 1.99.0, with rustfmt and clippy, and the workflows install what the file names instead of a channel. Dependabot opens the pull request that moves the pin, and the README says how to move it by hand. The release smoke tests also run on a pull request that changes the pin, since it changes the compiler the release binaries are built with. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… action, drop the version from prose Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged
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.
Summary
Closes #270
One file names the Rust version; everything that builds the crate reads it through
rustup.Update bot. Dependabot's
rust-toolchainecosystem updateschannel = "1.xx.yy"inrust-toolchain.toml(GitHub's supported ecosystems reference, checked 2026-10-01). It can't be seen working untildependabot.ymlis onmain, so the README documents the manual bump as well.Seams tested. The toolchain file at the repository root, the workflow files under
.github/workflows/, andcargo package --list.Evidence
Before:
cargo test --test toolchainonmain's workflows, with no toolchain file:After: all three pass, with
package_leaves_out_the_toolchain_pinintests/packaging.rs. Locally on 1.99.0,cargo fmt --checkandcargo clippy --all-targets -- -D warningsare clean andcargo testpasses in full (30 test binaries, 0 failed).CI's logs,
testandtest-macos(run 36881322043):cargo fmt --checkandcargo clippy --all-targets -- -D warningspass inteston 1.99.0.The release workflow
release.ymlinstalls no toolchain of its own: it runscargothrough the runner image'srustup, which now readsrust-toolchain.tomland installs the pin. Until now it built with whatever Rust the runner image carried, which was not the version CI tested with.planjob of the release workflow on another open pull request, started the same hour (run 36881615905):"cargo_version_line": "cargo 1.98.1 (797e8a9bc 2026-08-05)", while CI on the same branches ran 1.99.0.After: this pull request's
planjob (run 36881322620):"cargo_version_line": "cargo 1.99.0 (5f94df478 2026-08-27)". In bothbuild-local-artifactsjobs the cache action reports 1.99.0 for the checkout beside the image's 1.98.1, anddistadds thex86_64-unknown-linux-musltarget to the pinned toolchain (running rustup to ensure you have x86_64-unknown-linux-musl installed,info: downloading component rust-std).release-smoke.yml.CI notes
testandtest-macosare red on one test,the_binary_never_links_openssl, which also fails onmainat 362b9ca: it runscargo tree --target all --offline, which fails on a cold cargo cache (failed to download android_system_properties v0.1.6 ... --offline was specified). That is The OpenSSL dependency test fails on a cold cargo cache, leaving CI red on main #269, which this issue puts out of scope. On Linux every other test binary passes (16test result: ok, 1 failed); on macOS nextest stopped at that first failure, 226 of 227 run passing. So the acceptance criterion "the tests pass on the pinned version" holds locally and is one inherited failure short in CI until The OpenSSL dependency test fails on a cold cargo cache, leaving CI red on main #269 lands.Merge Danger
Door: two-way
Reverting the commit puts the workflows back on floating
stable.Blast Radius: build
cargoin a checkout now downloads 1.99.0 throughrustupthe first time, whatever their default toolchain is. A Rust installed withoutrustupignores the file.mainstays on 1.99.0 until a pull request moves the pin.cargo install thirdshiftis unchanged: the file is not in the package.Unaddressed findings
Standards
ci.ymltwice,publish-crates.yml): sharing two lines of shell needs a composite action, which is more to maintain than the duplication, andno_workflow_installs_a_floating_toolchainguards the three copies.repository()intests/toolchain.rshas the same body asmanifest_dir()intests/release.rs: each test file keeps its own small path helper here (site()inshare_card.rs), andrepository()says what these tests read.dtolnay's, and a full shell parse is more than a guard test needs.Spec
rust-toolchain.tomladded to the release smoke tests' path filter, which the issue didn't ask for: kept, because a new compiler changes the musl binary the Rocky and WSL checks exist to test, and otherwise the first run on it would be the tag push.profile = "minimal", which the issue didn't ask for: kept, because it is whatdtolnay/rust-toolchaininstalled before; without it every CI job would also downloadrust-docs.release.ymlstill has ash.rustup.rsinstall step: it runs only for a container build, there is none configured, and the file is generated bydist.🤖 Generated with Claude Code