release-skills
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRelease Skills
版本发布技能
Universal release workflow supporting any project type with multi-language changelog.
支持多语言变更日志的通用项目版本发布工作流。
User Input Tools
用户输入工具
When this skill prompts the user, follow this tool-selection rule (priority order):
- Prefer built-in user-input tools exposed by the current agent runtime — e.g., ,
AskUserQuestion,request_user_input,clarify, or any equivalent.ask_user - Fallback: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
- Batching: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.
Concrete references below are examples — substitute the local equivalent in other runtimes.
AskUserQuestion当此技能需要提示用户时,请遵循以下工具选择规则(优先级顺序):
- 优先使用当前Agent运行时提供的内置用户输入工具 —— 例如 、
AskUserQuestion、request_user_input、clarify或任何等效工具。ask_user - 备选方案:如果没有此类工具,则输出编号的纯文本消息,并要求用户回复所选编号/答案以回答每个问题。
- 批量处理:如果工具支持单次调用包含多个问题,则将所有适用问题合并为单次调用;如果仅支持单个问题,则按优先级顺序逐个提问。
以下具体的引用仅为示例 —— 在其他运行时中请替换为本地等效工具。
AskUserQuestionQuick Start
快速开始
Just run - auto-detects your project configuration.
/release-skills只需运行 —— 系统会自动检测你的项目配置。
/release-skillsSupported Projects
支持的项目类型
| Project Type | Version File | Auto-Detected |
|---|---|---|
| Node.js | package.json | ✓ |
| Python | pyproject.toml | ✓ |
| Rust | Cargo.toml | ✓ |
| Claude Plugin | marketplace.json | ✓ |
| Generic | VERSION / version.txt | ✓ |
| 项目类型 | 版本文件 | 是否自动检测 |
|---|---|---|
| Node.js | package.json | ✓ |
| Python | pyproject.toml | ✓ |
| Rust | Cargo.toml | ✓ |
| Claude Plugin | marketplace.json | ✓ |
| 通用项目 | VERSION / version.txt | ✓ |
Options
选项参数
| Flag | Description |
|---|---|
| Preview changes without executing |
| Force major version bump |
| Force minor version bump |
| Force patch version bump |
| Create missing GitHub Releases for existing tags from changelog sections |
| 标志 | 描述 |
|---|---|
| 预览变更但不执行实际操作 |
| 强制升级主版本号 |
| 强制升级次版本号 |
| 强制升级修订版本号 |
| 从变更日志章节为现有标签创建缺失的GitHub Releases |
Workflow
工作流
Step 1: Detect Project Configuration
步骤1:检测项目配置
- Check for (optional config override)
.releaserc.yml- If present, inspect whether it defines release hooks
- Auto-detect version file by scanning (priority order):
- (Node.js)
package.json - (Python)
pyproject.toml - (Rust)
Cargo.toml - or
marketplace.json(Claude Plugin).claude-plugin/marketplace.json - or
VERSION(Generic)version.txt
- Scan for changelog files using glob patterns:
CHANGELOG*.mdHISTORY*.mdCHANGES*.md
- Identify language of each changelog by filename suffix
- Detect GitHub release support:
- Check whether points to GitHub
origin - Check whether is installed and authenticated
gh - Check existing releases with when available
gh release list --limit 5
- Check whether
- Display detected configuration
Project Hook Contract:
If defines , keep the release workflow generic and delegate project-specific packaging/publishing to those hooks.
.releaserc.ymlrelease.hooksSupported hooks:
| Hook | Purpose | Expected Responsibility |
|---|---|---|
| Make one target releasable | Validate the target is self-contained, sync/embed local dependencies, optionally stage extra files |
| Publish one releasable target | Upload the prepared target (or a staged directory if the project uses one), attach version/changelog/tags |
Supported placeholders:
| Placeholder | Meaning |
|---|---|
| Absolute path to repository root |
| Absolute path to the module/skill being released |
| Absolute path to a temporary staging directory for this target, when the project uses one |
| Version selected by the release workflow |
| |
| Absolute path to a UTF-8 file containing release notes/changelog text |
Execution rules:
- Keep the skill generic: do not hardcode registry/package-manager/project layout details into this SKILL.
- If exists, run it once per target before publish-related checks that need the final releasable target state.
prepare_artifact - Write release notes to a temp file and pass that file path to ; do not inline multiline changelog text into shell commands.
publish_artifact - If hooks are absent, fall back to the default project-agnostic release workflow.
Language Detection Rules:
Changelog files follow the pattern or , where / is a language or region code.
CHANGELOG_{LANG}.mdCHANGELOG.{lang}.md{lang}{LANG}| Pattern | Example | Language |
|---|---|---|
| No suffix | | en (default) |
| | Corresponding language |
| | Corresponding language |
| | Corresponding region variant |
Common language codes: (Chinese), (Japanese), (Korean), (German), (French), (Spanish).
zhjakodefresOutput Example:
Project detected:
Version file: package.json (1.2.3)
Changelogs:
- CHANGELOG.md (en)
- CHANGELOG.zh.md (zh)
- CHANGELOG.ja.md (ja)- 检查是否存在(可选的配置覆盖文件)
.releaserc.yml- 如果存在,检查其是否定义了发布钩子
- 通过扫描自动检测版本文件(优先级顺序):
- (Node.js项目)
package.json - (Python项目)
pyproject.toml - (Rust项目)
Cargo.toml - 或
marketplace.json(Claude Plugin项目).claude-plugin/marketplace.json - 或
VERSION(通用项目)version.txt
- 使用glob模式扫描变更日志文件:
CHANGELOG*.mdHISTORY*.mdCHANGES*.md
- 通过文件名后缀识别每个变更日志的语言
- 检测GitHub发布支持:
- 检查是否指向GitHub仓库
origin - 检查工具是否已安装并完成认证
gh - 若可用,通过检查现有发布记录
gh release list --limit 5
- 检查
- 展示检测到的配置信息
项目钩子约定:
如果定义了,请保持发布工作流的通用性,并将项目特定的打包/发布操作委托给这些钩子。
.releaserc.ymlrelease.hooks支持的钩子:
| 钩子 | 用途 | 预期职责 |
|---|---|---|
| 准备可发布的目标产物 | 验证目标产物是否独立完整,同步/嵌入本地依赖,可选地暂存额外文件 |
| 发布可发布的目标产物 | 上传已准备好的目标产物(或项目使用的暂存目录),附加版本/变更日志/标签信息 |
支持的占位符:
| 占位符 | 含义 |
|---|---|
| 仓库根目录的绝对路径 |
| 待发布模块/技能的绝对路径 |
| 该目标产物的临时暂存目录绝对路径(当项目使用暂存目录时) |
| 发布工作流选定的版本号 |
| |
| 包含发布说明/变更日志文本的UTF-8文件绝对路径 |
执行规则:
- 保持技能的通用性:不要将注册表/包管理器/项目布局的细节硬编码到此SKILL中。
- 如果存在钩子,在执行需要最终可发布目标状态的发布相关检查之前,为每个目标产物运行一次该钩子。
prepare_artifact - 将发布说明写入临时文件,并将该文件路径传递给;不要将多行变更日志文本内联到shell命令中。
publish_artifact - 如果没有钩子,则回退到默认的与项目无关的发布工作流。
语言检测规则:
变更日志文件遵循或的模式,其中 / 是语言或地区代码。
CHANGELOG_{LANG}.mdCHANGELOG.{lang}.md{lang}{LANG}| 模式 | 示例 | 语言 |
|---|---|---|
| 无后缀 | | en(默认) |
| | 对应语言 |
| | 对应语言 |
| | 对应地区变体 |
常见语言代码: (中文)、(日语)、(韩语)、(德语)、(法语)、(西班牙语)。
zhjakodefres输出示例:
Project detected:
Version file: package.json (1.2.3)
Changelogs:
- CHANGELOG.md (en)
- CHANGELOG.zh.md (zh)
- CHANGELOG.ja.md (ja)Step 2: Analyze Changes Since Last Tag
步骤2:分析上次标签以来的变更
bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
git log ${LAST_TAG}..HEAD --oneline
git diff ${LAST_TAG}..HEAD --statCategorize by conventional commit types:
| Type | Description |
|---|---|
| feat | New features |
| fix | Bug fixes |
| docs | Documentation |
| refactor | Code refactoring |
| perf | Performance improvements |
| test | Test changes |
| style | Formatting, styling |
| chore | Maintenance (skip in changelog) |
Breaking Change Detection:
- Commit message starts with
BREAKING CHANGE - Commit body/footer contains
BREAKING CHANGE: - Removed public APIs, renamed exports, changed interfaces
If breaking changes detected, warn user: "Breaking changes detected. Consider major version bump (--major flag)."
bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
git log ${LAST_TAG}..HEAD --oneline
git diff ${LAST_TAG}..HEAD --stat按约定式提交类型分类:
| 类型 | 描述 |
|---|---|
| feat | 新功能 |
| fix | Bug修复 |
| docs | 文档更新 |
| refactor | 代码重构 |
| perf | 性能优化 |
| test | 测试变更 |
| style | 格式、样式调整 |
| chore | 维护工作(变更日志中跳过) |
破坏性变更检测:
- 提交消息以开头
BREAKING CHANGE - 提交正文/页脚包含
BREAKING CHANGE: - 移除了公共API、重命名导出、更改了接口
如果检测到破坏性变更,向用户发出警告:"检测到破坏性变更。建议升级主版本号(使用--major标志)。"
Step 3: Determine Version Bump
步骤3:确定版本号升级规则
Rules (in priority order):
- User flag → Use specified
--major/--minor/--patch - BREAKING CHANGE detected → Major bump (1.x.x → 2.0.0)
- commits present → Minor bump (1.2.x → 1.3.0)
feat: - Otherwise → Patch bump (1.2.3 → 1.2.4)
Display version change:
1.2.3 → 1.3.0规则(优先级顺序):
- 用户指定的标志 → 使用指定的升级类型
--major/--minor/--patch - 检测到BREAKING CHANGE → 升级主版本号(1.x.x → 2.0.0)
- 存在类型的提交 → 升级次版本号(1.2.x → 1.3.0)
feat: - 其他情况 → 升级修订版本号(1.2.3 → 1.2.4)
展示版本变更:
1.2.3 → 1.3.0Step 4: Generate Multi-language Changelogs
步骤4:生成多语言变更日志
For each detected changelog file:
- Identify language from filename suffix
- Detect third-party contributors:
- Check merge commits:
git log ${LAST_TAG}..HEAD --merges --pretty=format:"%H %s" - For each merged PR, identify the PR author via
gh pr view <number> --json author --jq '.author.login' - Compare against repo owner ()
gh repo view --json owner --jq '.owner.login' - If PR author ≠ repo owner → third-party contributor
- Check merge commits:
- Generate content in that language:
- Section titles in target language
- Change descriptions written naturally in target language (not translated)
- Date format: YYYY-MM-DD (universal)
- Third-party contributions: Append contributor attribution to the changelog entry
(by @username)
- Insert at file head (preserve existing content)
Section Title Translations (built-in):
| Type | en | zh | ja | ko | de | fr | es |
|---|---|---|---|---|---|---|---|
| feat | Features | 新功能 | 新機能 | 새로운 기능 | Funktionen | Fonctionnalités | Características |
| fix | Fixes | 修复 | 修正 | 수정 | Fehlerbehebungen | Corrections | Correcciones |
| docs | Documentation | 文档 | ドキュメント | 문서 | Dokumentation | Documentation | Documentación |
| refactor | Refactor | 重构 | リファクタリング | 리팩토링 | Refactoring | Refactorisation | Refactorización |
| perf | Performance | 性能优化 | パフォーマンス | 성능 | Leistung | Performance | Rendimiento |
| breaking | Breaking Changes | 破坏性变更 | 破壊的変更 | 주요 변경사항 | Breaking Changes | Changements majeurs | Cambios importantes |
Changelog Format:
markdown
undefined针对每个检测到的变更日志文件:
- 识别语言:通过文件名后缀确定
- 检测第三方贡献者:
- 检查合并提交:
git log ${LAST_TAG}..HEAD --merges --pretty=format:"%H %s" - 对于每个合并的PR,通过识别PR作者
gh pr view <number> --json author --jq '.author.login' - 与仓库所有者对比()
gh repo view --json owner --jq '.owner.login' - 如果PR作者≠仓库所有者 → 标记为第三方贡献者
- 检查合并提交:
- 生成对应语言的内容:
- 章节标题使用目标语言
- 变更描述自然使用目标语言撰写(而非翻译)
- 日期格式: YYYY-MM-DD(通用格式)
- 第三方贡献: 在变更日志条目末尾添加贡献者署名
(by @username)
- 插入到文件头部(保留现有内容)
章节标题翻译(内置):
| 类型 | en | zh | ja | ko | de | fr | es |
|---|---|---|---|---|---|---|---|
| feat | Features | 新功能 | 新機能 | 새로운 기능 | Funktionen | Fonctionnalités | Características |
| fix | Fixes | 修复 | 修正 | 수정 | Fehlerbehebungen | Corrections | Correcciones |
| docs | Documentation | 文档 | ドキュメント | 문서 | Dokumentation | Documentation | Documentación |
| refactor | Refactor | 重构 | リファクタリング | 리팩토링 | Refactoring | Refactorisation | Refactorización |
| perf | Performance | 性能优化 | パフォーマンス | 성능 | Leistung | Performance | Rendimiento |
| breaking | Breaking Changes | 破坏性变更 | 破壊的変更 | 주요 변경사항 | Breaking Changes | Changements majeurs | Cambios importantes |
变更日志格式:
markdown
undefined{VERSION} - {YYYY-MM-DD}
{VERSION} - {YYYY-MM-DD}
Features
Features
- Description of new feature
- Description of third-party contribution (by @username)
- Description of new feature
- Description of third-party contribution (by @username)
Fixes
Fixes
- Description of fix
- Description of fix
Documentation
Documentation
- Description of docs changes
Only include sections that have changes. Omit empty sections.
**Third-Party Attribution Rules**:
- Only add `(by @username)` for contributors who are NOT the repo owner
- Use GitHub username with `@` prefix
- Place at the end of the changelog entry line
- Apply to all languages consistently (always use `(by @username)` format, not translated)
**Multi-language Example**:
English (CHANGELOG.md):
```markdown- Description of docs changes
仅包含有变更的章节。省略空章节。
**第三方署名规则**:
- 仅为非仓库所有者的贡献者添加`(by @username)`
- 使用带`@`前缀的GitHub用户名
- 放置在变更日志条目行的末尾
- 在所有语言中保持一致格式(始终使用`(by @username)`格式,不翻译)
**多语言示例**:
英文(CHANGELOG.md):
```markdown1.3.0 - 2026-01-22
1.3.0 - 2026-01-22
Features
Features
- Add user authentication module (by @contributor1)
- Support OAuth2 login
- Add user authentication module (by @contributor1)
- Support OAuth2 login
Fixes
Fixes
- Fix memory leak in connection pool
Chinese (CHANGELOG.zh.md):
```markdown- Fix memory leak in connection pool
中文(CHANGELOG.zh.md):
```markdown1.3.0 - 2026-01-22
1.3.0 - 2026-01-22
新功能
新功能
- 新增用户认证模块 (by @contributor1)
- 支持 OAuth2 登录
- 新增用户认证模块 (by @contributor1)
- 支持 OAuth2 登录
修复
修复
- 修复连接池内存泄漏问题
Japanese (CHANGELOG.ja.md):
```markdown- 修复连接池内存泄漏问题
日文(CHANGELOG.ja.md):
```markdown1.3.0 - 2026-01-22
1.3.0 - 2026-01-22
新機能
新機能
- ユーザー認証モジュールを追加 (by @contributor1)
- OAuth2 ログインをサポート
- ユーザー認証モジュールを追加 (by @contributor1)
- OAuth2 ログインをサポート
修正
修正
- コネクションプールのメモリリークを修正
undefined- コネクションプールのメモリリークを修正
undefinedStep 5: Group Changes by Skill/Module
步骤5:按技能/模块分组变更
Analyze commits since last tag and group by affected skill/module:
- Identify changed files per commit
- Group by skill/module:
- → Group under that skill
skills/<skill-name>/* - Root files (CLAUDE.md, etc.) → Group as "project"
- Multiple skills in one commit → Split into multiple groups
- For each group, identify related README updates needed
Example Grouping:
baoyu-cover-image:
- feat: add new style options
- fix: handle transparent backgrounds
→ README updates: options table
baoyu-comic:
- refactor: improve panel layout algorithm
→ No README updates needed
project:
- docs: update CLAUDE.md architecture section分析上次标签以来的提交,并按受影响的技能/模块分组:
- 识别每个提交中变更的文件
- 按技能/模块分组:
- → 归到对应技能下
skills/<skill-name>/* - 根目录文件(如CLAUDE.md等)→ 归为“项目”组
- 单个提交涉及多个技能 → 拆分为多个组
- 针对每个组,确定是否需要更新相关README
分组示例:
baoyu-cover-image:
- feat: add new style options
- fix: handle transparent backgrounds
→ README updates: options table
baoyu-comic:
- refactor: improve panel layout algorithm
→ No README updates needed
project:
- docs: update CLAUDE.md architecture sectionStep 6: Commit Each Skill/Module Separately
步骤6:单独提交每个技能/模块的变更
For each skill/module group (in order of changes):
-
Check README updates needed:
- Scan for mentions of this skill/module
README*.md - Verify options/flags documented correctly
- Update usage examples if syntax changed
- Update feature descriptions if behavior changed
- Scan
-
Stage and commit:bash
git add skills/<skill-name>/* git add README.md README.zh.md # If updated for this skill git commit -m "<type>(<skill-name>): <meaningful description>" -
Commit message format:
- Use conventional commit format:
<type>(<scope>): <description> - : feat, fix, refactor, docs, perf, etc.
<type> - : skill name or "project"
<scope> - : Clear, meaningful description of changes
<description>
- Use conventional commit format:
Example Commits:
bash
git commit -m "feat(baoyu-cover-image): add watercolor and minimalist styles"
git commit -m "fix(baoyu-comic): improve panel layout for long dialogues"
git commit -m "docs(project): update architecture documentation"Common README Updates Needed:
| Change Type | README Section to Check |
|---|---|
| New options/flags | Options table, usage examples |
| Renamed options | Options table, usage examples |
| New features | Feature description, examples |
| Breaking changes | Migration notes, deprecation warnings |
| Restructured internals | Architecture section (if exposed to users) |
针对每个技能/模块组(按变更顺序):
-
检查是否需要更新README:
- 扫描中提及该技能/模块的内容
README*.md - 验证选项/标志是否已正确记录
- 如果语法变更,更新使用示例
- 如果行为变更,更新功能描述
- 扫描
-
暂存并提交:bash
git add skills/<skill-name>/* git add README.md README.zh.md # 如果为该技能更新了这些文件 git commit -m "<type>(<skill-name>): <meaningful description>" -
提交消息格式:
- 使用约定式提交格式:
<type>(<scope>): <description> - : feat、fix、refactor、docs、perf等
<type> - : 技能名称或“project”
<scope> - : 清晰、有意义的变更描述
<description>
- 使用约定式提交格式:
提交示例:
bash
git commit -m "feat(baoyu-cover-image): add watercolor and minimalist styles"
git commit -m "fix(baoyu-comic): improve panel layout for long dialogues"
git commit -m "docs(project): update architecture documentation"常见README更新场景:
| 变更类型 | 需要检查的README章节 |
|---|---|
| 新增选项/标志 | 选项表格、使用示例 |
| 选项重命名 | 选项表格、使用示例 |
| 新增功能 | 功能描述、示例 |
| 破坏性变更 | 迁移说明、弃用警告 |
| 内部结构重构 | 架构章节(如果对用户可见) |
Step 7: Generate Changelog and Update Version
步骤7:生成变更日志并更新版本号
- Generate multi-language changelogs (as described in Step 4)
- Update version file:
- Read version file (JSON/TOML/text)
- Update version number
- Write back (preserve formatting)
- Create release notes file:
- Prefer the new version section from
CHANGELOG.md - If no English/default changelog exists, use the first detected changelog
- Extract only the exact section through the next
## {VERSION} - {YYYY-MM-DD}## - Match both plain version and tag-prefixed headings when needed, e.g. and
1.2.3v1.2.3 - Keep breaking changes near the top; if needed, add a short highlight before other sections
- Write notes to a UTF-8 temp file and reuse it for annotated tag messages, GitHub Releases, and
publish_artifact - In normal mode, stop rather than creating an empty tag or GitHub Release when notes cannot be found
- Prefer the new version section from
Version Paths by File Type:
| File | Path |
|---|---|
| package.json | |
| pyproject.toml | |
| Cargo.toml | |
| marketplace.json | |
| VERSION / version.txt | Direct content |
- 生成多语言变更日志(如步骤4所述)
- 更新版本文件:
- 读取版本文件(JSON/TOML/文本格式)
- 更新版本号
- 写回文件(保留原有格式)
- 创建发布说明文件:
- 优先使用中的新版本章节
CHANGELOG.md - 如果没有英文/默认变更日志,则使用第一个检测到的变更日志
- 仅提取从章节到下一个
## {VERSION} - {YYYY-MM-DD}的内容## - 必要时匹配纯版本号和带标签前缀的标题,例如和
1.2.3v1.2.3 - 将破坏性变更放在靠近顶部的位置;必要时在其他章节前添加简短高亮
- 将说明写入UTF-8临时文件,并复用该文件用于带注释的标签消息、GitHub Releases和钩子
publish_artifact - 在正常模式下,如果找不到说明内容,应停止操作,而不是创建空标签或GitHub Release
- 优先使用
不同文件类型的版本路径:
| 文件 | 路径 |
|---|---|
| package.json | |
| pyproject.toml | |
| Cargo.toml | |
| marketplace.json | |
| VERSION / version.txt | 直接内容 |
Step 8: User Confirmation
步骤8:用户确认
Before creating the release commit, ask user to confirm:
Use AskUserQuestion with three questions:
-
Version bump (single select):
- Show recommended version based on Step 3 analysis
- Options: recommended (with label), other semver options
- Example: ,
1.2.3 → 1.3.0 (Recommended),1.2.3 → 1.2.41.2.3 → 2.0.0
-
Push to remote (single select):
- Options: "Yes, push after commit", "No, keep local only"
-
Publish GitHub Release (single select):
- Offer this only when GitHub release support is available
- Default to "Yes, publish after tag push" when the user also chose push
- If the user keeps the release local, do not create or edit a GitHub Release
Example Output Before Confirmation:
Commits created:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
Changelog preview (en):
## 1.3.0 - 2026-01-22
### Features
- Add watercolor and minimalist styles to cover-image
### Fixes
- Improve panel layout for long dialogues in comic
Release notes source: CHANGELOG.md#1.3.0
Ready to create release commit, annotated tag, and GitHub Release.在创建发布提交之前,请求用户确认:
使用AskUserQuestion工具提出三个问题:
-
版本号升级(单选):
- 展示基于步骤3分析得出的推荐版本
- 选项: 推荐版本(带标签)、其他语义化版本选项
- 示例: ,
1.2.3 → 1.3.0 (推荐),1.2.3 → 1.2.41.2.3 → 2.0.0
-
推送到远程仓库(单选):
- 选项: "是,提交后推送", "否,仅保留本地"
-
发布GitHub Release(单选):
- 仅当支持GitHub发布时提供此选项
- 当用户选择推送时,默认选项为"是,标签推送后发布"
- 如果用户选择仅保留本地,则不创建或编辑GitHub Release
确认前的示例输出:
已创建的提交:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
变更日志预览(英文):
## 1.3.0 - 2026-01-22
### Features
- Add watercolor and minimalist styles to cover-image
### Fixes
- Improve panel layout for long dialogues in comic
发布说明来源: CHANGELOG.md#1.3.0
准备创建发布提交、带注释的标签和GitHub Release。Step 9: Create Release Commit and Annotated Tag
步骤9:创建发布提交和带注释的标签
After user confirmation:
-
Stage version and changelog files:bash
git add <version-file> git add CHANGELOG*.md -
Create release commit:bash
git commit -m "chore: release v{VERSION}" -
Create annotated tag:bash
git tag -a v{VERSION} -F <release-notes-file>Ifsets.releaserc.yml, usetag.sign: truewith the same notes file.git tag -s -
Push if user confirmed (Step 8):bash
git push origin main git push origin v{VERSION}
Note: Do NOT add Co-Authored-By line. This is a release commit, not a code contribution.
用户确认后:
-
暂存版本文件和变更日志文件:bash
git add <version-file> git add CHANGELOG*.md -
创建发布提交:bash
git commit -m "chore: release v{VERSION}" -
创建带注释的标签:bash
git tag -a v{VERSION} -F <release-notes-file>如果设置了.releaserc.yml,则使用tag.sign: true并传入相同的说明文件。git tag -s -
如果用户确认则推送(步骤8):bash
git push origin main git push origin v{VERSION}
注意: 不要添加Co-Authored-By行。这是发布提交,而非代码贡献。
Step 10: Publish Release Artifacts and GitHub Release
步骤10:发布产物和GitHub Release
Project artifact publishing and GitHub Releases are separate outputs:
-
Project artifacts:
- If exists, run it once per prepared target
release.hooks.publish_artifact - Pass the same used for the tag and GitHub Release
{release_notes_file} - In dry-run mode, pass and report what would be published
{dry_run}=true
- If
-
GitHub Release:
- Run only if the user confirmed remote publishing and GitHub support is available
- Ensure the tag exists on the remote before creating the release
- Create or update using the extracted notes:
bash
if gh release view v{VERSION} >/dev/null 2>&1; then gh release edit v{VERSION} --title "v{VERSION}" --notes-file <release-notes-file> else gh release create v{VERSION} --title "v{VERSION}" --notes-file <release-notes-file> --verify-tag fi - Never inline multiline release notes into shell commands
Post-Release Output:
Release v1.3.0 created.
Commits:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
4. chore: release v1.3.0
Tag: v1.3.0
Tag type: annotated
GitHub Release: published # or "skipped/local only"
Status: Pushed to origin # or "Local only - run git push when ready"项目产物发布和GitHub Releases是独立的输出环节:
-
项目产物:
- 如果存在钩子,为每个已准备好的目标产物运行一次
release.hooks.publish_artifact - 传入与标签和GitHub Release相同的
{release_notes_file} - 在dry-run模式下,传入并报告将要发布的内容
{dry_run}=true
- 如果存在
-
GitHub Release:
- 仅当用户确认远程发布且支持GitHub时运行
- 在创建Release前确保标签已存在于远程仓库
- 使用提取的说明创建或更新Release:
bash
if gh release view v{VERSION} >/dev/null 2>&1; then gh release edit v{VERSION} --title "v{VERSION}" --notes-file <release-notes-file> else gh release create v{VERSION} --title "v{VERSION}" --notes-file <release-notes-file> --verify-tag fi - 切勿将多行发布说明内联到shell命令中
发布后输出:
已创建Release v1.3.0。
提交记录:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
4. chore: release v1.3.0
标签: v1.3.0
标签类型: 带注释的标签
GitHub Release: 已发布 # 或 "已跳过/仅本地"
状态: 已推送到origin # 或 "仅本地 - 准备就绪时运行git push"Backfill Existing GitHub Releases
回填现有GitHub Releases
Use this mode when the user asks to backfill historical releases or passes .
--backfill-releases- Do not bump versions, edit changelogs, or create release commits.
- List existing tags in version order and detect missing releases:
bash
git tag --sort=v:refname gh release view <tag> - For each tag without a GitHub Release:
- Normalize the changelog lookup by stripping the configured tag prefix, e.g. ->
v1.2.31.2.3 - Extract the matching section from ; fall back to the first matching changelog file
CHANGELOG.md - Skip or ask before publishing if no matching changelog section exists
- Create the release with:
bash
gh release create <tag> --title "<tag>" --notes-file <release-notes-file> --verify-tag
- Normalize the changelog lookup by stripping the configured tag prefix, e.g.
- Detect lightweight tags with (
git cat-file -t <tag>means lightweight,commitmeans annotated).tag - Do not rewrite public lightweight tags by default. Converting an existing remote tag to an annotated tag requires explicit user confirmation because it rewrites a published reference.
当用户要求回填历史发布记录或传入标志时使用此模式。
--backfill-releases- 不升级版本号、不编辑变更日志、不创建发布提交。
- 按版本顺序列出现有标签并检测缺失的Release:
bash
git tag --sort=v:refname gh release view <tag> - 针对每个没有GitHub Release的标签:
- 通过去除配置的标签前缀来标准化变更日志查找,例如->
v1.2.31.2.3 - 从中提取匹配的章节;如果没有则回退到第一个匹配的变更日志文件
CHANGELOG.md - 如果没有匹配的变更日志章节,跳过或在发布前询问用户
- 使用以下命令创建Release:
bash
gh release create <tag> --title "<tag>" --notes-file <release-notes-file> --verify-tag
- 通过去除配置的标签前缀来标准化变更日志查找,例如
- 通过检测轻量级标签(
git cat-file -t <tag>表示轻量级标签,commit表示带注释的标签)。tag - 默认情况下不要重写公开的轻量级标签。将现有远程标签转换为带注释的标签需要用户明确确认,因为这会重写已发布的引用。
Configuration (.releaserc.yml)
配置文件(.releaserc.yml)
Optional config file in project root to override defaults:
yaml
undefined项目根目录下的可选配置文件,用于覆盖默认设置:
yaml
undefined.releaserc.yml - Optional configuration
.releaserc.yml - 可选配置
Version file (auto-detected if not specified)
版本文件(未指定则自动检测)
version:
file: package.json
path: $.version # JSONPath for JSON, dotted path for TOML
version:
file: package.json
path: $.version # JSON文件使用JSONPath,TOML文件使用点分隔路径
Changelog files (auto-detected if not specified)
变更日志文件(未指定则自动检测)
changelog:
files:
- path: CHANGELOG.md
lang: en
- path: CHANGELOG.zh.md
lang: zh
- path: CHANGELOG.ja.md
lang: ja
Section mapping (conventional commit type → changelog section)
Use null to skip a type in changelog
sections:
feat: Features
fix: Fixes
docs: Documentation
refactor: Refactor
perf: Performance
test: Tests
chore: null
changelog:
files:
- path: CHANGELOG.md
lang: en
- path: CHANGELOG.zh.md
lang: zh
- path: CHANGELOG.ja.md
lang: ja
章节映射(约定式提交类型 → 变更日志章节)
使用null表示在变更日志中跳过该类型
sections:
feat: Features
fix: Fixes
docs: Documentation
refactor: Refactor
perf: Performance
test: Tests
chore: null
Commit message format
提交消息格式
commit:
message: "chore: release v{version}"
commit:
message: "chore: release v{version}"
Tag format
标签格式
tag:
prefix: v # Results in v1.0.0
sign: false
tag:
prefix: v # 结果为v1.0.0
sign: false
Additional files to include in release commit
发布提交中包含的额外文件
include:
- README.md
- package.json
undefinedinclude:
- README.md
- package.json
undefinedDry-Run Mode
Dry-Run模式
When is specified:
--dry-run=== DRY RUN MODE ===
Project detected:
Version file: package.json (1.2.3)
Changelogs: CHANGELOG.md (en), CHANGELOG.zh.md (zh)
Last tag: v1.2.3
Proposed version: v1.3.0
Changes grouped by skill/module:
baoyu-cover-image:
- feat: add watercolor style
- feat: add minimalist style
→ Commit: feat(baoyu-cover-image): add watercolor and minimalist styles
→ README updates: options table
baoyu-comic:
- fix: panel layout for long dialogues
→ Commit: fix(baoyu-comic): improve panel layout for long dialogues
→ No README updates
Changelog preview (en):
## 1.3.0 - 2026-01-22
### Features
- Add watercolor and minimalist styles to cover-image
### Fixes
- Improve panel layout for long dialogues in comic
Changelog preview (zh):
## 1.3.0 - 2026-01-22
### 新功能
- 为 cover-image 添加水彩和极简风格
### 修复
- 改进 comic 长对话的面板布局
Commits to create:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. chore: release v1.3.0
No changes made. Run without --dry-run to execute.当指定时:
--dry-run=== DRY RUN MODE ===
Project detected:
Version file: package.json (1.2.3)
Changelogs: CHANGELOG.md (en), CHANGELOG.zh.md (zh)
Last tag: v1.2.3
Proposed version: v1.3.0
Changes grouped by skill/module:
baoyu-cover-image:
- feat: add watercolor style
- feat: add minimalist style
→ Commit: feat(baoyu-cover-image): add watercolor and minimalist styles
→ README updates: options table
baoyu-comic:
- fix: panel layout for long dialogues
→ Commit: fix(baoyu-comic): improve panel layout for long dialogues
→ No README updates
Changelog preview (en):
## 1.3.0 - 2026-01-22
### Features
- Add watercolor and minimalist styles to cover-image
### Fixes
- Improve panel layout for long dialogues in comic
Changelog preview (zh):
## 1.3.0 - 2026-01-22
### 新功能
- 为 cover-image 添加水彩和极简风格
### 修复
- 改进 comic 长对话的面板布局
Commits to create:
1. feat(baoyu-cover-image): add watercolor and minimalist styles
2. fix(baoyu-comic): improve panel layout for long dialogues
3. chore: release v1.3.0
No changes made. Run without --dry-run to execute.Example Usage
使用示例
/release-skills # Auto-detect version bump
/release-skills --dry-run # Preview only
/release-skills --minor # Force minor bump
/release-skills --patch # Force patch bump
/release-skills --major # Force major bump (with confirmation)
/release-skills --backfill-releases # Create missing GitHub Releases for existing tags/release-skills # 自动检测版本升级
/release-skills --dry-run # 仅预览
/release-skills --minor # 强制升级次版本号
/release-skills --patch # 强制升级修订版本号
/release-skills --major # 强制升级主版本号(需确认)
/release-skills --backfill-releases # 为现有标签创建缺失的GitHub ReleasesWhen to Use
触发场景
Trigger this skill when user requests:
- "release", "发布", "create release", "new version", "新版本"
- "bump version", "update version", "更新版本"
- "prepare release"
- "release notes", "GitHub Release", "回填 Release"
- "push to remote" (with uncommitted changes)
Important: If user says "just push" or "直接 push" with uncommitted changes, STILL follow all steps above first.
当用户提出以下请求时触发此技能:
- "release", "发布", "create release", "new version", "新版本"
- "bump version", "update version", "更新版本"
- "prepare release"
- "release notes", "GitHub Release", "回填 Release"
- "push to remote"(存在未提交变更时)
重要提示: 如果用户在存在未提交变更时说“just push”或“直接 push”,仍需先执行上述所有步骤。