Release Skill
Tag and push a new semver release for the grpc-dispatcher-go library.
Steps
Detect upstream remote — find the remote that points to
kubetail-org/grpc-dispatcher-go:git remote -v | grep 'kubetail-org/grpc-dispatcher-go' | head -1 | awk '{print $1}'Store the result as
{upstream}. If no remote matches, stop and ask the user which remote to use.Verify branch and state:
- Run
git fetch {upstream}to update remote refs - Run
git status -unoto confirm working tree is clean - Run
git rev-parse HEADandgit rev-parse {upstream}/mainto confirm HEAD is at{upstream}/main
If working tree is dirty or HEAD is not at
{upstream}/main, stop and ask the user to resolve before continuing.- Run
Find latest tag:
git tag --list "v*" | sort -V | tail -1Check for changes since latest tag — run:
git log {latest-tag}..HEAD --oneline- If no commits exist since the latest tag, stop (no release needed) and tell the user.
Determine new version using semver — analyze commits:
- Patch (
Z+1): bug fixes, tests, docs, refactors, chores, ci changes - Minor (
Y+1, resetZ=0): new backwards-compatible features - Major (
X+1, resetY=0,Z=0): breaking changes
Use conventional commit prefixes as hints (
fix:→ patch,feat:→ minor,BREAKING CHANGE→ major), but read the actual messages to make a judgment call.- Patch (
Confirm with user before tagging — present a summary:
Current tag | New tag | Reason -------------|------------|------- v0.1.5 | v0.2.0 | new feature: ...Wait for explicit user confirmation before proceeding.
Tag and push:
git tag -s v{X.Y.Z} -m "release: v{X.Y.Z}" git push {upstream} v{X.Y.Z}Confirm the push succeeded.
Rules
- NEVER skip the user confirmation step — always show the summary and wait for approval.
- NEVER tag or push without user confirmation.
- NEVER use
--no-verifyor--forcewhen pushing tags. - If
git statusshows uncommitted changes, stop immediately and tell the user to commit or stash first. - If HEAD is not at
{upstream}/main, stop immediately and tell the user to check out{upstream}/mainfirst.