|
|
dc9e7d0495
|
ci: SDK 仓发布流水线 —— release/** 推送即出 hmapdev 五平台产物
与主仓 Release 流水线同构,差异只在产物与打包命令:
prepare 读 meta.Version;tag 已存在则整轮跳过;go test 门可显式跳过
(改 meta 的提交里写 [skip-release-tests],查该提交而非 HEAD)
build go build(硬门)→ go test → build.sh all hmapdev → 验证 5 平台齐全
→ 生成 SHA256SUMS → artifact
publish 打 tag → gh release create 传附件 → 回读校验
sync-gitcode 有 GITCODE_TOKEN 时同步(无则跳过)
产物清单不是猜的,依 gitcode 上 v1.2.0/v1.3.0 的实际附件(各 6 个):
hmapdev_{linux,darwin}_{amd64,arm64} + hmapdev_windows_amd64.exe + SHA256SUMS
两个易错点都有实测依据:
1. **测试要分两处跑**:tools/hmapdev 是**独立 module**,根模块的
`go test ./...` 不会进入它(Go 的模块边界,不是配置问题)。
2. **gitcode 上传必须显式列文件名**:上传脚本的路径语义是
`os.path.join(ASSET_DIR, name)`,所以要 cd 进目录 + `ASSET_DIR=.` + 裸名;
而它按扩展名识别产物的默认扫描对 hmapdev **无效** —— 五个产物里只有
windows 那个有扩展名,自动扫描会静默地一个都不传。
故把主仓的 upload_assets.py 一并纳入本仓 scripts/(两仓各自独立可取)。
本地已验证:`VERSION=1.4.0 bash package/build.sh all hmapdev` 产出 5 个
二进制(各 27–29M),根模块 go test 通过,actionlint 全绿。
|
2026-09-29 14:09:35 +08:00 |
|
|
|
db207fd9b7
|
fix(scripts): 默认产物目录落到内核仓 dist/plugins
原默认 `$SDK_DIR/../dist/plugins`,在 SDK 仓位于 third_party/homeagent-sdk 时
会解析成 **third_party/dist/plugins** —— 既不在内核仓的发布产物目录
(upload_assets.py 认 dist/release 那套),也不在 SDK 仓内,等于丢在夹缝里,
必须每次显式传 OUT 才不会错。
改为向上找「含 go.mod 与 internal/ 的目录」即内核仓根,取其 dist/plugins。
不在内核仓内(SDK 被单独 clone)时回退到 SDK 仓自己的 dist/plugins。
不写死 ../../ 的理由:SDK 仓既可作 submodule 位于主仓内,也可被单独 clone,
写死相对路径会把产物丢到仓外。
|
2026-09-20 09:07:22 +08:00 |
|
|
|
953fbb2f50
|
feat(scripts): 批量打插件包(.hmap)供 release 发布
## 问题
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`:
- `<name>_bundle.hmap` 多平台 bundle(`plg.json` 的 `bundle: true`)
- `<name>_<os>_<arch>.hmap` 单平台(**qq** 的 plg.json 是 `bundle: false`,
与其余 20 个不一致)
- `<name>_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、含内核认得的入口、当前平台可得
|
2026-09-20 09:02:31 +08:00 |
|
|
|
efb396d7b3
|
feat(lua): Lua SDK 全量对齐 1.3.0 + hmapdev 单一 mock 源/版本标记/语法预检
内核侧 Lua 桥此前停在 v0.8.0 时代能力面,而 1.1/1.2/1.3 新增的
媒体、注入标志位、中断优先级、事件订阅、动态通道注销只在 Go 侧存在,
文档却宣称『能力完全对齐』——属于静默漂移。
本仓(事实源):
- 新增 sdk/lua/sdk.lua:Lua mock 的单一事实源,补齐全部新 API
(*_opts / inject_input_sync / inject_*_media / set_tool_blocks /
unregister_output_channel / events / plugin_mgr / insert_with_media /
sentence_text+media_digests / attachments / context_policy)。
- scripts/sync-lua-sdk.sh:把事实源同步到 hmapdev assets、luademo、
以及被 vendored 时的内核副本;三份 sdk.lua 不再各自漂移。
- hmapdev init --lua:优先从激活 SDK 拷权威 mock,内嵌模板降级为
assets/sdk.lua 回退,不再内联手写副本。
- hmapdev build(Lua):plugin.json 写入 SDK 版本(能力可追溯),
打包前用 luac -p / lua loadfile 做语法预检,失败以非零码退出。
- hmapdev debug --lua:优先用激活 SDK 的权威 mock(HMAPDEV_SDK_LUA)。
- luademo 升级为全能力示例(新增 luademo_probe_v2)。
|
2026-09-13 19:56:12 +08:00 |
|