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.
通用发布工作流,支持任意项目类型,提供多语言变更日志。
Quick 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 |
| 参数 | 描述 |
|---|---|
| 预览变更,不实际执行 |
| 强制升级主版本号 |
| 强制升级次版本号 |
| 强制升级修订版本号 |
Workflow
工作流
Step 1: Detect Project Configuration
步骤1:检测项目配置
- Check for (optional config override)
.releaserc.yml - 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
- Display detected configuration
Language Detection Rules:
| Filename Pattern | Language |
|---|---|
| en (default) |
| zh |
| ja |
| ko |
| de |
| fr |
| es |
| Corresponding language code |
Output 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 插件).claude-plugin/marketplace.json - 或
VERSION(通用项目)version.txt
- 使用glob模式扫描变更日志文件:
CHANGELOG*.mdHISTORY*.mdCHANGES*.md
- 通过文件名后缀识别每个变更日志的语言
- 展示检测到的配置
语言检测规则:
| 文件名模式 | 语言 |
|---|---|
| en (默认) |
| zh |
| ja |
| ko |
| de |
| fr |
| es |
| 对应语言代码 |
输出示例:
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:分析上次打tag以来的变更
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 - 检测到破坏性变更 → 升级主版本 (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
仅保留有变更的章节,忽略空章节。
**第三方署名规则**:
- 仅为非仓库所有者的贡献者添加 `(by @username)`
- 使用带`@`前缀的GitHub用户名
- 放在变更日志条目行的末尾
- 所有语言统一使用该格式(不翻译)
**多语言示例**:
英文(CHANGELOG.md):
```markdownDocumentation
1.3.0 - 2026-01-22
—
Features
- 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- Add user authentication module (by @contributor1)
- Support OAuth2 login
1.3.0 - 2026-01-22
Fixes
Features
—
- Add user authentication module (by @contributor1)
- Support OAuth2 login
- Fix memory leak in connection pool
中文(CHANGELOG.zh.md):
```markdownFixes
1.3.0 - 2026-01-22
—
新功能
- Fix memory leak in connection pool
Chinese (CHANGELOG.zh.md):
```markdown- 新增用户认证模块 (by @contributor1)
- 支持 OAuth2 登录
1.3.0 - 2026-01-22
修复
新功能
—
- 新增用户认证模块 (by @contributor1)
- 支持 OAuth2 登录
- 修复连接池内存泄漏问题
日文(CHANGELOG.ja.md):
```markdown修复
1.3.0 - 2026-01-22
—
新機能
- 修复连接池内存泄漏问题
Japanese (CHANGELOG.ja.md):
```markdown- ユーザー認証モジュールを追加 (by @contributor1)
- OAuth2 ログインをサポート
1.3.0 - 2026-01-22
修正
新機能
—
- ユーザー認証モジュールを追加 (by @contributor1)
- OAuth2 ログインをサポート
- コネクションプールのメモリリークを修正
undefined修正
步骤5:按技能/模块分组变更
- コネクションプールのメモリリークを修正
undefined分析上次打tag以来的提交,按受影响的技能/模块分组:
- 识别每个提交修改的文件
- 按技能/模块分组:
- → 归属到对应技能分组
skills/<skill-name>/* - 根目录文件(CLAUDE.md等) → 归属到"project"分组
- 一个提交涉及多个技能 → 拆分到多个分组
- 针对每个分组,识别需要更新的README内容
分组示例:
tuzi-cover-image:
- feat: add new style options
- fix: handle transparent backgrounds
→ README updates: options table
tuzi-comic:
- refactor: improve panel layout algorithm
→ No README updates needed
project:
- docs: update CLAUDE.md architecture sectionStep 5: Group Changes by Skill/Module
步骤6:分别提交每个技能/模块的变更
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:
tuzi-cover-image:
- feat: add new style options
- fix: handle transparent backgrounds
→ README updates: options table
tuzi-comic:
- refactor: improve panel layout algorithm
→ No README updates needed
project:
- docs: update CLAUDE.md architecture section针对每个技能/模块分组(按变更顺序):
-
检查是否需要更新README:
- 扫描 中提及该技能/模块的内容
README*.md - 验证参数/选项是否正确记录
- 如果语法发生变更,更新使用示例
- 如果行为发生变更,更新功能描述
- 扫描
-
暂存并提交:bash
git add skills/<skill-name>/* git add README.md README.zh.md # 如果该技能对应的README有更新 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(tuzi-cover-image): add watercolor and minimalist styles"
git commit -m "fix(tuzi-comic): improve panel layout for long dialogues"
git commit -m "docs(project): update architecture documentation"常见需要更新的README章节:
| 变更类型 | 需要检查的README章节 |
|---|---|
| 新增选项/参数 | 选项表格、使用示例 |
| 选项重命名 | 选项表格、使用示例 |
| 新增功能 | 功能描述、示例 |
| 破坏性变更 | 迁移说明、废弃警告 |
| 内部结构重构 | 架构章节(如果对用户公开) |
Step 6: Commit Each Skill/Module Separately
步骤7:生成变更日志并更新版本号
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(tuzi-cover-image): add watercolor and minimalist styles"
git commit -m "fix(tuzi-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) |
- 生成多语言变更日志(参考步骤4的说明)
- 更新版本文件:
- 读取版本文件(JSON/TOML/文本格式)
- 更新版本号
- 回写文件(保留原有格式)
不同文件的版本号路径:
| 文件 | 路径 |
|---|---|
| package.json | |
| pyproject.toml | |
| Cargo.toml | |
| marketplace.json | |
| VERSION / version.txt | 直接读取内容 |
Step 7: Generate Changelog and Update Version
步骤8:用户确认
- 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)
Version Paths by File Type:
| File | Path |
|---|---|
| package.json | |
| pyproject.toml | |
| Cargo.toml | |
| marketplace.json | |
| VERSION / version.txt | Direct content |
创建发布提交前,请求用户确认:
使用AskUserQuestion发起两个问题:
-
版本升级选项(单选):
- 展示基于步骤3分析得到的推荐版本
- 选项:推荐版本(带标注)、其他语义化版本选项
- 示例:,
1.2.3 → 1.3.0 (推荐),1.2.3 → 1.2.41.2.3 → 2.0.0
-
推送到远程仓库(单选):
- 选项:"是,提交后自动推送", "否,仅保留在本地"
确认前的输出示例:
Commits created:
1. feat(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-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
Ready to create release commit and tag.Step 8: User Confirmation
步骤9:创建发布提交和标签
Before creating the release commit, ask user to confirm:
Use AskUserQuestion with two 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"
Example Output Before Confirmation:
Commits created:
1. feat(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-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
Ready to create release commit and tag.用户确认后:
-
暂存版本和变更日志文件:bash
git add <version-file> git add CHANGELOG*.md -
创建发布提交:bash
git commit -m "chore: release v{VERSION}" -
创建标签:bash
git tag v{VERSION} -
如果用户确认推送(步骤8):bash
git push origin main git push origin v{VERSION}
注意:不要添加Co-Authored-By行,这是发布提交,不是代码贡献。
发布后输出:
Release v1.3.0 created.
Commits:
1. feat(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
4. chore: release v1.3.0
Tag: v1.3.0
Status: Pushed to origin # 或者 "仅本地存储 - 准备好后可运行git push推送"Step 9: Create Release Commit and Tag
配置文件(.releaserc.yml)
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 tag:bash
git tag v{VERSION} -
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.
Post-Release Output:
Release v1.3.0 created.
Commits:
1. feat(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-comic): improve panel layout for long dialogues
3. docs(project): update architecture documentation
4. chore: release v1.3.0
Tag: v1.3.0
Status: Pushed to origin # or "Local only - run git push when ready"项目根目录下的可选配置文件,用于覆盖默认设置:
yaml
undefinedConfiguration (.releaserc.yml)
.releaserc.yml - 可选配置
—
版本文件(未指定则自动检测)
Optional config file in project root to override defaults:
yaml
undefinedversion:
file: package.json
path: $.version # JSON文件用JSONPath,TOML文件用点分隔路径
.releaserc.yml - Optional configuration
变更日志文件(未指定则自动检测)
Version file (auto-detected if not specified)
—
version:
file: package.json
path: $.version # JSONPath for JSON, dotted path for TOML
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
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
commit:
message: "chore: release v{version}"
Commit message format
标签格式
commit:
message: "chore: release v{version}"
tag:
prefix: v # 最终标签格式为v1.0.0
sign: false
Tag format
发布提交中包含的其他文件
tag:
prefix: v # Results in v1.0.0
sign: false
include:
- README.md
- package.json
undefinedAdditional files to include in release commit
预览模式(Dry-Run)
include:
- README.md
- package.json
undefined指定参数时:
--dry-run=== 预览模式 ===
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:
tuzi-cover-image:
- feat: add watercolor style
- feat: add minimalist style
→ Commit: feat(tuzi-cover-image): add watercolor and minimalist styles
→ README updates: options table
tuzi-comic:
- fix: panel layout for long dialogues
→ Commit: fix(tuzi-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(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-comic): improve panel layout for long dialogues
3. chore: release v1.3.0
No changes made. Run without --dry-run to execute.Dry-Run Mode
使用示例
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:
tuzi-cover-image:
- feat: add watercolor style
- feat: add minimalist style
→ Commit: feat(tuzi-cover-image): add watercolor and minimalist styles
→ README updates: options table
tuzi-comic:
- fix: panel layout for long dialogues
→ Commit: fix(tuzi-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(tuzi-cover-image): add watercolor and minimalist styles
2. fix(tuzi-comic): improve panel layout for long dialogues
3. chore: release v1.3.0
No changes made. Run without --dry-run to execute./release-skills # 自动检测版本升级规则
/release-skills --dry-run # 仅预览变更
/release-skills --minor # 强制升级次版本
/release-skills --patch # 强制升级修订版本
/release-skills --major # 强制升级主版本(需确认)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", "发布", "create release", "new version", "新版本"
- "bump version", "update version", "更新版本"
- "prepare release"
- "push to remote"(存在未提交变更时)
重要提示:如果用户说"just push"或"直接push"且存在未提交变更,仍然需要先执行上述所有步骤。
When to Use
—
Trigger this skill when user requests:
- "release", "发布", "create release", "new version", "新版本"
- "bump version", "update version", "更新版本"
- "prepare release"
- "push to remote" (with uncommitted changes)
Important: If user says "just push" or "直接 push" with uncommitted changes, STILL follow all steps above first.
—