@@ -27,19 +27,46 @@ jobs:
2727
2828 - uses : Swatinem/rust-cache@v2
2929
30- - uses : taiki-e/install-action@just
31-
3230 # WHY: `just ci` runs `cargo deny check`, `typos`, and
3331 # `cargo nextest run`. All three are external binaries — none ship
3432 # with the Rust toolchain. Using taiki-e/install-action fetches
3533 # prebuilt binaries (seconds) rather than `cargo install` (minutes),
3634 # which matters on the 3-OS matrix. Nextest swap landed in commit
37- # adopting `cargo nextest run` workspace-wide (closes #121) — the
38- # SQLite lock-order inversion that `cargo test` reproduces ~20% is
39- # documented in CLAUDE.md + GH #131.
40- - uses : taiki-e/install-action@cargo-deny
41- - uses : taiki-e/install-action@typos
42- - uses : taiki-e/install-action@cargo-nextest
35+ # adopting `cargo nextest run` workspace-wide (closes #121).
36+ #
37+ # WHY split Windows from Linux/macOS: taiki-e/install-action's
38+ # PowerShell wrapper aborts on windows-latest when the runner image
39+ # leaks BASH_FUNC_* env vars (Shellshock mitigation correctly
40+ # rejects them; their 10-iter retry doesn't catch it; manual reruns
41+ # don't help — see issue #137 for full analysis + reproduction).
42+ # cargo-binstall fetches the same prebuilt release binaries without
43+ # going through bash, sidestepping the env leak entirely.
44+ - name : Install just (Linux/macOS)
45+ if : runner.os != 'Windows'
46+ uses : taiki-e/install-action@just
47+ - name : Install cargo-deny (Linux/macOS)
48+ if : runner.os != 'Windows'
49+ uses : taiki-e/install-action@cargo-deny
50+ - name : Install typos (Linux/macOS)
51+ if : runner.os != 'Windows'
52+ uses : taiki-e/install-action@typos
53+ - name : Install cargo-nextest (Linux/macOS)
54+ if : runner.os != 'Windows'
55+ uses : taiki-e/install-action@cargo-nextest
56+
57+ # WHY cargo-binstall on Windows only — workaround for #137. binstall
58+ # is a prebuilt-binary fetcher; doesn't invoke bash so the windows-
59+ # latest BASH_FUNC_* leak doesn't apply. Self-install is one zip
60+ # extract; per-tool install is ~5s. If the runner image fix lands
61+ # upstream, revert this step + drop the `if: runner.os != 'Windows'`
62+ # gates above and verify 5+ consecutive Windows runs stay green.
63+ - name : Install just/cargo-deny/typos/cargo-nextest (Windows via cargo-binstall — workaround # 137)
64+ if : runner.os == 'Windows'
65+ shell : pwsh
66+ run : |
67+ Invoke-WebRequest -Uri "https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-pc-windows-msvc.zip" -OutFile binstall.zip
68+ Expand-Archive binstall.zip -DestinationPath "$env:USERPROFILE\.cargo\bin" -Force
69+ cargo binstall --no-confirm --locked just cargo-deny typos-cli cargo-nextest
4370
4471 - uses : actions/setup-node@v4
4572 with :
0 commit comments