From d0e6dc1b79136ac445671e765f7e821c11bb370b Mon Sep 17 00:00:00 2001 From: xiyidaiwa Date: Tue, 18 Aug 2026 09:09:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(build):=20=E6=9B=B4=E6=96=B0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC=E4=BB=A5=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=BA=94=E7=94=A8=E5=86=85=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 electron-builder.yml 添加 extraMetadata.version 临时配置 - 实现打包完成后自动恢复 electron-builder.yml 文件 - 添加 trap 机制确保异常退出时也能正确恢复配置 - 清理旧的 electron-builder 产物避免内容污染 - 完善脚本注释说明版本同步机制和使用注意事项 --- scripts/test-build.sh | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/scripts/test-build.sh b/scripts/test-build.sh index 8346bafe..2730ad1d 100755 --- a/scripts/test-build.sh +++ b/scripts/test-build.sh @@ -11,7 +11,12 @@ # 再运行一次 -> 5.2.1.2-test # # 注意: -# - 此脚本仅用于本地测试,不会修改 package.json(electron-builder 的 dir 产物版本)。 +# - 此脚本仅用于本地测试,不会修改 package.json(其 version 为 semver 格式, +# 而 deb 测试版本如 5.3.0.8-test 会被 electron-builder 拒绝)。 +# - 为保证打包后「关于」页面显示版本与 deb 版本一致,脚本会临时向 +# electron-builder.yml 追加 extraMetadata.version(electron-builder 会将其写入 +# app.asar 内的 package.json,Electron 的 app.getVersion() 即从中读取), +# 打包完成后自动恢复,异常退出时由 trap 兜底恢复。 # - 每次运行都会改写 debian/changelog,属于未跟踪的工作区改动,按需自行还原。 # - 如需恢复正式版本,将 debian/changelog 顶部版本改回即可。 @@ -71,7 +76,33 @@ sed -i -E "1s/\\(${old_ver_esc}\\)/(${new_ver})/" "$CHANGELOG" # Electron 二进制下载镜像(本机到 GitHub 不通,使用 npmmirror 镜像) export ELECTRON_MIRROR="${ELECTRON_MIRROR:-https://registry.npmmirror.com/-/binary/electron/}" +# 同步应用内版本号:临时向 electron-builder.yml 追加 extraMetadata.version。 +# electron-builder 会把它合并进 app.asar 内的 package.json, +# 「关于」页面经 IPC 调用的 app.getVersion() 即读取该值。 +EB_YML="electron-builder.yml" +EB_YML_BAK="${EB_YML}.bak-test-build" + +# 清理上次异常中断可能残留的 extraMetadata 块(追加内容始终位于文件末尾) +if grep -q "^extraMetadata:" "$EB_YML"; then + echo "清理 $EB_YML 中残留的 extraMetadata 块" + sed -i '/^extraMetadata:/,$d' "$EB_YML" +fi +cp "$EB_YML" "$EB_YML_BAK" +restore_eb_yml() { + mv -f "$EB_YML_BAK" "$EB_YML" 2>/dev/null || true +} +trap restore_eb_yml EXIT +printf 'extraMetadata:\n version: "%s"\n' "$new_ver" >> "$EB_YML" + +# 清理旧的 electron-builder 产物,避免 release/ 下多个版本目录被 make install +# 的 release/*/linux*-unpacked/* 通配一并拷入 deb,造成内容污染 +rm -rf release/ + echo "开始测试打包(版本 ${new_ver})..." dpkg-buildpackage -us -uc -b +# 打包成功,立即恢复 electron-builder.yml 并解除 trap +restore_eb_yml +trap - EXIT + echo "完成。产物: ../spark-store_${new_ver}_amd64.deb"