From 9beacfae70633afe03f44051faa72ab83360abc7 Mon Sep 17 00:00:00 2001
From: JianFeeeee <109188060+JianFeeeee@users.noreply.github.com>
Date: Fri, 4 Sep 2026 19:01:29 +0800
Subject: [PATCH] =?UTF-8?q?fix(build):=20GUI=20=E8=BE=93=E5=87=BA=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95=E7=94=A8=20--config.directories.output=EF=BC=8C-o=20?=
=?UTF-8?q?=E6=98=AF=20--mac=20=E7=9A=84=E5=88=AB=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
electron-builder 的 `-o` 是 `--mac`/`--macos` 的短别名(见 --help 的
Building 段),不是 output。于是 `-o "$BUILD_DIR"` 被当成 macOS 的 target
列表,报:
⨯ Unknown target: /home/program/trueagent/build
路径被 lowercase 后去匹配 target 名表,所以错误信息里的路径是全小写的
——这也是它看起来像「路径错」而实际是「参数位置错」的原因,v1.0.1 与
v1.0.3 两次发布都因此手工组装过 GUI。
改用 --config.directories.output=
,已实测确认产物落在指定目录。
同时把 GUI 构建失败降级为警告:homed/waiter/initconfig 是发布主体,
而 GUI 依赖 electron 运行时下载(离线机器、arm64 缺缓存都会失败)。
set -euo pipefail 下不接住的话,一个可选组件会让整轮跨平台构建全废——
v1.0.3 就是这样只产出了 linux/amd64 三个二进制、arm64 与 windows
压根没跑到。
---
deploy/packaging/build.sh | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/deploy/packaging/build.sh b/deploy/packaging/build.sh
index db38a10f..7002f504 100644
--- a/deploy/packaging/build.sh
+++ b/deploy/packaging/build.sh
@@ -204,6 +204,14 @@ stage_linux_payload() {
}
# ---- gui (Electron) ----
+#
+# 输出目录必须用 --config.directories.output,**不能用 -o**:
+# electron-builder 的 `-o` 是 `--mac`/`--macos` 的短别名(见 --help 的 Building 段),
+# 不是 output。此前 `-o "$BUILD_DIR"` 被当成 macOS 的 target 列表,报
+# ⨯ Unknown target: /home/program/trueagent/build
+# (路径被 lowercase 后去匹配 target 名表,所以错误信息里的路径是全小写的,
+# 这也是它看起来像「路径错」而实际是「参数位置错」的原因)。
+# v1.0.1 与 v1.0.3 两次发布都因此手工组装过 GUI。
build_gui() {
if [ -n "${GOOS:-}" ] && [ "$GOOS" != "$("$GO" env GOOS)" ]; then
echo "[SKIP] gui ${GOOS}/${GOARCH} — electron-builder handles cross-platform natively; run 'all' on CI host"
@@ -221,12 +229,21 @@ build_gui() {
# 不传 --config:electron-builder 默认从 package.json 的 "build" 键读配置。
# 传 --config package.json 会让它把**整个** package.json 当配置校验,
# 于是 devDependencies / build / scripts 全被判为 "unknown property" 而失败。
- (cd "$gui_dir" && npx electron-builder \
- --linux --win --mac \
- --x64 --arm64 \
- -p never \
- -o "$BUILD_DIR")
- echo " OK"
+ #
+ # GUI 失败不中断整体构建:homed/waiter/initconfig 是发布的主体,
+ # 而 GUI 依赖 electron 运行时下载(离线机器、arm64 缺缓存都会失败)。
+ # set -e 下若不接住,一个可选组件会让整轮跨平台构建全废。
+ if (cd "$gui_dir" && npx electron-builder \
+ --linux --win --mac \
+ --x64 --arm64 \
+ -p never \
+ --config.directories.output="$BUILD_DIR"); then
+ echo " OK"
+ else
+ echo " WARN: gui 构建失败(可选组件,不影响 homed/waiter/initconfig)"
+ echo " Linux 包可用 deploy/packaging/package-linux.sh 内置的手工组装路径"
+ return 0
+ fi
}
# ---- dispatch ----