Skip to content

build: unbreak CI by bumping the static-analysis toolchain and cargo-spellcheck - #88

Merged
martinhavelka (wukchung) merged 2 commits into
mainfrom
u/mhavelka/spellcheck-0157
Aug 20, 2026
Merged

build: unbreak CI by bumping the static-analysis toolchain and cargo-spellcheck#88
martinhavelka (wukchung) merged 2 commits into
mainfrom
u/mhavelka/spellcheck-0157

Conversation

@wukchung

@wukchung martinhavelka (wukchung) commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

🤖

Impact

Two independent CI breakages, both currently red on every pull request:

  • anvil-semver-check fails on all four pr-fast legs, and on the scheduled run against main.
  • anvil-spellcheck fails 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. kstring outran the pinned toolchain. cargo-semver-checks builds rustdoc for the crate under test in a scratch project (cargo new + cargo add --path) 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; the lock pins 2.0.2, so the workspace build is fine but the scratch build is not:

error: rustc 1.95.0 is not supported by the following package:
  kstring@2.0.4 requires rustc 1.96.0

This surfaced when cargo-aprz-lib arrived in #76 -- the first crate reaching kstring through rustsec -> gix -> gix-attributes -- and broke as soon as kstring 2.0.3 was published.

2. cargo-spellcheck 0.15.1 has no aarch64 build. It publishes x86_64-only assets, so linux-arm fell back to a source build that fails, and windows-arm installed an x86_64 binary that segfaulted at check time.

Change

Static-analysis toolchain 1.95 -> 1.97. RUST_LATEST selects the static-analysis and mutation-testing toolchain and is a separate knob from RUST_MSRV, which encodes the MSRV promise; the two had drifted to the same value. RUST_MSRV 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, leaving its #[expect] unfulfilled -- a warning, and an error under the -D warnings policy. clippy.allow_attributes rules 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:

cargo-spellcheck-v0.15.7-aarch64-unknown-linux-gnu
cargo-spellcheck-v0.15.7-aarch64-pc-windows-msvc.exe

Windows also moves from the -gnu build to -msvc. The 0.15.7 em-dash tokenisation regression noted in versions.just is already neutralised by the tokenization_splitchars override in spellcheck.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 -- clean
  • cargo fmt --all --check -- clean
  • cargo anvil -- 87 items, all unchanged; no artifact churn
  • just anvil-spellcheck with 0.15.7 installed -- exit 0 against this tree, confirming the em-dash override holds

CI 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-gnu and aarch64-pc-windows-msvc) and anvil-spellcheck passed on both. anvil-spellcheck precedes anvil-semver-check in pr-fast, so reaching the semver failure is itself proof the spellcheck ran clean.

Reviewer notes

Pinning kstring was considered and rejected: it enters transitively, so constraining it would mean declaring an otherwise-unused direct dependency, which anvil-udeps would then flag. Upgrading cargo-semver-checks to 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): with libclang-18-dev installed, linux-arm got past clang-sys and then failed compiling ra_ap_stdx with error[E0804], and on windows-arm binstall 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.

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-commenter

Codecov Comments Bot (codecov-commenter) commented Aug 20, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.9%. Comparing base (f690340) to head (520bf6d).

❌ 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           
Flag Coverage Δ
linux 99.9% <ø> (ø)
linux-arm 99.9% <ø> (ø)
scheduled ?
windows 99.9% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@wukchung
martinhavelka (wukchung) marked this pull request as ready for review August 20, 2026 11:40
Copilot AI lite review requested due to automatic review settings August 20, 2026 11:40
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.
@wukchung martinhavelka (wukchung) changed the title build(deps): bump cargo-spellcheck to 0.15.7 for native aarch64 binaries build: unbreak CI by bumping the static-analysis toolchain and cargo-spellcheck Aug 20, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_version to 0.15.7 in the anvil versions catalog and in the cargo-anvil template copy.
  • Update CARGO_SPELLCHECK_VERSION in constants.env to match the new pin.
  • Refresh cargo-anvil-generated snapshot outputs and the .anvil.lock catalog/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.

Copilot AI review requested due to automatic review settings August 20, 2026 11:52
@wukchung
martinhavelka (wukchung) enabled auto-merge (squash) August 20, 2026 12:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 9 changed files in this pull request and generated no new comments.

@wukchung
martinhavelka (wukchung) merged commit 826b8e5 into main Aug 20, 2026
45 checks passed
@wukchung
martinhavelka (wukchung) deleted the u/mhavelka/spellcheck-0157 branch August 20, 2026 16:00
martinhavelka (wukchung) added a commit that referenced this pull request Aug 24, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants