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", "update version", "更新版本", "push", "推送", "create release", "prepare release", "tag version"

0· 830· 1 versions· 11 current· 12 all-time· Updated 7h ago· MIT-0

Install

openclaw skills install release-skills

Release Skills

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

Supported Projects

TypeVersion FileAuto-Detected
Node.jspackage.json
Pythonpyproject.toml
RustCargo.toml
Claude Pluginmarketplace.json
GenericVERSION / version.txt

Options

FlagDescription
--dry-runPreview changes without executing
--majorForce major version bump
--minorForce minor version bump
--patchForce 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:

PatternLanguage
CHANGELOG.md (no suffix)en
CHANGELOG.zh.md / CHANGELOG_CN.mdzh
CHANGELOG.ja.md / CHANGELOG_JP.mdja
CHANGELOG.{lang}.mdCorresponding 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:
    • Section titles in target language
    • Date format: YYYY-MM-DD
    • Attribution: (by @username) for non-owner contributors
  4. Insert at file head, preserve existing content

Section Titles:

Typeenzhja
featFeatures新功能新機能
fixFixes修复修正
docsDocumentation文档ドキュメント
breakingBreaking 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

ScriptPurpose
scripts/prepare_release.pyPrepare release with version bump
scripts/release_notes.pyGenerate release notes from commits
scripts/roadmap_changelog.pyGenerate 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

FilePath
package.json$.version
pyproject.tomlproject.version
Cargo.tomlpackage.version
marketplace.json$.metadata.version
VERSIONDirect 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)

Version tags

latestvk9762rerawejp0h054evf0q20580w0w5