원클릭으로
release
Prepare a Typed-Value release — analyze commits, generate release notes, update version references, and create PR
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Prepare a Typed-Value release — analyze commits, generate release notes, update version references, and create PR
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | release |
| description | Prepare a Typed-Value release — analyze commits, generate release notes, update version references, and create PR |
| disable-model-invocation | true |
| argument-hint | [version] |
You are preparing a release for the Typed-Value library. Follow these 8 steps in order. Do NOT skip any step. Ask for confirmation before proceeding to Step 8.
Parse version argument: The user may provide a version (e.g., /release 1.2.0).
MAJOR.MINOR.PATCH or with pre-release suffix like -rc.1) and continue.git describe --tags --abbrev=0v prefix).AskUserQuestion tool to present an interactive picker:
X.Y.Z+1 — description: "Patch (bug fixes, dependency updates)"X.Y+1.0 — description: "Minor (new features, backwards-compatible)"X+1.0.0 — description: "Major (breaking changes)"2.0.0-rc.1).Check current branch: Must be main. If not, abort with a message.
git branch --show-current
Check for clean working tree: No uncommitted changes allowed (ignore untracked files).
git status --porcelain
Check that the tag does not already exist:
git tag -l "v{VERSION}"
Check that the release branch does not already exist:
git branch -a | grep "release/v{VERSION}"
Fetch latest from remote:
git fetch origin main --tags
Check local is up to date with remote:
git diff origin/main --stat
If any check fails, stop and explain what needs to be fixed.
Find the last release tag:
git describe --tags --abbrev=0
List all commits since that tag:
git log {LAST_TAG}..HEAD --oneline --no-merges
Also list merge commits (for PR context):
git log {LAST_TAG}..HEAD --oneline --merges
Categorize commits into:
feat: or new functionality)fix: or bug corrections)chore(deps) or dependency bumps)docs: or documentation changes)refactor: or code improvements)Display the categorized summary to the user.
Set these three variables:
| Variable | Value | Example |
|---|---|---|
NEW_VERSION | The version being released | 1.2.0 |
OLD_VERSION | The version from the last tag (without v prefix) | 1.1.0 |
NEXT_SNAPSHOT | Next development snapshot: bump patch +1, add -SNAPSHOT | 1.2.1-SNAPSHOT |
NEXT_SNAPSHOT logic:
1.2.0 → 1.2.1-SNAPSHOT2.0.0 → 2.0.1-SNAPSHOT1.2.0-rc.1 → 1.2.0-SNAPSHOT (strip pre-release, keep version)Display all three values for confirmation.
Create file: release-notes/RELEASE_NOTES_v{NEW_VERSION}.md
Before writing, read existing release notes to calibrate tone and format:
release-notes/RELEASE_NOTES_v1.0.1.md (concise, ~35 lines)release-notes/RELEASE_NOTES_v1.1.0.md (detailed, ~200 lines)Required sections (adapt depth based on release type):
# Typed-Value v{NEW_VERSION}{NEW_VERSION}
implementation("com.ekino.oss:typed-value-core:{NEW_VERSION}")
Include all published modules for feature releases; core + common ones for patches.https://github.com/ekino/typed-value/compare/v{OLD_VERSION}...v{NEW_VERSION}Update exactly 4 files. Do NOT modify any other files.
release-notes/RELEASE_NOTES_v{NEW_VERSION}.mdAlready created in Step 4. No further changes needed.
README.mdReplace all occurrences of the old version in dependency coordinates:
com.ekino.oss:typed-value-core:{OLD_VERSION} → com.ekino.oss:typed-value-core:{NEW_VERSION}
com.ekino.oss:typed-value-jackson:{OLD_VERSION} → com.ekino.oss:typed-value-jackson:{NEW_VERSION}
com.ekino.oss:typed-value-spring:{OLD_VERSION} → com.ekino.oss:typed-value-spring:{NEW_VERSION}
Search for all :{OLD_VERSION} patterns and replace with :{NEW_VERSION}.
build.gradle.ktsUpdate the SNAPSHOT fallback version (line ~50):
// Before:
else -> project.findProperty("localVersion") as String? ?: "{OLD_VERSION}-SNAPSHOT"
// After:
else -> project.findProperty("localVersion") as String? ?: "{NEXT_SNAPSHOT}"
docs/.vitepress/versions.data.tsUpdate the typedValue version. Do NOT change the kotlin version:
// Before:
typedValue: '{OLD_VERSION}',
// After:
typedValue: '{NEW_VERSION}',
After updating, display a summary of all changes.
Run formatting and full build:
./gradlew spotlessApply
./gradlew clean build
If spotlessApply modifies files, that's normal — those formatting changes will be included in the commit.
If build fails, stop and investigate. Do NOT proceed with a broken build.
Present a summary to the user:
Release Summary for Typed-Value v{NEW_VERSION}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Version : {OLD_VERSION} → {NEW_VERSION}
Snapshot: {NEXT_SNAPSHOT}
Files modified (4):
1. release-notes/RELEASE_NOTES_v{NEW_VERSION}.md (new)
2. README.md (version bump)
3. build.gradle.kts (snapshot bump)
4. docs/.vitepress/versions.data.ts (version bump)
Build: ✅ Passed
Show git diff --stat and offer to show the full diff if requested.
Ask the user to confirm before proceeding to Step 8.
Create release branch:
git checkout -b release/v{NEW_VERSION}
Stage all changed files:
git add release-notes/RELEASE_NOTES_v{NEW_VERSION}.md README.md build.gradle.kts docs/.vitepress/versions.data.ts
Commit:
git commit -m "chore(release): prepare v{NEW_VERSION}"
Push branch:
git push -u origin release/v{NEW_VERSION}
Create PR:
gh pr create \
--title "chore(release): prepare v{NEW_VERSION}" \
--body "$(cat <<'EOF'
## Release v{NEW_VERSION}
### Changes
- Updated version references to `{NEW_VERSION}`
- Updated development snapshot to `{NEXT_SNAPSHOT}`
- Added release notes
### Files Modified
1. `release-notes/RELEASE_NOTES_v{NEW_VERSION}.md` — new release notes
2. `README.md` — dependency coordinates updated
3. `build.gradle.kts` — snapshot version bumped
4. `docs/.vitepress/versions.data.ts` — docs version updated
### Post-Merge Steps
After merging this PR, create and push the release tag to trigger CI publishing:
```bash
git checkout main && git pull
git tag v{NEW_VERSION} && git push origin v{NEW_VERSION}
This will trigger the publish.yml workflow which:
Monitor: GitHub Actions EOF )"
Display the PR URL and remind the user of the post-merge steps:
✅ PR created: {PR_URL}
After the PR is merged, run:
git checkout main && git pull
git tag v{NEW_VERSION} && git push origin v{NEW_VERSION}
Then monitor:
- GitHub Actions: https://github.com/ekino/typed-value/actions
- Maven Central: https://central.sonatype.com/search?q=com.ekino.oss.typed-value
- GitHub Releases: https://github.com/ekino/typed-value/releases