From 1acc933dc80bfdf41adbf7b8f01595cb63052014 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Tue, 29 Sep 2026 14:02:18 +0800 Subject: [PATCH] =?UTF-8?q?ci(release):=20=E6=89=93=E5=8C=85=E5=89=8D?= =?UTF-8?q?=E8=A3=85=20Electron=EF=BC=8C=E5=90=A6=E5=88=99=20GUI=20?= =?UTF-8?q?=E8=A2=AB=E9=9D=99=E9=BB=98=E8=B7=B3=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题 打包脚本从两处找 Electron 运行时: 1) ~/.cache/electron 里的 electron-v-linux-.zip 2) cmd/gui/node_modules/electron/dist(目标架构 == host 时) 全新 GitHub runner **两处都没有** —— 脚本在都没有时只能跳过 GUI, 于是 client/full 包会**静默地不含界面**(正是脚本作者担心的「假包」)。 实测:本地移走缓存后 GUI 被跳过,包仍能产出。 ## 改法 打包前在 cmd/gui 执行 `npm ci`,让 electron 落到 node_modules。 runner 是 amd64 == 目标架构,脚本便走第 2 条路径。 **用 npm ci 而不是 `npm install electron@`**:后者是非确定性的 (range 会随上游漂移,也锁不住传递依赖),zizmor 也把它标为 adhoc-packages 风险。package-lock.json(lockfileVersion 3)已锁定 electron,ci 严格按 lock 安装 ⇒ 同一 commit 永远得到同一套依赖。 不能用 `npm install --production`:那会跳过 devDependencies, 而 electron 正是 devDependency(这正是脚本自己那条命令找不到它的原因)。 ## 验证 - 无声 cache + 有 node_modules/electron 时,脚本走 host-arch 回退并 成功构建 GUI(263M / x86-64)—— 已本地实测 - 两者都无时改为打印明确原因并跳过(配合上一个 commit 的 find 修复) - npm ci --dry-run 通过;actionlint 全绿 --- .github/workflows/release.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8cb76da..d7584b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -158,6 +158,32 @@ jobs: run: | echo "::warning title=go test 门已跳过::本次发版未跑 go test,产物可能建立在单元测试失败的代码上。" + # GUI 依赖 Electron 运行时。打包脚本从两处找它: + # 1) ~/.cache/electron 里的 electron-v-linux-.zip + # 2) cmd/gui/node_modules/electron/dist(同架构时) + # 全新 runner 两处都没有 —— 而脚本在都没有时**只能跳过 GUI**, + # 于是 client/full 包会静默地不含界面(这正是脚本作者担心的“假包”)。 + # 所以这里显式装一份:npm 会解析出 ^33.0.0 的实际版本并落到 + # node_modules,脚本便走第 2 条路径(runner 是 amd64 == 目标架构)。 + # + # ⚠️ 不能用 `npm install --production`(那会跳过 devDependencies, + # 而 electron 正是 devDependency)。 + - uses: actions/setup-node@v7 + with: + node-version: '22' + + - name: 安装 Electron(GUI 打包需要) + working-directory: cmd/gui + run: | + set -euo pipefail + # 用 npm ci 而非 `npm install electron@`:后者是非确定性的 + # (range 会随上游发布漂到新版本),且锁不住传递依赖。 + # package-lock.json 里已锁定 electron(lockfileVersion 3), + # ci 严格按 lock 安装,同一个 commit 永远得到同一套依赖。 + npm ci --no-audit --no-fund + test -f node_modules/electron/dist/electron + echo " 已就绪:$(node_modules/electron/dist/electron --version)" + - name: 下载构建资产(模型 + ONNX Runtime) run: | set -euo pipefail