Repository navigation
fix(ci): pin cargo-geiger where the action actually reads the version - #2719
Merged
Merged
Conversation
The pin added in #2715 did not work. `cache-cargo-install-action` has no `version` input, and GitHub Actions treats an unknown input as a warning rather than an error, so `version: 0.13.0` was dropped on the floor and the step went on installing the newest release. Nightly run 260, on the commit that was supposed to fix this, failed exactly as run 259 did: + cargo install -f cargo-geiger --root ... --locked --version 0.14.0 error: cannot install package `cargo-geiger 0.14.0`, it requires rustc 1.97 or newer, while the currently active rustc version is 1.95.0 ##[warning]Unexpected input(s) 'version', valid inputs are ['tool', 'locked', 'git', 'tag', 'rev', 'features', ...] The version belongs in `tool:` as `name@version`. The earlier log's `INPUT_VERSION: 0.14.0` is the action's own resolved value, not an input it accepts, which is what made the wrong spelling look plausible. Add a test for both halves of the mistake: a source-built tool on the pinned toolchain with no `@version`, and any input this action silently drops. A pin that reads as correct and does nothing is worse than no pin, because the job keeps reporting the failure it was meant to fix. Jobs on the nightly toolchain are exempt from the pin requirement, since nightly outruns any released MSRV — that is why cargo-fuzz needs none.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bashkit | 17a17d8 | Commit Preview URL Branch Preview URL |
Oct 13 2026, 10:38 AM |
Contributor
Author
|
Since the last attempt was wrong on exactly this point, here is the spelling checked against the action's own source at the SHA we pin, rather than against convention.
tool="${INPUT_TOOL:?}"
...
if [[ "${tool}" == *"@"* ]]; then
version="${tool#*@}"
tool="${tool%@*}"
if [[ ! "${version}" =~ ^(...semver...)$|^latest$ ]]; then
bail "cache-cargo-install-action does not support non-semver version: '${version}'"
fi
...
else
version=latest
fiThree things that settle it:
The pre step then exports I'll still dispatch nightly on main after this merges and report the result, rather than calling it green from the config. Generated by Claude Code |
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.
What changed
Nightly's
cargo-geigeris pinned for real this time, astool: cargo-geiger@0.13.0. Adds a test that fails on both halves of themistake that made the first attempt a no-op.
Follow-up to #2715, whose geiger half did not work. The dd and wasmtime halves
of that PR did land correctly; this fixes only the third.
Why
#2715 pinned the tool with a
version:input. That action has no such input,and GitHub Actions treats an unknown input as a warning, not an error — so
the pin was dropped on the floor and the step kept installing the newest
release. I dispatched nightly on the merged commit to check, and run 260 failed
exactly as run 259 had:
What made the wrong spelling look right: the original failure log prints
INPUT_VERSION: 0.14.0, which is the action's own resolved value, not aninput it accepts. The version belongs in
tool:asname@version.Before / After
Before —
version:ignored,--version 0.14.0on the command line, jobred in 1s, the unsafe-code audit and its report upload both skipped.
After — the version reaches the action, which installs 0.13.0 (MSRV 1.85)
under the pinned 1.95.0. That install is the one already shown working on this
toolchain in #2715:
The new test,
scripts/tests/test_pinned_ci_tools.py, reintroducing theexact spelling I shipped — it catches both halves:
and passes on the corrected one:
Nightly only runs on a schedule, so I will dispatch it on main after this
merges rather than claim it green from the config alone — which is the mistake
#2715 made.
Risk
the required-CI path changes behavior.
installing the nightly toolchain is exempt, because nightly outruns any
released MSRV — that is why
cargo-fuzzin the fuzz job needs no pin, andthe test would be wrong to demand one. It detects the channel from the
# nightlycomment on thedtolnay/rust-toolchainref, which dependabotmoves together with the SHA.
future version of the action that adds an input will fail this test until
the list is updated. That is the intended direction: better a loud failure
than another silently-ignored input.
deferred until the toolchain reaches 1.97.
Checklist
scripts/tests/test_pinned_ci_tools.py, in thesuite required CI already discovers, shown failing on the exact broken
spelling and passing after. Also
just check-workflow-parity("releaseworkflows match CI for: node, python; rust toolchain pins agree").
Generated by Claude Code