自动化发版流程:更新 CHANGELOG、plugin.json、创建 git tag 并推送
自动化插件发版流程:更新 CHANGELOG、plugin.json、创建 git tag 并推送。支持预览模式和跳过推送。
/plugin marketplace add penkzhou/swiss-army-knife-plugin/plugin install swiss-army-knife@swiss-army-knife-plugin<version> [--no-push] [--dry-run]自动化插件发版流程,包括更新文档、版本号、创建 tag 和推送。
宣布:"我正在使用 release 命令执行自动化发版流程。"
从用户输入中解析参数:
<version>:新版本号(必需,格式:X.Y.Z,例如 0.3.0)--no-push:不自动推送 tag 到远程仓库--dry-run:预览操作但不实际执行示例:
/release 0.3.0 - 发布 0.3.0 版本并推送/release 0.3.0 --no-push - 发布 0.3.0 但不推送/release 0.3.0 --dry-run - 预览发布操作检查版本号是否符合语义化版本格式(X.Y.Z):
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "错误:版本号格式不正确。应为 X.Y.Z 格式(例如:0.3.0)"
exit 1
fi
读取 .claude-plugin/plugin.json 获取当前版本号,确保新版本号大于当前版本。
验证规则:
确保工作区干净,避免意外提交未完成的工作:
# 检查是否有未提交的更改
git status --porcelain
如果有未提交的更改,询问用户:
读取 CHANGELOG.md 并验证:
## [未发布] 区域如果 [未发布] 区域为空,警告用户:
执行以下转换:
添加新版本标题:
## [未发布]
## [X.Y.Z] - YYYY-MM-DD
将 [未发布] 下的内容移到新版本标题下。
更新底部链接:
[未发布]: https://github.com/penkzhou/swiss-army-knife-plugin/compare/vX.Y.Z...HEAD
[X.Y.Z]: https://github.com/penkzhou/swiss-army-knife-plugin/compare/vPREV...vX.Y.Z
实现:使用 Read 读取文件,使用 Edit 工具进行精确替换。
更新 .claude-plugin/plugin.json 中的版本号:
{
"version": "X.Y.Z"
}
实现:使用 Read 和 Edit 工具进行精确替换。
如果不是 dry-run 模式:
git add CHANGELOG.md .claude-plugin/plugin.json
git commit -m "chore: release version X.Y.Z"
git tag -a vX.Y.Z -m "Release version X.Y.Z"
如果没有 --no-push 标志:
git push origin main
git push origin vX.Y.Z
如果有 --no-push 标志:
提示用户:
✅ 发版完成!Tag vX.Y.Z 已创建。
要推送到远程仓库,请运行:
git push origin main
git push origin vX.Y.Z
输出发版摘要:
🎉 版本 X.Y.Z 发布成功!
✅ 已更新 CHANGELOG.md
✅ 已更新 .claude-plugin/plugin.json
✅ 已创建 git commit
✅ 已创建 tag vX.Y.Z
[✅ 已推送到远程仓库] (如果执行了推送)
下一步:
1. 在 GitHub 上创建 Release:https://github.com/penkzhou/swiss-army-knife-plugin/releases/new?tag=vX.Y.Z
2. 更新 CHANGELOG.md 的 [未发布] 区域,记录下一个版本的变更
在每个步骤中,如果遇到错误:
清晰地报告错误信息
如果已经修改了文件,提供恢复命令:
git checkout CHANGELOG.md .claude-plugin/plugin.json
git tag -d vX.Y.Z # 如果 tag 已创建
停止执行,不继续后续步骤
如果指定了 --dry-run:
执行所有验证步骤
显示将要进行的操作(不实际执行):
[DRY RUN] 将执行以下操作:
1. 更新 CHANGELOG.md:将 [未发布] 内容移到 [X.Y.Z] - YYYY-MM-DD
2. 更新 .claude-plugin/plugin.json:version: "0.2.0" → "X.Y.Z"
3. 创建 git commit:chore: release version X.Y.Z
4. 创建 git tag:vX.Y.Z
[5. 推送到远程仓库] (如果没有 --no-push)
不修改任何文件,不执行 git 操作
/releasePrepare a new release by updating changelog, version, and documentation