diff --git a/.github/workflows/build-client.yml b/.github/workflows/build-client.yml index 68bfe5a..3f454a2 100644 --- a/.github/workflows/build-client.yml +++ b/.github/workflows/build-client.yml @@ -427,22 +427,25 @@ jobs: with: targets: x86_64-pc-windows-msvc - - name: 装 pnpm - uses: pnpm/action-setup@v4 - with: - version: ${{ env.PNPM_VERSION }} - # 两个原因不用默认的 ~/setup-pnpm(中完整性写不进去),也不用固定的 - # cache 目录:pnpm 会把自己算出来的 store 建在这个 dest 里面,下一次运行 - # 自安装器清理旧目录时就炸了 —— - # ENOTEMPTY: directory not empty, rmdir '...\ci-pnpm\node_modules\.bin\store\v11\projects' - # 所以放到本次运行的 work 目录下(每次都是干净的)。 - dest: ${{ github.workspace }}\..\ci-pnpm - - name: 装 Node uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} + # 这里**不用** pnpm/action-setup:它装的是 standalone 的 pnpm 二进制,而那个 + # 二进制在这台 runner 的低完整性沙箱里走到"把包装进 virtual store"时必崩: + # thread '' (6716) has overflowed its stack + # corepack 拉下来的是同一个二进制(也崩),所以改成用 npm 装 JS 版 pnpm —— + # 它跑在 node 上,是另一条代码路径。装到 node 自己的目录里(RUNNER_TOOL_CACHE + # 已经指到可写位置,见 job env)。 + - name: 装 pnpm(npm 装 JS 版,绕开 standalone 二进制) + shell: pwsh + run: | + npm install -g pnpm@12.8.1 + if ($LASTEXITCODE -ne 0) { throw "npm 装 pnpm 失败(exit $LASTEXITCODE)" } + "pnpm = $((Get-Command pnpm).Source)" + pnpm --version + - name: 前端依赖(严格按 lock 装) working-directory: desktop shell: pwsh