Skip to content

ci: build the arm64 targets on stable - #82

Open
LeonarddeR wants to merge 2 commits into
masterfrom
arm64xToStable
Open

ci: build the arm64 targets on stable#82
LeonarddeR wants to merge 2 commits into
masterfrom
arm64xToStable

Conversation

@LeonarddeR

@LeonarddeR LeonarddeR commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Moves the arm64, arm64ec and arm64x CI jobs off beta and onto stable, and declares the corresponding MSRV.

The reason those jobs were pinned to beta is the arm64ec TLS-destructors→FLS fix (rust-lang/rust#148799): without it, an ARM64X image aborts with 0xc0000096 when its EC view is loaded (rust-lang/rust#145154). That fix rides the train into Rust 1.98.0.

Changes:

  • Every CI job installs stable. With the pin gone the per-entry toolchain matrix key was uniform, so it is dropped in favour of a plain toolchain: stable on the dtolnay/rust-toolchain step in both build and test.
  • Cargo.toml declares rust-version = "1.98". The requirement originates with arm64ec, but the floor is enforced for every target so there is a single supported-toolchain answer, and a too-old toolchain fails as a clear requires rustc 1.98 resolver error rather than a crash at DLL load.
  • Docs updated to match: the hard requirement in CLAUDE.md is restated as "at least 1.98.0" instead of "at least beta", the MSRV is noted in CLAUDE.md + readme.md, the cargo +beta overrides drop out of the manual ARM64X validation recipe, and there's a CHANGELOG.md entry.

⚠️ Expected to be red until 1.98.0 is released

Stable is currently 1.97.1 (2026-07-14), which predates the fix. 1.98.0 is due ~2026-08-20. Please hold this PR until then, re-run CI, and it should go green with no further changes.

Note that with the MSRV declared, every job now fails the resolver check, not just the arm64ec one. That is the intended trade-off — one obvious error message everywhere beats one cryptic crash in a single job.

Verified: this is not a leftover from the tokio era

Before the MSRV commit, CI ran the toolchain change alone on stable 1.97.1 (run 30385266526). Test (arm64x-on-arm64ec) failed exactly as predicted:

Summary [2.456s] 55 tests run: 34 passed, 21 failed, 0 skipped
ABORT rd_pipe::dll_smoke dll_loads_and_exports_present - with code 0xc0000096
ABORT rd_pipe::dvc_emulation channel_to_pipe_round_trip - with code 0xc0000096
... (21 total, all 0xc0000096)

This is worth recording because the v0.9.0 tokio drop (2026-07-24) landed after the last beta verification (2026-07-17), so it was an open question whether a pre-fix toolchain still broke a tokio-free tree. It does. The 34 passing tests are the in-crate unit tests that never load the merged DLL; all 21 aborts are dll_smoke + dvc_emulation, i.e. every test that LoadLibrarys it — the crash is at load, before any crate code runs. Test (arm64ec) (plain, unmerged DLL) passes on the same toolchain, and there is no thread_local! in first-party code at all. The TLS-with-destructors that #148799 moves to FLS is std's own; tokio was a heavy user of thread-locals but never what put that machinery in the image.

Also confirmed: arm64ec-pc-windows-msvc ships a prebuilt rust-std on stable, the crate uses no #![feature(...)] gates, and actionlint is clean on the edited workflow.

🤖 Generated with Claude Code

The arm64ec TLS-destructors->FLS fix (rust-lang/rust#148799) that forced
the arm64, arm64ec and arm64x jobs onto beta has reached stable in Rust
1.98.0, so every CI target can share one toolchain again. With the pin
gone the per-entry `toolchain` matrix key is uniform, so it is dropped in
favour of a plain `toolchain: stable` on the install step.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 28, 2026 17:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Updates CI and supporting docs to move ARM64-related jobs (arm64, arm64ec, arm64x) from beta to stable, aligning the workflow with the Rust 1.98.0 TLS-destructors→FLS fix rollout.

Changes:

  • Switches CI Rust installation to a single toolchain: stable across the build and test jobs (removing the per-matrix toolchain key).
  • Updates ARM64X toolchain documentation in CLAUDE.md to reflect a >= 1.98.0 requirement.
  • Adds a changelog entry describing the CI toolchain change.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
.github/workflows/ci.yml Removes per-target toolchain selection and installs stable uniformly for build/test.
CLAUDE.md Updates documented toolchain requirement and removes +beta from the manual ARM64X recipe.
CHANGELOG.md Notes the CI move from beta to stable under Unreleased.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread CLAUDE.md
Comment thread CHANGELOG.md
The arm64ec TLS-destructors->FLS fix (rust-lang/rust#148799) that this
crate needs first ships in Rust 1.98.0. Declaring it as `rust-version`
turns a too-old toolchain into a clear "requires rustc 1.98" resolver
error instead of an 0xc0000096 abort when the ARM64X EC view is loaded.

The floor is enforced for every target, not just arm64ec, so there is one
supported-toolchain answer for the whole crate.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

2 participants