fix(homeagent): 构建不许弄脏源码树 —— hmapdev 会重写 plugin.json,构建后还原并出声

实测:`hmapdev build` 会重写受版本管理的 `plugin.json`(只吃掉了文件末尾换行)。
"构建把树弄脏"这件事在 electron 那边刚定过规矩(脏树产物不得自称发布候选),
所以这里同样处理:构建前留快照,构建后若被改写就还原 + 打印一行说明
(不静默还原 —— 下一个人要知道这条工具会动源码)。

验证:`bash build.sh`(HOMEAGENT_SDK_DIR=…/sdk/v1.3.0)产出 build/plugin.bin(9018271 字节),
构建后 `git status plugins/homeagent-mail-bridge/` 只剩我自己改的 build.sh。
This commit is contained in:
2026-09-14 16:41:54 +08:00
parent ef82bcdfd3
commit 4f0a6e6097

View File

@ -79,7 +79,22 @@ export GOFLAGS="${GOFLAGS:-} -modfile=$TMP_MOD"
# 注意:这个插件**没有** `func main()`(入口由 hmapdev 生成/包装),
# 所以 `go build ./...` 会报 "function main is undeclared" —— 那是正常的,
# 不能用它来数 API 兼容性错误;真正的编译在 hmapdev 那一步。
# 这条工具会**重写 plugin.json/plg.json**(实测:只把文件末尾的换行吃掉了)。
# 构建不该把源码树弄脏 —— 在 electron 那边我们刚为同一形状定过规矩
# (脏树产物不得自称发布候选)。所以:先记哈希,构建后若被改就还原并出声。
MANIFESTS=(plugin.json plg.json)
SNAP_DIR="$(mktemp -d)"
for f in "${MANIFESTS[@]}"; do [[ -f "$f" ]] && cp "$f" "$SNAP_DIR/$f"; done
hmapdev build || die "hmapdev build 失败(编译错误见上;它才是真正的编译入口)"
for f in "${MANIFESTS[@]}"; do
[[ -f "$SNAP_DIR/$f" ]] || continue
if ! cmp -s "$SNAP_DIR/$f" "$f"; then
cp "$SNAP_DIR/$f" "$f"
echo "[build] 注意hmapdev 改写了 $f(已还原)—— 构建工具不该动受版本管理的源码;"
echo "[build] 否则每次构建都把树弄脏,而'脏树'在别的端已经是'不是发布候选'的判据了。"
fi
done
rm -rf "$SNAP_DIR"
# ── 3. 产物自报身份 ─────────────────────────────────────────────────
BIN="build/plugin.bin"