원클릭으로
release
Publish a new app release with versioning, changelog, and git tagging. Triggered by "publish a new release" or similar requests.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Publish a new app release with versioning, changelog, and git tagging. Triggered by "publish a new release" or similar requests.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | release |
| description | Publish a new app release with versioning, changelog, and git tagging. Triggered by "publish a new release" or similar requests. |
This skill guides you through publishing a new release of the app. It handles version bumping, changelog generation, and git tagging/pushing.
package.json version fieldCHANGELOG.md in repo root, using Keep a Changelog formatv9.9.0) triggers the CI pipeline to build and create a GitLab releaseFollow these steps in order. Do NOT skip any step.
Before writing any release notes, you MUST read these pages to understand the product context, voice, and values:
These pages define what Shakespeare is, how it's positioned, and the tone of voice to use. Changelog entries should reflect this identity: creative, empowering, user-focused, emphasizing building and self-expression. Avoid dry technical jargon -- write for people who use the app, not developers.
# Ensure working directory is clean
git status
# Ensure we're on main branch
git branch --show-current
# Run the full test suite
npm run test
main, warn the user and ask whether to proceed.# Get the current version from package.json
node -p "require('./package.json').version"
# Get commits since the last version tag
git log v$(node -p "require('./package.json').version")..HEAD --oneline
Analyze the commits from Step 3 and determine the appropriate bump level:
| Bump | When to use | Example |
|---|---|---|
| Patch | Bug fixes, minor tweaks, dependency updates, small UI polish, internal tooling, developer-facing pages, CI/build changes, settings/admin screens | 9.9.0 -> 9.9.1 |
| Minor | Significant new product features that change how users interact with the app -- the kind of thing you'd highlight in an app store update or announce on social media (e.g., new template support, new AI features, new deployment options, major UI overhaul) | 9.9.1 -> 9.10.0 |
| Major | ONLY when the user explicitly instructs a major bump | 9.10.0 -> 10.0.0 |
Default to patch when in doubt. The bar for a minor bump is high -- ask yourself: "Would a regular user notice and care about this change?" If the answer is no, it's a patch. Internal pages (changelog, settings, about screens), infrastructure improvements, CI fixes, and developer tooling are always patch-level regardless of whether they technically add a new page or screen.
When bumping minor, reset patch to 0 (e.g., 9.9.3 -> 9.10.0). When bumping major, reset minor and patch to 0 (e.g., 9.3.1 -> 10.0.0).
Prepend a new section to CHANGELOG.md directly below the # Changelog heading.
Format:
## [X.Y.Z] - YYYY-MM-DD
### Added
- Description of new features
### Changed
- Description of changes to existing features
### Fixed
- Description of bug fixes
### Removed
- Description of removed features
Rules:
package.jsonUpdate the version field:
"version": "X.Y.Z"
The changelog is served at runtime by the app from the public/ directory. After updating CHANGELOG.md, copy it:
cp CHANGELOG.md public/CHANGELOG.md
Before committing the release, pull the latest changes from the remote to ensure the release commit sits on top of the latest code. This must happen before committing and tagging.
git pull origin main
CRITICAL: Always use git pull (merge), NEVER git pull --rebase. Rebasing rewrites commit hashes, which would orphan any tag pointing to the original commit. Since version tags are often protected on the remote and cannot be deleted or updated, a broken tag cannot be easily fixed.
If there are merge conflicts with the pulled changes, resolve them before proceeding.
git add package.json CHANGELOG.md public/CHANGELOG.md
git commit -m "release: vX.Y.Z"
git tag vX.Y.Z
The tag format is v followed by the version with no suffix. Examples: v9.9.0, v9.10.0, v10.0.0.
git push origin main vX.Y.Z
CRITICAL: Push only the specific tag being released. NEVER use --tags -- that pushes ALL local tags, including stale or deleted ones.
After pushing, inform the user:
| File | What to update | Notes |
|---|---|---|
package.json | version field | Source of truth for the version |
CHANGELOG.md | Prepend new section | User-facing changelog |
public/CHANGELOG.md | Copy from CHANGELOG.md | Served at runtime by the app |
If git log shows no commits since the last tag, there genuinely is nothing to release.
Fix the failing tests before proceeding. The release must not contain broken code.
If you tagged the wrong version and haven't pushed yet:
git tag -d vX.Y.Z # delete the local tag
git reset --soft HEAD~1 # undo the commit but keep changes staged
Then redo steps 4-10 with the correct version.
This requires manual intervention. Inform the user and suggest they delete the tag and release from GitLab manually, then re-run the release process.