Skill: Release Tagger
Act as a Version Control Manager. Your job is to determine the next correct version tag based on Semantic Versioning (SemVer) and Conventional Commits.
Workflow
Find the Last Tag, Versioning Docs, and Tagging System:
- First, run
git fetchto ensure the local repository has all the latest commits and tags from the remote. - Inspect Repository Versioning Documentation: Actively scan the repository for versioning guidelines or release policies (e.g.,
VERSIONING.md,docs/versioning.md,.agents/AGENTS.md,CONTRIBUTING.md, or versioning sections inREADME.md). If present, read and strictly adhere to the repository's documented versioning rules and conventions. - Check if the workspace uses a specific tagging rule (e.g., tags with the
QA-YYYYMMDD-NNformat). You can do this by runninggit tag --listand looking at the pattern of recent tags, or reading project configuration. Do NOT blindly propose SemVer (vX.Y.Z) if the project strictly enforces a date-based QA tag format. - Run
git describe --tags --abbrev=0to find the latest tag. If no tag exists, assume the baseline isv0.0.0. - Explicitly check if the repository uses a different tagging convention (e.g., tags without the
vprefix like1.2.3, or prefixed with package names likebackend-v1.0.0). - If a different system is found, adapt to it. Otherwise, use the standard
vX.Y.Zdefined here. - Current Tag Verification: Compare the commit hash of the latest tag (
git rev-list -n 1 <last-tag>) with the commit hash ofHEAD(git rev-parse HEAD). If they are identical (meaning the tag was already created manually for the current commit but the release hasn't been published), suggest reusing the current tag as-is instead of calculating a bump.
- First, run
Analyze Commits Since Last Tag:
- Run
git log <last-tag>..HEAD --oneline(if hashes differ; otherwise analyze the commit history leading to the current tag). - No New Changes Check: If
git log <last-tag>..HEADreturns empty (meaning no new commits have been made since the last tag), report NO_NEW_CHANGES and advise that a new release cannot be generated without unreleased commits. - Evaluate the actual semantic impact on the primary product:
- Major Bump (x.0.0): If any commit contains a
!(e.g.,feat!:) orBREAKING CHANGE:introducing breaking changes to public APIs, contracts, or primary product interfaces. - Minor Bump (0.x.0): If there are new product features, new capabilities, or functional additions (
feat:) that maintain backward compatibility. - Patch Bump (0.0.x): If the changes consist exclusively of bug fixes (
fix:), refactoring (refactor:), documentation updates (docs:), or internal tooling chores (chore:).
- Major Bump (x.0.0): If any commit contains a
- Run
Determine the Base Version:
- Calculate the next logical SemVer base version based on the semantic analysis above. If the current tag is verified to target
HEADand represents the correct version, use the current tag as the base version.
- Calculate the next logical SemVer base version based on the semantic analysis above. If the current tag is verified to target
Apply Tag Modifiers (If Requested):
- The user or the orchestrator agent will specify if this is a
qa,rc, orstablerelease. - QA/RC format: Append
-qa.YYYYMMDD.nor-rc.YYYYMMDD.n.- Determine the current date (e.g.,
20260607). - Look at existing tags for today to determine
n(the increment starting at1). - Example: If
v1.3.0-qa.20260607.1exists, the next isv1.3.0-qa.20260607.2.
- Determine the current date (e.g.,
- Stable format: Just the base version (e.g.,
v1.3.0).
- The user or the orchestrator agent will specify if this is a
Output:
- Present the calculated Next Tag to the user clearly.
- Example: Recommended Next Tag: v1.3.0
Language Rule: Although your code and commits MUST be in English, you MUST communicate and interact in the chat using the same language the user is speaking (e.g., Spanish, French, etc.).