把一个 workspace 作为一个版本发布
Verso 是面向统一版本仓库的原生发布 CLI。它会发现需要发布的 manifest,写入同一个目标版本,按需在 changelog 顶部加入 Conventional Commit 记录,创建 annotated tag,再原子推送当前上游分支和这个准确的 tag。
# 使用你偏好的 package manager 安装 @amamo/verso,然后:
verso doctor
verso --dry-runVerso 的契约
verso.toml + package manifest + Git 历史
-> 校验配置、版本、工作区、分支和 upstream
-> 选择一个 SemVer 目标版本
-> 更新 package manifest、配置的 Cargo 文件和 changelog
-> 创建 release commit 和 annotated tag
-> git push --atomic <upstream> <branch> <exact-tag>| Verso 负责 | 你的仓库负责 |
|---|---|
| 发现 package 并检查统一版本 | 通过 hook 运行测试、构建和策略检查 |
| 更新 JSON、JSON5、YAML、Cargo 和 changelog | 管理 registry 凭据并发布 package |
| 创建 release commit、annotated tag 和原子推送 | 响应 tag,生成产物和 GitHub Release |
| dry-run 和按阶段执行的本地回滚 | 远端推送成功后的恢复决策 |
适用场景
当所有可发布 package 共用同一个版本和 Git tag 时,Verso 很合适。单包项目也受支持;根目录存在受支持的 package manifest 时,可以不创建配置文件。
如果各 package 独立版本、发布 registry 必须属于本地事务,或远端不支持原子推送,应选择其他发布模型。
安全模型
verso doctor在不开始发布的情况下检查仓库。verso --dry-run会列出文件、hook 和 Git 命令,但不写入文件,也不执行会修改 Git 的命令。- 真正发布要求当前位于有 upstream 的具名分支,且本地分支不能落后于 upstream。
- 默认要求工作区干净;宽松模式仍要求 index 和所有 release 文件干净。
- 推送前的执行错误会触发按阶段清理;用户主动取消时,会有意保留已经完成的阶段,避免静默丢弃可见工作。
- 推送失败会保留本地 commit 和 tag;
after_pushhook 失败时,远端已经接收两个 ref。