build: unbreak CI by bumping the static-analysis toolchain and cargo-spellcheck - #88
Conversation
0.15.7 publishes aarch64-unknown-linux-gnu and aarch64-pc-windows-msvc assets, which 0.15.1 does not. This removes both aarch64 failure modes at source: linux-arm no longer falls back to a source build, and windows-arm no longer installs an x86_64 binary that segfaults. The 0.15.7 em-dash tokenisation regression is already neutralised by the tokenization_splitchars override in spellcheck.toml. Experimental: pushed to see the ARM legs.
Codecov Report✅ All modified and coverable lines are covered by tests. ❌ Your project status has failed because the head coverage (99.9%) is below the target coverage (100.0%). You can increase the head coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #88 +/- ##
=====================================
Coverage 99.9% 99.9%
=====================================
Files 135 135
Lines 17449 17449
=====================================
Hits 17448 17448
Misses 1 1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
cargo-semver-checks builds rustdoc for the crate under test in a scratch project that does not use the workspace Cargo.lock, so it re-resolves dependencies to their newest compatible versions. kstring 2.0.3 and later require rustc 1.96, and the lock only pins 2.0.2 for the workspace build, so the rustdoc build fails on the pinned 1.95 toolchain and anvil-semver-check exits 101. This surfaced when cargo-aprz-lib arrived, the first crate reaching kstring through rustsec -> gix -> gix-attributes. It fails on every pull request and on the scheduled run against main. RUST_LATEST selects the static-analysis toolchain and is independent of RUST_MSRV, which stays at 1.95, so the MSRV promise is unchanged. Current stable is 1.97. 1.97 no longer reports single_use_lifetimes on group_all_metrics_by_category, which made its expect attribute unfulfilled; clippy.allow_attributes rules out swapping it for allow, so the dead attribute is removed.
There was a problem hiding this comment.
Pull request overview
This PR bumps the pinned cargo-spellcheck version used by the cargo-anvil/Just-based tooling catalog from 0.15.1 → 0.15.7, aiming to pick up native aarch64 release assets (Linux and Windows) and eliminate the prior ARM-related installation/runtime problems. It updates the corresponding generated artifacts (templates, snapshots, and lock/checksum material) so the repository and emitted anvil trees stay consistent.
Changes:
- Bump
cargo_spellcheck_versionto0.15.7in the anvil versions catalog and in the cargo-anvil template copy. - Update
CARGO_SPELLCHECK_VERSIONinconstants.envto match the new pin. - Refresh cargo-anvil-generated snapshot outputs and the
.anvil.lockcatalog/file checksums to reflect the version change.
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| justfiles/anvil/versions.just | Update the pinned cargo_spellcheck_version to 0.15.7 in the anvil tool catalog. |
| crates/cargo-anvil/templates/justfiles/anvil/versions.just | Keep the template catalog in sync with the new spellcheck pin. |
| constants.env | Update the exported CARGO_SPELLCHECK_VERSION used by setup/CI scripts. |
| crates/cargo-anvil/tests/snapshots/snapshots__local_only.snap | Regenerate snapshot output to reflect updated pinned versions content. |
| crates/cargo-anvil/tests/snapshots/snapshots__github_backend.snap | Regenerate snapshot output to reflect updated pinned versions content. |
| crates/cargo-anvil/tests/snapshots/snapshots__ado_backend.snap | Regenerate snapshot output to reflect updated pinned versions content. |
| .anvil.lock | Update catalog and file checksums after regenerating/updating pinned content. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The branch had diverged far enough that GitHub could no longer compute a merge
commit, so every `pull_request` workflow stopped triggering: only the `dynamic`
Copilot run fired, and the PR reported a single `license/cla` check rather than
the usual forty-four. The merge is what restores CI, not a cosmetic catch-up.
Conflict resolution:
- `run-in-container.ps1`/`.sh`, their templates, and
`container_customization{,_bash}.rs` were modified on main and deleted here.
They are the runner seam this branch replaces, so they stay deleted.
- `container.rs` conflicted where main's assertions for that same seam
(`ANVIL_CONTAINER_BASE_IMAGE`, `customization_source`, the `driver` local)
were spliced into the middle of the new listing test. Those assertions
reference a driver that no longer exists; ours is kept whole.
- `.spelling` is the union of both sides: `variadic` from here, plus the
fifty-three words main added.
- `.anvil.lock`, both READMEs and the three snapshots are generated, so they
were regenerated rather than hand-merged.
Main brings two CI fixes this branch was missing: the static-analysis toolchain
and cargo-spellcheck bump (#88), and vlen off the yanked 0.3.0 (#97).
Validation: `cargo test -p cargo-anvil` -- 311 unit plus 51 across the other
targets, 0 failed. `cargo anvil` converges.
🤖
Impact
Two independent CI breakages, both currently red on every pull request:
anvil-semver-checkfails on all fourpr-fastlegs, and on the scheduled run againstmain.anvil-spellcheckfails on the two aarch64 legs.Neither is caused by a change in this repository. Both are fixed at source rather than worked around, so the aarch64 legs regain real spellcheck coverage instead of skipping the check.
Problem
1.
kstringoutran the pinned toolchain.cargo-semver-checksbuilds rustdoc for the crate under test in a scratch project (cargo new+cargo add --path) that does not use the workspaceCargo.lock, so it re-resolves dependencies to their newest compatible versions.kstring2.0.3 and later require rustc 1.96; the lock pins 2.0.2, so the workspace build is fine but the scratch build is not:This surfaced when
cargo-aprz-libarrived in #76 -- the first crate reachingkstringthroughrustsec->gix->gix-attributes-- and broke as soon askstring2.0.3 was published.2. cargo-spellcheck 0.15.1 has no aarch64 build. It publishes x86_64-only assets, so
linux-armfell back to a source build that fails, andwindows-arminstalled an x86_64 binary that segfaulted at check time.Change
Static-analysis toolchain 1.95 -> 1.97.
RUST_LATESTselects the static-analysis and mutation-testing toolchain and is a separate knob fromRUST_MSRV, which encodes the MSRV promise; the two had drifted to the same value.RUST_MSRVstays at 1.95, so the MSRV promise is unchanged. Current stable is 1.97.1.97 no longer reports
single_use_lifetimesongroup_all_metrics_by_category, leaving its#[expect]unfulfilled -- a warning, and an error under the-D warningspolicy.clippy.allow_attributesrules out swapping it for#[allow], so the dead attribute is removed.cargo-spellcheck 0.15.1 -> 0.15.7, which publishes native assets for both aarch64 targets:
Windows also moves from the
-gnubuild to-msvc. The 0.15.7 em-dash tokenisation regression noted inversions.justis already neutralised by thetokenization_splitcharsoverride inspellcheck.toml.Validation
Run from the repository root on Windows x86_64:
cargo semver-checks --package cargo-aprz-lib --baseline-rev origin/main--223 checks: 223 pass, exit 0. Exits 101 before this change.cargo clippy --workspace --all-targets --all-features-- cleancargo fmt --all --check-- cleancargo anvil-- 87 items, all unchanged; no artifact churnjust anvil-spellcheckwith 0.15.7 installed -- exit 0 against this tree, confirming the em-dash override holdsCI on the previous push confirmed the spellcheck half on the runners that matter: both aarch64 legs resolved a native binary in ~2.4s (
aarch64-unknown-linux-gnuandaarch64-pc-windows-msvc) andanvil-spellcheckpassed on both.anvil-spellcheckprecedesanvil-semver-checkinpr-fast, so reaching the semver failure is itself proof the spellcheck ran clean.Reviewer notes
Pinning
kstringwas considered and rejected: it enters transitively, so constraining it would mean declaring an otherwise-unused direct dependency, whichanvil-udepswould then flag. Upgradingcargo-semver-checksto 0.50.0 was also tested and does not help -- the scratch-project build is unchanged.Installing clang on the ARM runners was considered for the spellcheck half and does not work. It was tried on
martin-kolinek/anvil-issue-publishing(6e22459) and reverted 13 minutes later (679a39a): withlibclang-18-devinstalled,linux-armgot pastclang-sysand then failed compilingra_ap_stdxwitherror[E0804], and onwindows-armbinstall succeeds so the source-build path -- and its libclang gate -- is never reached at all.Supersedes
This makes #86 (skip spellcheck on aarch64) unnecessary: the check now runs on aarch64 rather than being skipped there.