miao 版本管理与发布
- miao 使用独立版本,从
0.0.1起,遵循 semver,Git tag 为vX.Y.Z。 - 唯一权威来源是根
package.json的version。bun script/set-version.ts X.Y.Z更新它并同步所有 workspace 的package.json;不带参数运行则只做同步。构建与源码运行都读取这个版本,MIAO_VERSION只能断言同一个值,不支持自动 bump 或时间戳版本。 - channel 决定是否为正式构建:发布构建的 channel 为
latest;其它构建(miao-dev的local、miao-preview的分支名)是预览构建,Installation.isPreview()为 true,不做自更新检查,也使用独立的数据库文件。 - 正式构建使用
miao.db,预览构建使用miao-<channel>.db。 CHANGELOG.md和 GitHub release 记录发布历史,不是当前开发版本的来源。
- 通过 PR 准备版本:创建短期发布分支,运行
bun script/set-version.ts X.Y.Z,准备 changelog 和简体中文 release notes 镜像。只提交发布相关路径,推送并创建 PR。包检查与原生 CI 通过后,squash 合入main。正式发布前,在配置好的构建机上构建并冒烟测试 preview。 - 从已合并的 main 触发:获得明确发布确认后,运行
gh workflow run release.yml --ref main --repo oxdingzg/miao。工作流没有输入参数,版本完全取自根package.json;在 Actions 页面手动 dispatch 也一样。不要直接向main提交或推送版本准备改动。 - 工作流
.github/workflows/release.yml:version:运行script/version.ts,以根package.json的版本创建草稿 releasevX.Y.Z,并生成 release notes,输出version/release/tag/repo。cli:矩阵macos-26(darwin-arm64) /macos-26-intel(darwin-x64) /ubuntu-latest(linux-x64) /ubuntu-24.04-arm(linux-arm64) /windows-2025(windows-x64)。每个平台先bun install+ 安装 Rust,然后packages/miao/script/build.ts --single构建本平台二进制(会先构建本机原生 addon 并内嵌),最后把miao-<target>.zip|tar.gz上传到该草稿 release。publish:所有平台成功后,先把 Windows 签名状态追加到 release 说明,再执行gh release edit --draft=false正式发布。
- 产物:
miao-{darwin-arm64,darwin-x64,linux-x64,linux-arm64,windows-x64}.{zip,tar.gz},命名与install脚本、自更新(Installation.latest→oxdingzg/miao/releases/latest)一致。
上述工作流是当前维护的发布入口。每次构建通过 packages/miao/script/generate.ts 从 https://models.dev/api.json 读取模型目录,也可以用 MODELS_DEV_API_JSON 指定本地文件。仓库没有单独提交模型快照的工作流;运行时会独立刷新缓存中的模型目录。
目前 Windows 二进制尚未签名。publish 步骤会在下载页面记录当前状态。
- 仓库根
CHANGELOG.md是可直接查看的版本历史(Keep a Changelog 格式),每次发布新增一节。 - GitHub release 的 notes 由
script/changelog.ts从 Conventional Commits 确定性生成(不再依赖 LLM /opencodeCLI):feat → Added、fix/revert → Fixed、perf → Performance、refactor → Changed,跳过chore/ci/test/docs/style/build。 - 预览与写入:
- 预览某版本区间:
bun script/changelog.ts --from <上一版本> --to HEAD --version <x.y.z> --print - 写入
CHANGELOG.md:追加--write - 发布时
script/version.ts以--to <sha>调用它生成UPCOMING_CHANGELOG.md,即 release notes。
- 预览某版本区间:
- Release notes 统一用英文,并且始终链接到简体中文镜像:
docs/releases/<tag>.zh.md, 在第一个标题下以[简体中文](https://github.com/oxdingzg/miao/blob/efb8c006289808476296c0b3b6b336011d96d604/docs/…)链接。发布前先写好镜像——缺少镜像时script/release-notes.ts会让发布作业失败。所有 miao 项目(包括mtty)都遵循同一规则。
发布前检查清单
Section titled “发布前检查清单”-
docs/releases/<x.y.z>.zh.md已存在:release 正文链接指向的简体中文镜像。 - Windows 真机验证 VT:PowerShell 5.1 老控制台 / Windows Terminal / pwsh 7 各跑一次(目前只在 macOS 上验证了逻辑,未上真机)。
-
curl -fsSL https://raw.githubusercontent.com/oxdingzg/miao/main/install | bash能装到该 release。 -
miao upgrade与启动自更新检查指向oxdingzg/miao且能识别新版本。 - native addon:确认各平台构建的 addon 能加载、且
MIAO_NATIVE=0可回退,OS 沙箱 runner 与其他原生辅助不受 native PoC 的未决风险影响。 - 无凭证/密钥入库;产物里不含
auth.json、.env。 - LICENSE 与归属(基于 opencode,MIT)。
- 三处版本一致:git tag、GitHub release、二进制
miao --version。
- 删除并重做:
gh release delete vX.Y.Z,重新 dispatch。 - 本机回滚到上一 preview 构建:
ln -sfn ~/.local/share/miao/bin/miao.prev ~/.local/bin/miao-preview。
- 只产 gnu linux + 主流 mac/win;musl / baseline / windows-arm64 暂不产出。
- 原生 addon 不做交叉编译:每个平台由对应 runner 本机构建。
- 发布属于生产动作:按本仓库规则,需明确确认后再执行。
Synced from oxdingzg/miao@efb8c00.