ci: Windows 改用 npm 装的 JS 版 pnpm(standalone 二进制在低完整性沙箱里必崩)
构建客户端 / 检查(类型 + 单元测试) (push) Successful in 1m9s
构建客户端 / macOS 通用(.app + .dmg) (push) Skipped
构建客户端 / Windows x64(NSIS 安装包) (push) Failing after 22s
构建客户端 / Linux x64(deb + AppImage) (push) Canceled after 1m14s

This commit is contained in:
2026-10-15 23:27:06 +08:00
parent 26731958ea
commit e6070f91ee
+14 -11
View File
@@ -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 '<unknown>' (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