From 3fda1db9c06bdb3d7b22533acec43b739a112673 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 13 Sep 2026 18:29:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(packaging):=20package-windows.sh=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20NSI=20=E8=A6=86=E7=9B=96=20+=20payload=20?= =?UTF-8?q?=E9=A2=84=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一步失败:`File "..\..\build\linux-payload\*.*" -> no files found`。 原因:NSIS 的 `File` 路径**相对 .nsi 所在目录**解析,而我用了主仓的 installer.nsi (它去找主仓的 build/linux-payload),payload 却 stage 在 tag 的 worktree 里。 改法:`NSI` 可覆盖 —— 在 tag 的 worktree 里构建时用**该 tag 里的** installer.nsi (与产物同源,也正是可复现发布该有的样子);另加 payload 空载荷预检(空载荷=装不上, 必须直接失败而不是打出一个没内容的安装器)。 --- deploy/packaging/package-windows.sh | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/deploy/packaging/package-windows.sh b/deploy/packaging/package-windows.sh index c0ab491..5227a13 100644 --- a/deploy/packaging/package-windows.sh +++ b/deploy/packaging/package-windows.sh @@ -22,6 +22,15 @@ PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" BUILD_DIR="${BUILD_DIR:-$PROJECT_ROOT/build}" DIST_LINUX="${DIST_LINUX:-$PROJECT_ROOT/dist/linux}" DIST_RELEASE="${DIST_RELEASE:-$PROJECT_ROOT/dist/release}" +# ❗NSIS 的 `File` 路径是**相对 .nsi 所在目录**解析的:在 tag 的 worktree 里构建时, +# 必须用**该 tag 里的** installer.nsi,否则它会去主仓的 build/linux-payload 找载荷 +# (实测报 `File: "..\..\build\linux-payload\*.*" -> no files found`)。 +# 用 tag 里的 .nsi 也正是"发布件与当时的脚本同源"的正确做法。 +NSI="${NSI:-$PROJECT_ROOT/deploy/packaging/installer.nsi}" +if [ ! -f "$NSI" ]; then + echo "[FAIL] 找不到 NSIS 脚本: $NSI" >&2 + exit 1 +fi VARIANT="${1:-server}" ARCH="${2:-amd64}" @@ -67,9 +76,12 @@ mkdir -p "$BUILD_DIR/linux-payload" cp "$DEB" "$BUILD_DIR/linux-payload/" echo "[STAGE] payload ← $(basename "$DEB")($(du -h "$DEB" | cut -f1))" -echo "[BUILD] makensis -DVARIANT=$VARIANT -DPRODUCT_VERSION=$VERSION" -makensis -V2 -DVARIANT="$VARIANT" -DPRODUCT_VERSION="$VERSION" \ - "$PROJECT_ROOT/deploy/packaging/installer.nsi" +if [ -z "$(ls -1 "$BUILD_DIR/linux-payload" 2>/dev/null | head -1 || true)" ]; then + echo "[FAIL] payload 为空:$BUILD_DIR/linux-payload" >&2 + exit 1 +fi +echo "[BUILD] makensis -DVARIANT=$VARIANT -DPRODUCT_VERSION=$VERSION(nsi: $NSI)" +makensis -V2 -DVARIANT="$VARIANT" -DPRODUCT_VERSION="$VERSION" "$NSI" OUT="$BUILD_DIR/HomeAgent_v${VERSION}_${SUFFIX}_win64.exe" if [ ! -f "$OUT" ]; then