关于 release
面向需要协调更新版本与变更日志的项目发布技能。它支持语义化版本升级,可依据 Conventional Commits 推断升级幅度,并同步插件和文档中的版本号。
主要功能
- 01支持 patch、minor、major 或指定版本
- 02依据 Conventional Commits 推断升级幅度
- 03同步插件和文档版本号
- 04生成并整理 Keep a Changelog 格式日志
适用场景
- 01执行补丁、次要或主要版本发布
- 02根据提交记录自动判定版本升级
- 03同步项目、插件和站点文档版本
- 04生成并审阅发布变更日志
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ s-hiraoku/ synapse-a2a --skill release安装后在 Claude Code 中输入/release确认已加载。
详细介绍
发布版本更新
此技能会更新项目版本、插件版本和变更日志。
用法
/release [version-type-or-number] [description]
版本类型
patch— 增加修订版本号(例如,0.2.12 → 0.2.13)minor— 增加次版本号(例如,0.2.12 → 0.3.0)major— 增加主版本号(例如,0.2.12 → 1.0.0)X.Y.Z— 设置指定版本(例如,1.0.0)
版本类型为可选项 — 根据 Conventional Commits 自动检测
如果省略版本类型,则根据自最新标签以来的提交,使用标准的 Semantic Versioning + Conventional Commits 映射自动检测版本提升级别:
- major — 任一提交的正文中包含
BREAKING CHANGE:,或主题中的冒号前有!(例如,feat!:、refactor(core)!:)。 - minor — 否则,至少有一个
feat:(或feat(scope):)提交。 - patch — 其他情况(修复、杂项、文档等)。
流程:
git describe --tags --abbrev=0→ 最新标签。如果此命令因仓库尚无标签而以非零状态退出,则回退到完整历史记录:git log HEAD --pretty=%H%x00%s%x00%b(从初始提交到 HEAD),并将所有提交视为“未发布”。- 否则,
git log <tag>..HEAD --pretty=%H%x00%s%x00%b→ 用于分类的提交。(以 NUL 分隔的字段可确保多行正文能够解析。) - 如果范围为空,则中止并显示
No commits since <tag>; nothing to release。 - 打印检测到的版本提升类型和一行提交数量摘要,然后继续正常的版本提升流程。不要提示确认,以免阻塞
post-impl-codex等非交互式工作流。
显式参数始终优先。 如果用户传入 patch/minor/major/X.Y.Z,则完全跳过自动检测。
描述(可选)
如果提供,则用作变更日志条目的描述。否则,分析近期提交以生成变更日志。
工作流
步骤 1:读取当前版本
读取 pyproject.toml 并提取当前版本:
# Look for: version = "X.Y.Z"
步骤 2:计算新版本
根据版本类型:
- patch:
major.minor.patch→major.minor.(patch+1) - minor:
major.minor.patch→major.(minor+1).0 - major:
major.minor.patch→(major+1).0.0 - specific:直接使用提供的版本
验证新版本高于当前版本(除非强制更新)。
步骤 3:更新 pyproject.toml
编辑 pyproject.toml:
version = "NEW_VERSION"
步骤 3.5:更新 plugin.json
编辑 plugins/synapse-a2a/.claude-plugin/plugin.json:
"version": "NEW_VERSION",
重要: 插件版本必须与 pyproject.toml 中的版本保持同步。
步骤 3.6:更新 site-docs 中的版本引用
更新 GitHub Pages 文档中的硬编码版本字符串:
-
site-docs/getting-started/installation.md— 验证部分中的版本示例:You should see the version number (e.g., `NEW_VERSION`). -
site-docs/concepts/a2a-protocol.md— Agent Card JSON 示例:"version": "NEW_VERSION", -
site-docs/changelog.md— 在“Recent Highlights”顶部添加新版本条目(仅当在步骤 4–5 中更新了 CHANGELOG.md 时)。 -
mkdocs.yml—repo_name包含在 GitHub Pages 页眉中显示的版本:repo_name: s-hiraoku/synapse-a2a vNEW_VERSION
重要: site-docs 中的版本必须与 pyproject.toml 中的版本保持同步。
步骤 4:使用 git-cliff 生成变更日志
使用 git-cliff 根据 Conventional Commits 自动生成变更日志条目:
# Preview the generated changelog
python scripts/generate_changelog.py --unreleased --tag vNEW_VERSION --dry-run
# Write to CHANGELOG.md
python scripts/generate_changelog.py --unreleased --tag vNEW_VERSION
步骤 5:审核并调整 CHANGELOG.md
审核生成的条目,并在需要时手动调整:
- 改写条目,使其更清晰
- 补充缺失的背景信息或 PR 引用
- 删除过滤时遗漏的无关条目
- 确保日期正确:
## [NEW_VERSION] - YYYY-MM-DD
如果没有 git-cliff,或需要手动覆盖,则直接使用 Keep a Changelog 格式编写条目(见下文)。
步骤 6:报告结果
显示:
- 旧版本 → 新版本
- 变更日志条目预览
- 修改的文件
示例
提升修订版本号
/release patch
提升次版本号并添加描述
/release minor "Add new authentication system"
提升主版本号
/release major
设置指定版本
/release 1.0.0
简写
/version patch # Same as /release patch
文件位置
- 版本:
pyproject.toml(包含version = "..."的行) - 插件版本:
plugins/synapse-a2a/.claude-plugin/plugin.json(包含"version": "..."的行) - 站点文档版本:
site-docs/getting-started/installation.md、site-docs/concepts/a2a-protocol.md - 站点页眉版本:
mkdocs.yml(repo_name字段) - 更新日志:
CHANGELOG.md - 站点文档更新日志:
site-docs/changelog.md
更新日志格式
遵循 Keep a Changelog 格式:
## [X.Y.Z] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes in existing functionality
### Fixed
- Bug fixes
### Removed
- Removed features
### Documentation
- Documentation updates
### Tests
- Test updates
仅包含有条目的章节。章节顺序按上述所示排列。