release-skills

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Release 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):
  1. Prefer built-in user-input tools exposed by the current agent runtime — e.g.,
    AskUserQuestion
    ,
    request_user_input
    ,
    clarify
    ,
    ask_user
    , or any equivalent.
  2. 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.
  3. 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
AskUserQuestion
references below are examples — substitute the local equivalent in other runtimes.
当此技能需要提示用户时,请遵循以下工具选择规则(优先级顺序):
  1. 优先使用当前Agent运行时提供的内置用户输入工具 —— 例如
    AskUserQuestion
    request_user_input
    clarify
    ask_user
    或任何等效工具。
  2. 备选方案:如果没有此类工具,则输出编号的纯文本消息,并要求用户回复所选编号/答案以回答每个问题。
  3. 批量处理:如果工具支持单次调用包含多个问题,则将所有适用问题合并为单次调用;如果仅支持单个问题,则按优先级顺序逐个提问。
以下具体的
AskUserQuestion
引用仅为示例 —— 在其他运行时中请替换为本地等效工具。

Quick Start

快速开始

Just run
/release-skills
- auto-detects your project configuration.
只需运行
/release-skills
—— 系统会自动检测你的项目配置。

Supported Projects

支持的项目类型

Project TypeVersion FileAuto-Detected
Node.jspackage.json
Pythonpyproject.toml
RustCargo.toml
Claude Pluginmarketplace.json
GenericVERSION / version.txt
项目类型版本文件是否自动检测
Node.jspackage.json
Pythonpyproject.toml
RustCargo.toml
Claude Pluginmarketplace.json
通用项目VERSION / version.txt

Options

选项参数

FlagDescription
--dry-run
Preview changes without executing
--major
Force major version bump
--minor
Force minor version bump
--patch
Force patch version bump
--backfill-releases
Create missing GitHub Releases for existing tags from changelog sections
标志描述
--dry-run
预览变更但不执行实际操作
--major
强制升级主版本号
--minor
强制升级次版本号
--patch
强制升级修订版本号
--backfill-releases
从变更日志章节为现有标签创建缺失的GitHub Releases

Workflow

工作流

Step 1: Detect Project Configuration

步骤1:检测项目配置

  1. Check for
    .releaserc.yml
    (optional config override)
    • If present, inspect whether it defines release hooks
  2. Auto-detect version file by scanning (priority order):
    • package.json
      (Node.js)
    • pyproject.toml
      (Python)
    • Cargo.toml
      (Rust)
    • marketplace.json
      or
      .claude-plugin/marketplace.json
      (Claude Plugin)
    • VERSION
      or
      version.txt
      (Generic)
  3. Scan for changelog files using glob patterns:
    • CHANGELOG*.md
    • HISTORY*.md
    • CHANGES*.md
  4. Identify language of each changelog by filename suffix
  5. Detect GitHub release support:
    • Check whether
      origin
      points to GitHub
    • Check whether
      gh
      is installed and authenticated
    • Check existing releases with
      gh release list --limit 5
      when available
  6. Display detected configuration
Project Hook Contract:
If
.releaserc.yml
defines
release.hooks
, keep the release workflow generic and delegate project-specific packaging/publishing to those hooks.
Supported hooks:
HookPurposeExpected Responsibility
prepare_artifact
Make one target releasableValidate the target is self-contained, sync/embed local dependencies, optionally stage extra files
publish_artifact
Publish one releasable targetUpload the prepared target (or a staged directory if the project uses one), attach version/changelog/tags
Supported placeholders:
PlaceholderMeaning
{project_root}
Absolute path to repository root
{target}
Absolute path to the module/skill being released
{artifact_dir}
Absolute path to a temporary staging directory for this target, when the project uses one
{version}
Version selected by the release workflow
{dry_run}
true
or
false
{release_notes_file}
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
    prepare_artifact
    exists, run it once per target before publish-related checks that need the final releasable target state.
  • Write release notes to a temp file and pass that file path to
    publish_artifact
    ; do not inline multiline changelog text into shell commands.
  • If hooks are absent, fall back to the default project-agnostic release workflow.
Language Detection Rules:
Changelog files follow the pattern
CHANGELOG_{LANG}.md
or
CHANGELOG.{lang}.md
, where
{lang}
/
{LANG}
is a language or region code.
PatternExampleLanguage
No suffix
CHANGELOG.md
en (default)
_{LANG}
(uppercase)
CHANGELOG_CN.md
,
CHANGELOG_JP.md
Corresponding language
.{lang}
(lowercase)
CHANGELOG.zh.md
,
CHANGELOG.ja.md
Corresponding language
.{lang-region}
CHANGELOG.zh-CN.md
Corresponding region variant
Common language codes:
zh
(Chinese),
ja
(Japanese),
ko
(Korean),
de
(German),
fr
(French),
es
(Spanish).
Output Example:
Project detected:
  Version file: package.json (1.2.3)
  Changelogs:
    - CHANGELOG.md (en)
    - CHANGELOG.zh.md (zh)
    - CHANGELOG.ja.md (ja)
  1. 检查是否存在
    .releaserc.yml
    (可选的配置覆盖文件)
    • 如果存在,检查其是否定义了发布钩子
  2. 通过扫描自动检测版本文件(优先级顺序):
    • package.json
      (Node.js项目)
    • pyproject.toml
      (Python项目)
    • Cargo.toml
      (Rust项目)
    • marketplace.json
      .claude-plugin/marketplace.json
      (Claude Plugin项目)
    • VERSION
      version.txt
      (通用项目)
  3. 使用glob模式扫描变更日志文件:
    • CHANGELOG*.md
    • HISTORY*.md
    • CHANGES*.md
  4. 通过文件名后缀识别每个变更日志的语言
  5. 检测GitHub发布支持:
    • 检查
      origin
      是否指向GitHub仓库
    • 检查
      gh
      工具是否已安装并完成认证
    • 若可用,通过
      gh release list --limit 5
      检查现有发布记录
  6. 展示检测到的配置信息
项目钩子约定:
如果
.releaserc.yml
定义了
release.hooks
,请保持发布工作流的通用性,并将项目特定的打包/发布操作委托给这些钩子。
支持的钩子:
钩子用途预期职责
prepare_artifact
准备可发布的目标产物验证目标产物是否独立完整,同步/嵌入本地依赖,可选地暂存额外文件
publish_artifact
发布可发布的目标产物上传已准备好的目标产物(或项目使用的暂存目录),附加版本/变更日志/标签信息
支持的占位符:
占位符含义
{project_root}
仓库根目录的绝对路径
{target}
待发布模块/技能的绝对路径
{artifact_dir}
该目标产物的临时暂存目录绝对路径(当项目使用暂存目录时)
{version}
发布工作流选定的版本号
{dry_run}
true
false
{release_notes_file}
包含发布说明/变更日志文本的UTF-8文件绝对路径
执行规则:
  • 保持技能的通用性:不要将注册表/包管理器/项目布局的细节硬编码到此SKILL中。
  • 如果存在
    prepare_artifact
    钩子,在执行需要最终可发布目标状态的发布相关检查之前,为每个目标产物运行一次该钩子。
  • 将发布说明写入临时文件,并将该文件路径传递给
    publish_artifact
    ;不要将多行变更日志文本内联到shell命令中。
  • 如果没有钩子,则回退到默认的与项目无关的发布工作流。
语言检测规则:
变更日志文件遵循
CHANGELOG_{LANG}.md
CHANGELOG.{lang}.md
的模式,其中
{lang}
/
{LANG}
是语言或地区代码。
模式示例语言
无后缀
CHANGELOG.md
en(默认)
_{LANG}
(大写)
CHANGELOG_CN.md
,
CHANGELOG_JP.md
对应语言
.{lang}
(小写)
CHANGELOG.zh.md
,
CHANGELOG.ja.md
对应语言
.{lang-region}
CHANGELOG.zh-CN.md
对应地区变体
常见语言代码:
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:分析上次标签以来的变更

bash
LAST_TAG=$(git tag --sort=-v:refname | head -1)
git log ${LAST_TAG}..HEAD --oneline
git diff ${LAST_TAG}..HEAD --stat
Categorize by conventional commit types:
TypeDescription
featNew features
fixBug fixes
docsDocumentation
refactorCode refactoring
perfPerformance improvements
testTest changes
styleFormatting, styling
choreMaintenance (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新功能
fixBug修复
docs文档更新
refactor代码重构
perf性能优化
test测试变更
style格式、样式调整
chore维护工作(变更日志中跳过)
破坏性变更检测:
  • 提交消息以
    BREAKING CHANGE
    开头
  • 提交正文/页脚包含
    BREAKING CHANGE:
  • 移除了公共API、重命名导出、更改了接口
如果检测到破坏性变更,向用户发出警告:"检测到破坏性变更。建议升级主版本号(使用--major标志)。"

Step 3: Determine Version Bump

步骤3:确定版本号升级规则

Rules (in priority order):
  1. User flag
    --major/--minor/--patch
    → Use specified
  2. BREAKING CHANGE detected → Major bump (1.x.x → 2.0.0)
  3. feat:
    commits present → Minor bump (1.2.x → 1.3.0)
  4. Otherwise → Patch bump (1.2.3 → 1.2.4)
Display version change:
1.2.3 → 1.3.0
规则(优先级顺序):
  1. 用户指定的
    --major/--minor/--patch
    标志 → 使用指定的升级类型
  2. 检测到BREAKING CHANGE → 升级主版本号(1.x.x → 2.0.0)
  3. 存在
    feat:
    类型的提交 → 升级次版本号(1.2.x → 1.3.0)
  4. 其他情况 → 升级修订版本号(1.2.3 → 1.2.4)
展示版本变更:
1.2.3 → 1.3.0

Step 4: Generate Multi-language Changelogs

步骤4:生成多语言变更日志

For each detected changelog file:
  1. Identify language from filename suffix
  2. 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
  3. 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
      (by @username)
      to the changelog entry
  4. Insert at file head (preserve existing content)
Section Title Translations (built-in):
Typeenzhjakodefres
featFeatures新功能新機能새로운 기능FunktionenFonctionnalitésCaracterísticas
fixFixes修复修正수정FehlerbehebungenCorrectionsCorrecciones
docsDocumentation文档ドキュメント문서DokumentationDocumentationDocumentación
refactorRefactor重构リファクタリング리팩토링RefactoringRefactorisationRefactorización
perfPerformance性能优化パフォーマンス성능LeistungPerformanceRendimiento
breakingBreaking Changes破坏性变更破壊的変更주요 변경사항Breaking ChangesChangements majeursCambios importantes
Changelog Format:
markdown
undefined
针对每个检测到的变更日志文件:
  1. 识别语言:通过文件名后缀确定
  2. 检测第三方贡献者:
    • 检查合并提交:
      git log ${LAST_TAG}..HEAD --merges --pretty=format:"%H %s"
    • 对于每个合并的PR,通过
      gh pr view <number> --json author --jq '.author.login'
      识别PR作者
    • 与仓库所有者对比(
      gh repo view --json owner --jq '.owner.login'
    • 如果PR作者≠仓库所有者 → 标记为第三方贡献者
  3. 生成对应语言的内容:
    • 章节标题使用目标语言
    • 变更描述自然使用目标语言撰写(而非翻译)
    • 日期格式: YYYY-MM-DD(通用格式)
    • 第三方贡献: 在变更日志条目末尾添加贡献者署名
      (by @username)
  4. 插入到文件头部(保留现有内容)
章节标题翻译(内置):
类型enzhjakodefres
featFeatures新功能新機能새로운 기능FunktionenFonctionnalitésCaracterísticas
fixFixes修复修正수정FehlerbehebungenCorrectionsCorrecciones
docsDocumentation文档ドキュメント문서DokumentationDocumentationDocumentación
refactorRefactor重构リファクタリング리팩토링RefactoringRefactorisationRefactorización
perfPerformance性能优化パフォーマンス성능LeistungPerformanceRendimiento
breakingBreaking Changes破坏性变更破壊的変更주요 변경사항Breaking ChangesChangements majeursCambios 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):
```markdown

1.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):
```markdown

1.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):
```markdown

1.3.0 - 2026-01-22

1.3.0 - 2026-01-22

新機能

新機能

  • ユーザー認証モジュールを追加 (by @contributor1)
  • OAuth2 ログインをサポート
  • ユーザー認証モジュールを追加 (by @contributor1)
  • OAuth2 ログインをサポート

修正

修正

  • コネクションプールのメモリリークを修正
undefined
  • コネクションプールのメモリリークを修正
undefined

Step 5: Group Changes by Skill/Module

步骤5:按技能/模块分组变更

Analyze commits since last tag and group by affected skill/module:
  1. Identify changed files per commit
  2. Group by skill/module:
    • skills/<skill-name>/*
      → Group under that skill
    • Root files (CLAUDE.md, etc.) → Group as "project"
    • Multiple skills in one commit → Split into multiple groups
  3. 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
分析上次标签以来的提交,并按受影响的技能/模块分组:
  1. 识别每个提交中变更的文件
  2. 按技能/模块分组:
    • skills/<skill-name>/*
      → 归到对应技能下
    • 根目录文件(如CLAUDE.md等)→ 归为“项目”组
    • 单个提交涉及多个技能 → 拆分为多个组
  3. 针对每个组,确定是否需要更新相关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 section

Step 6: Commit Each Skill/Module Separately

步骤6:单独提交每个技能/模块的变更

For each skill/module group (in order of changes):
  1. Check README updates needed:
    • Scan
      README*.md
      for mentions of this skill/module
    • Verify options/flags documented correctly
    • Update usage examples if syntax changed
    • Update feature descriptions if behavior changed
  2. 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>"
  3. Commit message format:
    • Use conventional commit format:
      <type>(<scope>): <description>
    • <type>
      : feat, fix, refactor, docs, perf, etc.
    • <scope>
      : skill name or "project"
    • <description>
      : Clear, meaningful description of changes
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 TypeREADME Section to Check
New options/flagsOptions table, usage examples
Renamed optionsOptions table, usage examples
New featuresFeature description, examples
Breaking changesMigration notes, deprecation warnings
Restructured internalsArchitecture section (if exposed to users)
针对每个技能/模块组(按变更顺序):
  1. 检查是否需要更新README:
    • 扫描
      README*.md
      中提及该技能/模块的内容
    • 验证选项/标志是否已正确记录
    • 如果语法变更,更新使用示例
    • 如果行为变更,更新功能描述
  2. 暂存并提交:
    bash
    git add skills/<skill-name>/*
    git add README.md README.zh.md  # 如果为该技能更新了这些文件
    git commit -m "<type>(<skill-name>): <meaningful description>"
  3. 提交消息格式:
    • 使用约定式提交格式:
      <type>(<scope>): <description>
    • <type>
      : feat、fix、refactor、docs、perf等
    • <scope>
      : 技能名称或“project”
    • <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:生成变更日志并更新版本号

  1. Generate multi-language changelogs (as described in Step 4)
  2. Update version file:
    • Read version file (JSON/TOML/text)
    • Update version number
    • Write back (preserve formatting)
  3. 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
      ## {VERSION} - {YYYY-MM-DD}
      section through the next
      ##
    • Match both plain version and tag-prefixed headings when needed, e.g.
      1.2.3
      and
      v1.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
Version Paths by File Type:
FilePath
package.json
$.version
pyproject.toml
project.version
Cargo.toml
package.version
marketplace.json
$.metadata.version
VERSION / version.txtDirect content
  1. 生成多语言变更日志(如步骤4所述)
  2. 更新版本文件:
    • 读取版本文件(JSON/TOML/文本格式)
    • 更新版本号
    • 写回文件(保留原有格式)
  3. 创建发布说明文件:
    • 优先使用
      CHANGELOG.md
      中的新版本章节
    • 如果没有英文/默认变更日志,则使用第一个检测到的变更日志
    • 仅提取从
      ## {VERSION} - {YYYY-MM-DD}
      章节到下一个
      ##
      的内容
    • 必要时匹配纯版本号和带标签前缀的标题,例如
      1.2.3
      v1.2.3
    • 将破坏性变更放在靠近顶部的位置;必要时在其他章节前添加简短高亮
    • 将说明写入UTF-8临时文件,并复用该文件用于带注释的标签消息、GitHub Releases和
      publish_artifact
      钩子
    • 在正常模式下,如果找不到说明内容,应停止操作,而不是创建空标签或GitHub Release
不同文件类型的版本路径:
文件路径
package.json
$.version
pyproject.toml
project.version
Cargo.toml
package.version
marketplace.json
$.metadata.version
VERSION / version.txt直接内容

Step 8: User Confirmation

步骤8:用户确认

Before creating the release commit, ask user to confirm:
Use AskUserQuestion with three questions:
  1. 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.4
      ,
      1.2.3 → 2.0.0
  2. Push to remote (single select):
    • Options: "Yes, push after commit", "No, keep local only"
  3. 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工具提出三个问题:
  1. 版本号升级(单选):
    • 展示基于步骤3分析得出的推荐版本
    • 选项: 推荐版本(带标签)、其他语义化版本选项
    • 示例:
      1.2.3 → 1.3.0 (推荐)
      ,
      1.2.3 → 1.2.4
      ,
      1.2.3 → 2.0.0
  2. 推送到远程仓库(单选):
    • 选项: "是,提交后推送", "否,仅保留本地"
  3. 发布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:
  1. Stage version and changelog files:
    bash
    git add <version-file>
    git add CHANGELOG*.md
  2. Create release commit:
    bash
    git commit -m "chore: release v{VERSION}"
  3. Create annotated tag:
    bash
    git tag -a v{VERSION} -F <release-notes-file>
    If
    .releaserc.yml
    sets
    tag.sign: true
    , use
    git tag -s
    with the same notes file.
  4. 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.
用户确认后:
  1. 暂存版本文件和变更日志文件:
    bash
    git add <version-file>
    git add CHANGELOG*.md
  2. 创建发布提交:
    bash
    git commit -m "chore: release v{VERSION}"
  3. 创建带注释的标签:
    bash
    git tag -a v{VERSION} -F <release-notes-file>
    如果
    .releaserc.yml
    设置了
    tag.sign: true
    ,则使用
    git tag -s
    并传入相同的说明文件。
  4. 如果用户确认则推送(步骤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:
  1. Project artifacts:
    • If
      release.hooks.publish_artifact
      exists, run it once per prepared target
    • Pass the same
      {release_notes_file}
      used for the tag and GitHub Release
    • In dry-run mode, pass
      {dry_run}=true
      and report what would be published
  2. 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是独立的输出环节:
  1. 项目产物:
    • 如果存在
      release.hooks.publish_artifact
      钩子,为每个已准备好的目标产物运行一次
    • 传入与标签和GitHub Release相同的
      {release_notes_file}
    • 在dry-run模式下,传入
      {dry_run}=true
      并报告将要发布的内容
  2. 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
.
  1. Do not bump versions, edit changelogs, or create release commits.
  2. List existing tags in version order and detect missing releases:
    bash
    git tag --sort=v:refname
    gh release view <tag>
  3. For each tag without a GitHub Release:
    • Normalize the changelog lookup by stripping the configured tag prefix, e.g.
      v1.2.3
      ->
      1.2.3
    • Extract the matching section from
      CHANGELOG.md
      ; fall back to the first matching changelog file
    • 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
  4. Detect lightweight tags with
    git cat-file -t <tag>
    (
    commit
    means lightweight,
    tag
    means annotated).
  5. 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
标志时使用此模式。
  1. 不升级版本号、不编辑变更日志、不创建发布提交。
  2. 按版本顺序列出现有标签并检测缺失的Release:
    bash
    git tag --sort=v:refname
    gh release view <tag>
  3. 针对每个没有GitHub Release的标签:
    • 通过去除配置的标签前缀来标准化变更日志查找,例如
      v1.2.3
      ->
      1.2.3
    • CHANGELOG.md
      中提取匹配的章节;如果没有则回退到第一个匹配的变更日志文件
    • 如果没有匹配的变更日志章节,跳过或在发布前询问用户
    • 使用以下命令创建Release:
      bash
      gh release create <tag> --title "<tag>" --notes-file <release-notes-file> --verify-tag
  4. 通过
    git cat-file -t <tag>
    检测轻量级标签(
    commit
    表示轻量级标签,
    tag
    表示带注释的标签)。
  5. 默认情况下不要重写公开的轻量级标签。将现有远程标签转换为带注释的标签需要用户明确确认,因为这会重写已发布的引用。

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
undefined
include:
  • README.md
  • package.json
undefined

Dry-Run Mode

Dry-Run模式

When
--dry-run
is specified:
=== 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 Releases

When 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”,仍需先执行上述所有步骤。