SkillHub

release-skills

v0.1.0

WHAT: Universal release workflow with auto-detection, multi-language changelogs, semantic versioning, and git tagging. WHEN: User wants to create a release, bump version, update changelog, push a new version, or prepare for deployment. KEYWORDS: "release", "发布", "new version", "新版本", "bump version",...

Sourced from ClawHub, Authored by wpank

Installation

Please help me install the skill `release-skills` from SkillHub official store. npx skills add wpank/release-skills

Release Skills

Universal release workflow supporting any project type with multi-language changelog generation.

Supported Projects

Type Version File Auto-Detected
Node.js package.json
Python pyproject.toml
Rust Cargo.toml
Claude Plugin marketplace.json
Generic VERSION / version.txt

Options

Flag Description
--dry-run Preview changes without executing
--major Force major version bump
--minor Force minor version bump
--patch Force patch version bump

Workflow

Step 1: Detect Configuration

  1. Check for .releaserc.yml (optional config)
  2. Auto-detect version file (priority: package.json → pyproject.toml → Cargo.toml → marketplace.json → VERSION)
  3. Scan for changelog files: CHANGELOG*.md, HISTORY*.md, CHANGES*.md
  4. Identify language of each changelog by suffix

Language Detection: | Pattern | Language | |---------|----------| | CHANGELOG.md (no suffix) | en | | CHANGELOG.zh.md / CHANGELOG_CN.md | zh | | CHANGELOG.ja.md / CHANGELOG_JP.md | ja | | CHANGELOG.{lang}.md | Corresponding language |

Output:

Project detected:
  Version file: package.json (1.2.3)
  Changelogs: CHANGELOG.md (en), CHANGELOG.zh.md (zh)

Step 2: Analyze Changes

LAST_TAG=$(git tag --sort=-v:refname | head -1)
git log ${LAST_TAG}..HEAD --oneline

Categorize by conventional commit: - feat: → Features - fix: → Fixes
- docs: → Documentation - refactor: → Refactor - perf: → Performance - chore: → Skip in changelog

Breaking Change Detection: - BREAKING CHANGE in message or body - Removed public APIs, renamed exports

Warn if breaking changes: "Consider major version bump (--major)."

Step 3: Determine Version

Priority: 1. User flag (--major/--minor/--patch) 2. BREAKING CHANGE → Major (1.x.x → 2.0.0) 3. feat: present → Minor (1.2.x → 1.3.0) 4. Otherwise → Patch (1.2.3 → 1.2.4)

Display: 1.2.3 → 1.3.0

Step 4: Generate Changelogs

For each changelog file:

  1. Identify language from filename
  2. Detect third-party contributors via merged PRs
  3. Generate content in that language:
  4. Section titles in target language
  5. Date format: YYYY-MM-DD
  6. Attribution: (by @username) for non-owner contributors
  7. Insert at file head, preserve existing content

Section Titles: | Type | en | zh | ja | |------|----|----|-----| | feat | Features | 新功能 | 新機能 | | fix | Fixes | 修复 | 修正 | | docs | Documentation | 文档 | ドキュメント | | breaking | Breaking Changes | 破坏性变更 | 破壊的変更 |

Format:

## 1.3.0 - 2026-01-22

### Features
- Add user authentication (by @contributor1)
- Support OAuth2 login

### Fixes
- Fix memory leak in connection pool

Step 5: Group by Module (Optional)

For monorepos, group commits by affected skill/module:

baoyu-cover-image:
  - feat: add new style options
  → README updates: options table

baoyu-comic:
  - refactor: improve panel layout
  → No README updates

Step 6: User Confirmation

Present: - Changelog preview - Proposed version bump - Changes summary

Ask: 1. Confirm version bump (show recommended) 2. Push to remote? (Yes/No)

Step 7: Create Release

# Stage files
git add <version-file> CHANGELOG*.md

# Commit
git commit -m "chore: release v{VERSION}"

# Tag
git tag v{VERSION}

# Push (if confirmed)
git push origin main
git push origin v{VERSION}

Output:

Release v1.3.0 created.
Tag: v1.3.0
Status: Pushed to origin

Scripts

Script Purpose
scripts/prepare_release.py Prepare release with version bump
scripts/release_notes.py Generate release notes from commits
scripts/roadmap_changelog.py Generate changelog from roadmap

Configuration (.releaserc.yml)

Optional overrides:

version:
  file: package.json
  path: $.version

changelog:
  files:
    - path: CHANGELOG.md
      lang: en
    - path: CHANGELOG.zh.md
      lang: zh

commit:
  message: "chore: release v{version}"

tag:
  prefix: v

Dry-Run Mode

With --dry-run: - Show all proposed changes - Preview changelog entries - List commits to create - No actual changes made


Version Paths

File Path
package.json $.version
pyproject.toml project.version
Cargo.toml package.version
marketplace.json $.metadata.version
VERSION Direct content

Quality Criteria

Good releases: - Clear changelog entries describing user-facing changes - Proper contributor attribution - Consistent multi-language content - No orphaned tags (always with commit) - Version bump matches change significance


NEVER

  • Force push to main/master
  • Skip user confirmation before push
  • Create tags without commits
  • Include internal/chore changes in user-facing changelog
  • Push without explicit user consent
  • Add Co-Authored-By to release commits (they're automated)