From 7a5bae349bdb0f2a2f4381d3b3dc4ba4e60be397 Mon Sep 17 00:00:00 2001 From: jan-kubica Date: Fri, 15 May 2026 10:50:48 +0200 Subject: [PATCH] fix(rust-napi-ci): ensure cargo bin is on PATH after rust-toolchain dtolnay/rust-toolchain only prepends $CARGO_HOME/bin to PATH when it installs rustup itself. On GitHub macOS runners with pre-installed rustup but no active toolchain, the action installs the toolchain but PATH still resolves `cargo` to a `rustup-init` symlink. Calls like `cargo metadata` (from @napi-rs/cli) then fail with: Internal Error: cargo metadata exited with code 1 error: error: unexpected argument 'metadata' found Usage: rustup-init[EXE] [OPTIONS] Adding `$HOME/.cargo/bin` to $GITHUB_PATH after every rust-toolchain invocation makes the just-installed toolchain win on PATH. --- .github/workflows/rust-napi-ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/rust-napi-ci.yml b/.github/workflows/rust-napi-ci.yml index e28bbdf..cecdcac 100644 --- a/.github/workflows/rust-napi-ci.yml +++ b/.github/workflows/rust-napi-ci.yml @@ -115,6 +115,12 @@ jobs: - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with: targets: wasm32-wasip1-threads + - name: Ensure cargo on PATH + # dtolnay/rust-toolchain only prepends $CARGO_HOME/bin to PATH when it + # installs rustup itself. On runners with pre-installed rustup but no + # active toolchain, `cargo` resolves to a `rustup-init` symlink and + # fails with `unexpected argument 'metadata'`. + run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 - run: ${{ inputs.install-command }} - run: bun run build @@ -137,6 +143,10 @@ jobs: - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with: components: clippy, rustfmt + - name: Ensure cargo on PATH + # See note in `runtime-compat`: workaround for dtolnay/rust-toolchain + # not adding $CARGO_HOME/bin to PATH when rustup is pre-installed. + run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 with: shared-key: rust-checks @@ -207,6 +217,11 @@ jobs: uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 with: targets: ${{ matrix.settings.target }} + - if: inputs.build-changed == 'true' + name: Ensure cargo on PATH + # See note in `runtime-compat`: workaround for dtolnay/rust-toolchain + # not adding $CARGO_HOME/bin to PATH when rustup is pre-installed. + run: echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - if: inputs.build-changed == 'true' uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 with: