diff --git a/.github/workflows/build-client.yml b/.github/workflows/build-client.yml index 7f0a06c..9816005 100644 --- a/.github/workflows/build-client.yml +++ b/.github/workflows/build-client.yml @@ -336,6 +336,28 @@ jobs: steps: - uses: actions/checkout@v4 + # 宿主模式的 Windows runner 上,PATH 里的 `bash` 是 C:\Windows\System32\bash.exe + # —— WSL 的启动器,而 WSL 在 runner 账户下起不来,报 E_ACCESSDENIED(日志里是 + # 一串 GBK 被当 UTF-8 解出来的乱码 + https://github.com/microsoft/WSL/issues)。 + # 于是任何 `shell: bash` 的步骤、以及用 bash 写的 composite action + # (dtolnay/rust-toolchain 就是),都会在 0 秒内失败。 + # Git for Windows 自带 bash,把它的 bin 前置到 PATH —— GITHUB_PATH 的语义就是 + # **前置**插入,所以它会盖过 System32 那个 —— 后面这些步骤才跑得起来。 + # 2026-10-15 第一次真跑 Windows job 时踩出来的(本地这样改完,dtolnay 要跑的 + # rustup toolchain install / target add / rustc / cargo 全部 exit 0)。 + - name: 让 bash 指向 Git for Windows(不是 WSL) + shell: pwsh + run: | + $gitBash = 'C:\Program Files\Git\bin' + if (-not $env:GITHUB_PATH) { + throw '这个 runner 没提供 GITHUB_PATH,没法给后续步骤改 PATH' + } + if (-not (Test-Path (Join-Path $gitBash 'bash.exe'))) { + throw "找不到 $gitBash\bash.exe:这台机器上没装 Git for Windows,bash 会落到 WSL 上" + } + Add-Content -Path $env:GITHUB_PATH -Value $gitBash -Encoding ascii + "后续步骤的 bash = $(Join-Path $gitBash 'bash.exe')" + - name: 装 Rust(stable) uses: dtolnay/rust-toolchain@stable with: