Pin the rust-test macOS lane to Rust 1.97.1 with a self-expiring canary - #640
Pin the rust-test macOS lane to Rust 1.97.1 with a self-expiring canary#640ciaranra wants to merge 3 commits into
Conversation
|
Live proof complete: the workflow_dispatch matrix run on this branch is fully green — rust-test (macos-latest) passes with the 1.97.1 pin (https://github.com/PECOS-packages/PECOS/actions/runs/33347969025), where the two unpinned runs cited in the description segfaulted in dependency build scripts. ubuntu and windows lanes unaffected and green. |
|
The pin itself is well justified and the conditional is the right shape. One must-fix in the canary. The canary cannot observe the crash it is probing forThe probe builds a bare project:
The failure this pin exists for is, in the PR's own words, The consequence is the opposite of the stated intent. The step will record 0 crashes out of 5 on its very first run and emit:
while the pin is still genuinely required. A canary meant to stop the pin going stale silently instead argues for removing it from day one, and it will keep doing so no matter how broken stable is. The five repetitions and the Worth noting because the "nondeterministic, so probe repeatedly" reasoning in the comment is sound, and it is what makes the empty probe look convincing rather than obviously wrong. FixThe probe needs to compile the crates whose build scripts crash. Either give the temporary project those dependencies: [dependencies]
libc = "0.2"
proc-macro2 = "1"
quote = "1"or point the probe at the real workspace with the pinned toolchain overridden, for example Whichever is chosen, the check worth doing before merge is the one I could not do from here: confirm on a macOS runner that the probe does report crashes against 1.98 stable. A canary that has never been seen to trip is indistinguishable from one that cannot. The rest reads correctly
|
Summary
The
rust-testmacOS matrix lane fails on current stable: rustc 1.98.0 onaarch64-apple-darwinsegfaults compiling ordinary dependency build scripts (libc,proc-macro2,quote) before any workspace crate builds. This is the same 1.98 aarch64-darwin crash that already pinned thepython-compat-smokemacOS lane (issue #566); therust-testlane was never pinned because its macOS job only runs on dispatch and pre-merge matrix runs.Reproductions (identical signature, two dispatch runs on one branch plus
devitself):devmatrix runs on 2026-08-30 failed the same job the same way.Change
macos-latestand stable elsewhere (expression-level conditional; a matrixincludewould add a phantom macOS job on pull requests, where the matrix is ubuntu-only).cargo checkruns — this lane's actual crashing invocation, unlike the smoke lane's maturin-link-args probe — and emits a workflow warning when the pin looks obsolete, mirroring the smoke-lane pattern and its unpin discipline (issue Unpin macOS python-compat-smoke Rust toolchain once the rustc 1.98 aarch64-darwin segfault is fixed #566).The canary block intentionally duplicates the smoke lane's shape rather than extracting a shared script: the two probes differ in the invocation under test, and this keeps the change to one workflow.
Verification
workflow_dispatchmatrix run on this branch is the live proof: the macOS job should install 1.97.1 and pass where the two runs above segfaulted. Run: https://github.com/PECOS-packages/PECOS/actions/runs/33347969025Unpin path is unchanged and tracked in #566: remove the pin only after the canary warning persists across several PRs and an unpinned build passes on a draft PR.