npx skills add ...
npx skills add jimliu/baoyu-design --skill release-skills
Universal release workflow. Auto-detects version files and changelogs. Supports Node.js, Python, Rust, Claude Plugin, GitHub Releases, annotated tags, historical release backfill, and generic projects. Use when user says "release", "发布", "new version", "bump version", "push", "推送", "release notes", "GitHub Release", or "回填 Release".
npx skills add jimliu/baoyu-design --skill release-skills
Universal release workflow supporting any project type with multi-language changelog.
When this skill prompts the user, follow this tool-selection rule (priority order):
AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.
Just run /release-skills - auto-detects your project configuration.
| Project Type | Version File | Auto-Detected |
|---|---|---|
| Node.js | package.json | ✓ |
| Python | pyproject.toml | ✓ |
| Rust | Cargo.toml | ✓ |
| Claude Plugin | marketplace.json | ✓ |
| Generic | VERSION / version.txt | ✓ |
| Flag | Description |
|---|---|
--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 |
.releaserc.yml (optional config override)
package.json (Node.js)pyproject.toml (Python)Cargo.toml (Rust)marketplace.json or .claude-plugin/marketplace.json (Claude Plugin)VERSION or version.txt (Generic)CHANGELOG*.mdHISTORY*.mdCHANGES*.mdorigin points to GitHubgh is installed and authenticatedgh release list --limit 5 when availableProject Hook Contract:
If .releaserc.yml defines release.hooks, keep the release workflow generic and delegate project-specific packaging/publishing to those hooks.
Supported hooks:
| Hook | Purpose | Expected Responsibility |
|---|---|---|
prepare_artifact | Make one target releasable | Validate the target is self-contained, sync/embed local dependencies, optionally stage extra files |
publish_artifact | 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 |
|---|---|
{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:
prepare_artifact exists, run it once per target before publish-related checks that need the final releasable target state.publish_artifact; do not inline multiline changelog text into shell commands.Language Detection Rules:
Changelog files follow the pattern CHANGELOG_{LANG}.md or CHANGELOG.{lang}.md, where {lang} / {LANG} is a language or region code.
| Pattern | Example | Language |
|---|---|---|
| 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:
Categorize 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:
BREAKING CHANGEBREAKING CHANGE:If breaking changes detected, warn user: "Breaking changes detected. Consider major version bump (--major flag)."
Rules (in priority order):
--major/--minor/--patch → Use specifiedfeat: commits present → Minor bump (1.2.x → 1.3.0)Display version change: 1.2.3 → 1.3.0
For each detected changelog file:
git log ${LAST_TAG}..HEAD --merges --pretty=format:"%H %s"gh pr view <number> --json author --jq '.author.login'gh repo view --json owner --jq '.owner.login')(by @username) to the changelog entrySection 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:
Only include sections that have changes. Omit empty sections.
Third-Party Attribution Rules:
(by @username) for contributors who are NOT the repo owner@ prefix(by @username) format, not translated)Multi-language Example:
English (CHANGELOG.md):
Chinese (CHANGELOG.zh.md):
Japanese (CHANGELOG.ja.md):
Analyze commits since last tag and group by affected skill/module:
skills/<skill-name>/* → Group under that skillExample Grouping:
For each skill/module group (in order of changes):
Check README updates needed:
README*.md for mentions of this skill/moduleStage and commit:
Commit message format:
<type>(<scope>): <description><type>: feat, fix, refactor, docs, perf, etc.<scope>: skill name or "project"<description>: Clear, meaningful description of changesExample Commits:
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) |
CHANGELOG.md## {VERSION} - {YYYY-MM-DD} section through the next ##1.2.3 and v1.2.3publish_artifactVersion Paths by File Type:
| File | Path |
|---|---|
| package.json | $.version |
| pyproject.toml | project.version |
| Cargo.toml | package.version |
| marketplace.json | $.metadata.version |
| VERSION / version.txt | Direct content |
Before creating the release commit, ask user to confirm:
Use AskUserQuestion with three questions:
Version bump (single select):
1.2.3 → 1.3.0 (Recommended), 1.2.3 → 1.2.4, 1.2.3 → 2.0.0Push to remote (single select):
Publish GitHub Release (single select):
Example Output Before Confirmation:
After user confirmation:
Stage version and changelog files:
Create release commit:
Create annotated tag:
If .releaserc.yml sets tag.sign: true, use git tag -s with the same notes file.
Push if user confirmed (Step 8):
Note: Do NOT add Co-Authored-By line. This is a release commit, not a code contribution.
Project artifact publishing and GitHub Releases are separate outputs:
Project artifacts:
release.hooks.publish_artifact exists, run it once per prepared target{release_notes_file} used for the tag and GitHub Release{dry_run}=true and report what would be publishedGitHub Release:
Post-Release Output:
Use this mode when the user asks to backfill historical releases or passes --backfill-releases.
v1.2.3 -> 1.2.3CHANGELOG.md; fall back to the first matching changelog filegit cat-file -t <tag> (commit means lightweight, tag means annotated).Optional config file in project root to override defaults:
When --dry-run is specified:
Trigger this skill when user requests:
Important: If user says "just push" or "直接 push" with uncommitted changes, STILL follow all steps above first.