From 953fbb2f507513cf2e3ead7204597ae62ea46dca Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sun, 20 Sep 2026 09:02:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(scripts):=20=E6=89=B9=E9=87=8F=E6=89=93?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8C=85=EF=BC=88.hmap=EF=BC=89=E4=BE=9B=20r?= =?UTF-8?q?elease=20=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题 release 此前**只发 homed/waiter 二进制与 hmapdev 工具链,不发插件包**(主仓 20 个 release、本仓的 release 都核实过,0 个 .hmap)。用户要用任何一个插件,都得: 1. 装 Go 1.25 + 网络拉依赖 2. 装 hmapdev 工具链 3. 进 example/<插件>/ 逐个 `hmapdev build` 而 `hmapdev build` **不是可选项**:5 个 example(deepsearch / luademo / vanblog / vikunja / weather)连 `main.go` 都没有,直接 `go build` 会死在 「function main is undeclared in the main package」——入口是 hmapdev 现生成的。 所以「开箱可用」名不副实。本脚本把这一步前置到发布流程里。 ## 用法 ```bash ./scripts/build_plugin_bundles.sh # 全部 21 个 ./scripts/build_plugin_bundles.sh weather qq # 指定 OUT=../dist/plugins ./scripts/build_plugin_bundles.sh ``` 产出 `.hmap` + `SHA256SUMS.plugins`,可直接作为 release 附件。 ## 实现要点(三处是踩过才写对的) 1. **产物有三种形态**,不能只认 `_bundle.hmap`: - `_bundle.hmap` 多平台 bundle(`plg.json` 的 `bundle: true`) - `__.hmap` 单平台(**qq** 的 plg.json 是 `bundle: false`, 与其余 20 个不一致) - `_lua.hmap` Lua 插件(**luademo**,不编译 Go) 脚本按形态标注,发布时能一眼看出是哪种。 2. **`set -e` 下不能用 `[ -z "$x" ] && x=$(ls ...)` 做兜底**: 一次 `ls` 无匹配(退出码 2)就会让整个子 shell 直接退出,后面的兜底根本走不到。 实测表现是「只有 qq 和 luademo 失败」——因为正是它俩没有 `_bundle.hmap`。 改成 `for` 循环 + `|| true`。 3. **参数拼错要报错,不能静默跳过**(否则以为打了实际没打)。 ## 验证 - 21/21 构建成功,合计约 150 MB(bundle 含 linux/amd64 + darwin/amd64; 不含 windows 是**策略**——homed 已放弃 Windows 原生,源码注释有说明) - 每个包内部结构核对:含 plugin.json、含内核认得的入口、当前平台可得 --- scripts/build_plugin_bundles.sh | 130 ++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100755 scripts/build_plugin_bundles.sh diff --git a/scripts/build_plugin_bundles.sh b/scripts/build_plugin_bundles.sh new file mode 100755 index 0000000..e9cac1f --- /dev/null +++ b/scripts/build_plugin_bundles.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +# 为 SDK 仓的 example 插件批量打 .hmap 包,产出可直接随 release 发布的插件包。 +# +# 背景:release 此前只发 homed/waiter 二进制与 hmapdev 工具链,**不发插件包**。 +# 用户要用某个插件,得自己装 Go 1.25、拉依赖、装 hmapdev、逐个 build —— 这是 +# 「开箱即用」名不副实的根源。本脚本把这一步前置到发布流程里。 +# +# 用法: +# ./build_plugin_bundles.sh # 全部 example +# ./build_plugin_bundles.sh weather qq memo # 指定插件 +# OUT=../dist/plugins ./build_plugin_bundles.sh +# +# 环境: +# HMAPDEV hmapdev 可执行文件(默认取 PATH 上的 hmapdev) +# OUT 产物目录(默认