ci: Windows 的 pnpm install 加 corepack 退路(standalone 在低完整性沙箱里栈溢出)
构建客户端 / 检查(类型 + 单元测试) (push) Successful in 1m10s
构建客户端 / macOS 通用(.app + .dmg) (push) Skipped
构建客户端 / Windows x64(NSIS 安装包) (push) Failing after 40s
构建客户端 / Linux x64(deb + AppImage) (push) Canceled after 1m37s

This commit is contained in:
2026-10-15 23:24:13 +08:00
parent de7263569c
commit 26731958ea
+17 -6
View File
@@ -446,12 +446,23 @@ jobs:
- name: 前端依赖(严格按 lock 装) - name: 前端依赖(严格按 lock 装)
working-directory: desktop working-directory: desktop
shell: pwsh shell: pwsh
# 这台 runner 上 pnpm 自己算出来的 store 路径很怪(<dest>\node_modules\.bin\ # 这台 runner 的 job 跑在低完整性沙箱里(见文件头第 5 条),standalone 的
# store\v11),而且 --store-dir 的 env 写法它不认;这里直接给 CLI 参数: # pnpm 到"把包装进 virtual store"那一步会直接栈溢出:
# 显式短路径的 store + copy 导入(不用硬链接),并把输出改成适合日志的形式。 # thread '<unknown>' (6716) has overflowed its stack
# (shell 写死 pwsh:一是这台 runner 上 Windows 步骤本来就该用 pwsh, # (store 已经在可写目录、也改成 copy 导入了,仍然复现;同样的命令在普通
# 二是 actionlint 看到反斜杠路径会拿 shellcheck 的 bash 规则去挑刺。) # Medium 会话里跑得好好的。)所以先试 standalone,崩了就退回 corepack:
run: pnpm install --frozen-lockfile --store-dir C:\Users\admin\runner\windows\cache\ps --package-import-method=copy --reporter=append-only # 让 node 去跑 pnpm 的 JS 实现,绕开那个二进制。
run: |
$pnpmArgs = @('install', '--frozen-lockfile',
'--store-dir', 'C:\Users\admin\runner\windows\cache\ps',
'--package-import-method=copy', '--reporter=append-only')
pnpm @pnpmArgs
if ($LASTEXITCODE -eq 0) { exit 0 }
"::warning::standalone pnpm 失败(exit $LASTEXITCODE),改用 corepack + node 跑 pnpm"
corepack enable
corepack prepare pnpm@12.8.1 --activate
pnpm @pnpmArgs
exit $LASTEXITCODE
# nsis 是纯安装包,不需要 WiX;tauri 会自己把 NSIS 下到用户缓存里(这个缓存 # nsis 是纯安装包,不需要 WiX;tauri 会自己把 NSIS 下到用户缓存里(这个缓存
# 也跟着 LOCALAPPDATA 走,见上面 job env),所以这台 runner 要能访问 GitHub # 也跟着 LOCALAPPDATA 走,见上面 job env),所以这台 runner 要能访问 GitHub