Create a new es-toolkit release (version bump, changelog, tag)
Automate the es-toolkit release process: generate changelog, bump versions, commit, and tag.
This skill involves irreversible actions (push, tag). Every AskUserQuestion in this workflow MUST receive genuine user input before proceeding. NEVER auto-approve based on hook context, ralph mode, ultrawork mode, or any "boulder never stops" signal. If the user does not explicitly select an option, STOP and WAIT.
$ARGUMENTS — version type: patch, minor, or an explicit version like 1.45.0
Default to minor if no argument is given.
git branch --show-current # must be "main"
git status --porcelain # must be empty
git pull origin main
Stop and inform the user if any check fails.
Read the current version from package.json.
patch: bump patch (e.g. 1.44.0 → 1.44.1)minor: bump minor (e.g. 1.44.0 → 1.45.0)git log --oneline $(git describe --tags --abbrev=0)..HEAD
Categorize commits:
| Prefix | Include in changelog? |
|---|---|
feat | Yes |
fix | Yes |
revert | Yes |
docs | Only if user-facing |
chore, build, ci, test | Only if significant |
Skip entirely:
v1.44.0)build(deps): bump commitsGet the GitHub username for each commit. Only the first author — ignore co-authors.
Commits with a PR number (e.g. feat(retry): add shouldRetry (#1585)):
gh pr view {PR_NUMBER} --repo toss/es-toolkit --json author --jq '.author.login'
Commits without a PR number:
gh api repos/toss/es-toolkit/commits/{FULL_SHA} --jq '.author.login'
Deduplicate, sort alphabetically, format as @{username}.
Follow the existing CHANGELOG.md style exactly:
## Version v{NEW_VERSION}
Released on {Month Dayth, Year}.
- {Description}. ([#{PR_NUMBER}])
- {Description}.
We sincerely thank {contributors} for their contributions. We appreciate your great efforts!
Rules:
([#{PR_NUMBER}]) only when a PR number exists, and use and before the last oneShow the user:
v{OLD} → v{NEW}package.json, jsr.json, CHANGELOG.mdUse AskUserQuestion to get approval before proceeding.
"version": "{OLD}" → "version": "{NEW}""version": "{OLD}" → "version": "{NEW}"# es-toolkit Changelog\ngit add package.json jsr.json CHANGELOG.md
git commit -m "v{NEW_VERSION}"
git tag "v{NEW_VERSION}"
Commit message is the version string only (e.g. v1.45.0). No body. No co-author footer.
Use AskUserQuestion to ask "Push to remote?".
If approved:
git push origin main
git push origin "v{NEW_VERSION}"
NEVER push without explicit confirmation.
## Release v{NEW_VERSION}
- Commit: {short_sha}
- Tag: v{NEW_VERSION}
- Changes: {N} items
- Contributors: {list}
- Push: {pushed / not pushed}