SuperAPI AI 工具集

semver-release

部署与运维

查看项目

更新于 10-16 04:36

技能介绍

用途

semver-release 是一个自动化版本发布工作流技能,基于 Semantic Versioning 2.0.0 规范。它旨在帮助开发者根据 git 提交历史自动推断语义化版本号,并完成版本文件更新、CHANGELOG 生成、提交与打标签等一系列发布操作。

主要能力

  • 预检:验证当前目录是否为 git 仓库,检查工作区是否干净,检测当前分支。
  • 项目配置检测:扫描项目根目录下的常见版本文件,包括 package.json(Node.js)、pyproject.toml(Python)、Cargo.toml(Rust)、pubspec.yaml(Dart/Flutter)、VERSION(通用),以及 pom.xml、build.gradle(.kts)、.gemspec、setup.py、setup.cfg、.csproj、CMakeLists.txt 等。若发现多个版本文件,会全部更新以保持一致。同时发现 CHANGELOG 文件,包括 CHANGELOG.md 及多语言变体(如 CHANGELOG.zh-CN.md、CHANGELOG-ja.md)。
  • 获取上次版本标签:查找最新的语义化版本标签(vMAJOR.MINOR.PATCH 或 MAJOR.MINOR.PATCH),并与版本文件中的版本进行一致性检查。若不一致,会报告差异并询问用户以哪个版本为基线。
  • 分析提交历史:解析提交的主题和正文,识别提交类型(breaking、feat、fix、perf、refactor、docs、chore 等),并确定版本影响(MAJOR、MINOR、PATCH 或无)。
  • 计算新版本:根据当前版本和提交类型自动计算新版本号。支持用户通过参数覆盖版本号。对于 MAJOR ≥ 1 和 MAJOR = 0 的情况有不同的计算规则。若仅有 docs/chore 提交,会询问用户是否强制发布补丁版本。
  • 生成 CHANGELOG 内容:读取各 CHANGELOG 文件的 [Unreleased] 部分,与 git 分析结果合并,去重并按类别组织(Added、Changed、Deprecated、Removed、Fixed、Security)。支持多语言翻译,保留 emoji 前缀和英文类别标题,翻译条目描述,保留技术术语和专有名词。
  • 交互式预览:展示计划中的版本变更、要更新的版本文件和 CHANGELOG 文件、以及各语言的变更内容,请求用户确认。
  • 执行变更:更新所有检测到的版本文件,更新 CHANGELOG 文件(将 [Unreleased] 内容移至新版本节,创建新的空 [Unreleased] 节),然后暂存、提交并打注解标签。
  • 失败恢复:提供提交失败或打标签失败时的恢复建议。
  • 完成提示:显示成功消息、更新的文件列表,并根据检测到的生态系统提供下一步发布命令(如 npm publish、twine upload、cargo publish 等)。

使用方式

该技能通过一系列步骤执行,通常作为 AI 助手的一个技能被调用。用户可以在 git 仓库中触发该技能,技能会自动执行预检、检测、分析、计算、生成、预览、执行和完成提示。用户可以在计算版本时通过参数覆盖版本号,也可以在预览阶段确认或取消发布。

适用场景

  • 需要根据 git 提交历史自动生成语义化版本号的项目。
  • 多生态系统项目,需要同时更新多个版本文件。
  • 需要维护多语言 CHANGELOG 的项目。
  • 希望自动化版本发布流程,减少手动操作的团队。

限制

  • 需要项目位于 git 仓库中,且工作区干净。
  • 版本计算依赖于提交消息遵循约定式提交格式(如 feat、fix、BREAKING CHANGE 等)。
  • 预发布版本(如 1.0.0-rc.1)仅通过用户显式覆盖创建。
  • 若没有语义化版本标签,会使用 v0.0.0 作为基线。
  • 若没有提交,会询问用户是否中止或强制发布。
  • 具体版本文件的提取和更新模式参考 references/version-files.md,CHANGELOG 类别映射和翻译规则参考 references/changelog-categories.md。
  • 该技能不包含实际的发布命令执行,仅提供建议。