Description
The macos-15-arm64/20260511.0048 image ships a Homebrew rustup at /opt/homebrew/bin/rustup (1.29.0) whose bundled rustup-init binary rejects standard argv that the rustup CLI passes to it internally. Workflows that depend on rustup component add, cargo metadata, or any command that triggers rustup's internal download path fail with Error: error: unexpected argument '<word>' found followed by Usage: rustup-init[EXE] [OPTIONS].
The same workflow file on the older macos-15-arm64/20260427.0018 image passes cleanly — confirmed across 5 independent runs.
Repro
Any workflow on macos-latest that triggers an internal rustup-init invocation. Two reproducible paths:
Path A — PyO3/maturin-action@v1: calls rustup component add llvm-tools-preview during target setup. On 20260511.0048 this fails immediately:
[command]/opt/homebrew/bin/rustup component add llvm-tools-preview
info: downloading component llvm-tools
Error: error: error: unexpected argument '+stable' found
Usage: rustup-init[EXE] [OPTIONS]
Path B — @napi-rs/cli: shells out to cargo metadata to read Cargo.toml. On 20260511.0048 this fails with:
Could not parse the Cargo.toml: Error: Command failed: cargo metadata --format-version 1 --manifest-path "..."
error: error: unexpected argument 'metadata' found
The rustup-init binary appears to be interpreting argv that the outer rustup (or cargo shim) is forwarding, and not recognizing standard subcommands or +toolchain syntax.
Evidence
Five data points across one repo (same workflow file, identical commit), all consistent:
| Date (UTC) |
Run |
Image SHA |
Result |
| 2026-05-14 03:29 |
jotarios/chasquimq PR #128 first push |
20260511.0048 |
py-ci x86_64-apple-darwin → +stable failure |
| 2026-05-14 04:05 |
jotarios/chasquimq PR #128 rerun |
20260427.0018 |
all macOS jobs pass |
| 2026-05-14 04:53 |
jotarios/chasquimq main commit e67aef0 |
20260511.0048 |
py-ci aarch64-apple-darwin (+stable) + node-ci x86_64-apple-darwin (metadata) both fail |
| 2026-05-14 05:03 |
rerun #1, py-ci aarch64-apple-darwin |
20260511.0048 |
fail (+stable) again |
| 2026-05-14 05:06 |
rerun #2, py-ci aarch64-apple-darwin |
20260427.0018 |
pass |
3 failures on 20260511.0048. 2 passes on 20260427.0018. Zero counter-examples.
Both +stable (maturin-action path) and metadata (napi-rs path) symptoms only appear on 20260511.0048.
Public job URLs
Symptom in job logs
##[group]Install Rust target
Installing Rust toolchain stable
[command]/opt/homebrew/bin/rustup update --no-self-update stable
info: syncing channel updates for stable-aarch64-apple-darwin
stable-aarch64-apple-darwin unchanged - rustc 1.95.0 (59807616e 2026-04-14)
info: self-update is disabled for this build of rustup
info: any updates to rustup will need to be fetched with your system package manager
[command]/opt/homebrew/bin/rustup override set stable
info: override toolchain for /Users/runner/work/chasquimq/chasquimq set to stable-aarch64-apple-darwin
[command]/opt/homebrew/bin/rustup component add llvm-tools-preview
info: downloading component llvm-tools
Error: error: error: unexpected argument '+stable' found
The info: self-update is disabled for this build of rustup line is consistent with all Homebrew-installed rustup binaries — so the issue is specifically in the rustup-init bundled with the Homebrew rustup formula on this image release.
Related
#13985 (dup of #13965) tracks a different Homebrew regression on the same image release window (brew update && brew update lock-file race on 20260427.0018+). The rustup-init issue is plausibly the same upstream Homebrew breakage, different downstream symptom.
Impact
Any workflow on macos-latest (or explicit macos-15-arm64) that uses PyO3/maturin-action, @napi-rs/cli, or any path that internally triggers rustup component add / cargo metadata will fail with ~50% probability per job, depending on which runner image the scheduler assigns. Reruns can clear it but are not reliable for release-publish workflows where multiple macOS wheels must succeed simultaneously.
Tested workarounds (none recommended for in-PR fixes)
On jotarios/chasquimq PR #128 we tried four in-PR workarounds — none resolved it cleanly:
brew uninstall rustup-init rustup + reinstall from https://sh.rustup.rs upstream installer
- Same plus
rm -rf ~/.rustup ~/.cargo to clear leftover state
- Same plus
sudo ln -sf ~/.cargo/bin/rustup /opt/homebrew/bin/rustup so absolute-path callers find the upstream binary
Each iteration shifted the failure mode in confusing ways because some matrix entries hit 20260511.0048 while others hit 20260427.0018 — patterns that looked like one workaround "made things worse" were actually image-lottery noise. Eventually reverted everything and reran until both jobs landed on the older image.
Suggested next steps
- Confirm whether the Homebrew rustup formula installed in
20260511.0048 differs from 20260427.0018 (formula version or built-from-source binary).
- If it's the same formula version, this may be an interaction with another image change (e.g., Homebrew cellar state, PATH ordering) that affects how
rustup-init parses argv.
- A targeted rollback of just the Homebrew rustup formula to whatever shipped in
20260427.0018 should be a safe and minimal fix.
Description
The
macos-15-arm64/20260511.0048image ships a Homebrew rustup at/opt/homebrew/bin/rustup(1.29.0) whose bundledrustup-initbinary rejects standard argv that the rustup CLI passes to it internally. Workflows that depend onrustup component add,cargo metadata, or any command that triggers rustup's internal download path fail withError: error: unexpected argument '<word>' foundfollowed byUsage: rustup-init[EXE] [OPTIONS].The same workflow file on the older
macos-15-arm64/20260427.0018image passes cleanly — confirmed across 5 independent runs.Repro
Any workflow on
macos-latestthat triggers an internal rustup-init invocation. Two reproducible paths:Path A —
PyO3/maturin-action@v1: callsrustup component add llvm-tools-previewduring target setup. On20260511.0048this fails immediately:Path B —
@napi-rs/cli: shells out tocargo metadatato readCargo.toml. On20260511.0048this fails with:The
rustup-initbinary appears to be interpreting argv that the outerrustup(orcargoshim) is forwarding, and not recognizing standard subcommands or+toolchainsyntax.Evidence
Five data points across one repo (same workflow file, identical commit), all consistent:
20260511.0048+stablefailure20260427.001820260511.0048+stable) + node-ci x86_64-apple-darwin (metadata) both fail20260511.0048+stable) again20260427.00183 failures on
20260511.0048. 2 passes on20260427.0018. Zero counter-examples.Both
+stable(maturin-action path) andmetadata(napi-rs path) symptoms only appear on20260511.0048.Public job URLs
20260511.0048: https://github.com/jotarios/chasquimq/actions/runs/25842458882/job/7593129155020260511.0048: https://github.com/jotarios/chasquimq/actions/runs/25842458851/job/7593043424120260427.0018: https://github.com/jotarios/chasquimq/actions/runs/25842458882/job/7593153806120260427.0018: https://github.com/jotarios/chasquimq/actions/runs/25842458851/job/75931293285Symptom in job logs
The
info: self-update is disabled for this build of rustupline is consistent with all Homebrew-installed rustup binaries — so the issue is specifically in therustup-initbundled with the Homebrew rustup formula on this image release.Related
#13985 (dup of #13965) tracks a different Homebrew regression on the same image release window (
brew update && brew updatelock-file race on20260427.0018+). The rustup-init issue is plausibly the same upstream Homebrew breakage, different downstream symptom.Impact
Any workflow on
macos-latest(or explicitmacos-15-arm64) that usesPyO3/maturin-action,@napi-rs/cli, or any path that internally triggersrustup component add/cargo metadatawill fail with ~50% probability per job, depending on which runner image the scheduler assigns. Reruns can clear it but are not reliable for release-publish workflows where multiple macOS wheels must succeed simultaneously.Tested workarounds (none recommended for in-PR fixes)
On jotarios/chasquimq PR #128 we tried four in-PR workarounds — none resolved it cleanly:
brew uninstall rustup-init rustup+ reinstall fromhttps://sh.rustup.rsupstream installerrm -rf ~/.rustup ~/.cargoto clear leftover statesudo ln -sf ~/.cargo/bin/rustup /opt/homebrew/bin/rustupso absolute-path callers find the upstream binaryEach iteration shifted the failure mode in confusing ways because some matrix entries hit
20260511.0048while others hit20260427.0018— patterns that looked like one workaround "made things worse" were actually image-lottery noise. Eventually reverted everything and reran until both jobs landed on the older image.Suggested next steps
20260511.0048differs from20260427.0018(formula version or built-from-source binary).rustup-initparses argv.20260427.0018should be a safe and minimal fix.