用途:ship-tag 把已评审的改动转成他人可安装的正式发布,让同一个 SemVer 版本号 X.Y.Z 在五处保持一致:release/vX.Y.Z 分支、vX.Y.Z 标签、版本文件(pyproject.toml / package.json)、CHANGELOG.md 中的 ## [X.Y.Z] - YYYY-MM-DD 标题,以及包源中的包版本。标签与包都来自状态为 completed 的 PR 合并提交,未评审内容不携带版本。
主要能力:提供四个工作流——Changelog.md 负责新增、回填、发布、撤销、生成说明与 lint;CutRelease.md 负责切发布分支、版本提升与 PR 重定向;TagAndPublish.md 负责打标签、可复现构建与发布 Universal Package;LocalRelease.md 用于无远端或 PR 的本地发布。工具包括 Changelog.ts(init|add|release|yank|notes|links|lint)、ReleaseCut.ts、ReleasePublish.ts、ReleaseLocal.ts,均从目标仓库内运行,无 npm 依赖,通过参数数组调用 git、az、uv,不经过 shell。
使用方式:例如 bun ~/.claude/skills/ship-tag/Tools/ReleaseCut.ts --version X.Y.Z --pr <id> [--bump];bun ~/.claude/skills/ship-tag/Tools/ReleasePublish.ts --version X.Y.Z --pr <id> --feed <feed>;bun ~/.claude/skills/ship-tag/Tools/ReleaseLocal.ts --version X.Y.Z [--push]。发布工具支持 --dry-run,退出码 3 表示被守卫拒绝且未写入。
适用场景:需要按 SemVer 发布、维护 Keep a Changelog 格式变更日志、在 Azure DevOps 上发布 Universal Package 并校验 sha256 的仓库。
限制:Universal Package 版本不可变,发布错误只能以补丁版本前滚并将旧版标记 [YANKED];包 Description 上限 256 字符;az artifacts universal publish -o json 不返回名称与版本,需通过 feed 的 packages API 确认;git tag -m 默认会删除以 # 开头的行,需用 --cleanup=verbatim;同名分支与标签会造成 checkout 歧义。其余细节暂未提供。