@@ -15,21 +15,21 @@ Use this when ready to release a new version of the cookiecutter template after
1515
1616## Template Versioning Strategy
1717
18- ### Semantic Versioning for Template
19- Use standard semantic versioning: ` v{major}.{minor}.{patch } `
18+ ### Hybrid Calver Versioning for Template
19+ Use hybrid versioning: ` v{major}.{minor}.{YYYYMMDD}r{revision } `
2020
2121** Version Bump Guidelines:**
22- - ** Major (v2.0.0 )** : Breaking changes to cookiecutter variables, major workflow changes, removed features
23- - ** Minor (v1.1.0 )** : New agents, new skills, workflow enhancements, new features
24- - ** Patch (v1.0.1 )** : Bug fixes, documentation updates, minor improvements
22+ - ** Major (v2.x.xxxxr1 )** : Breaking changes to cookiecutter variables, major workflow changes, removed features
23+ - ** Minor (v1.x.xxxxr1 )** : New agents, new skills, workflow enhancements, new features
24+ - ** Revision (v1.2.xxxxr2 )** : Bug fixes, documentation updates, minor improvements on same day
2525
2626** Examples:**
2727```
28- v1.0.0 # Initial release
29- v1.1.0 # Added repo-manager agent and git-release skill
30- v1.1.1 # Fixed bug in template generation
31- v1.2.0 # Added template-manager meta agent
32- v2.0.0 # Changed cookiecutter.json structure (breaking)
28+ v1.0.20260302r1 # Initial release on March 2, 2026
29+ v1.1.20260315r1 # Added repo-manager agent and git-release skill on March 15
30+ v1.1.20260315r2 # Fixed bug in template generation same day
31+ v1.2.20260320r1 # Added template-manager meta agent on March 20
32+ v2.0.20260401r1 # Changed cookiecutter.json structure (breaking) on April 1
3333```
3434
3535## Release Process Workflow
5656### Phase 2: Version Calculation and Update
5757``` bash
5858# Get current version from git tags
59- current_version=$( git describe --tags --abbrev=0 2> /dev/null || echo " v0.0.0 " )
59+ current_version=$( git describe --tags --abbrev=0 2> /dev/null || echo " v0.0.00000000r0 " )
6060echo " Current version: $current_version "
6161
6262# Determine next version based on changes
@@ -65,7 +65,7 @@ git log ${current_version}..HEAD --oneline
6565
6666# Version bump logic (manual decision)
6767echo " Select version bump type:"
68- echo " 1. Patch (bug fixes, docs)"
68+ echo " 1. Revision (bug fixes, docs - same day )"
6969echo " 2. Minor (new features, agents, skills)"
7070echo " 3. Major (breaking changes)"
7171
@@ -74,24 +74,37 @@ breaking_changes=$(git log ${current_version}..HEAD --grep="BREAKING CHANGE" --o
7474new_features=$( git log ${current_version} ..HEAD --grep=" feat:" --oneline | wc -l)
7575bug_fixes=$( git log ${current_version} ..HEAD --grep=" fix:" --oneline | wc -l)
7676
77+ # Get current date for calver
78+ current_date=$( date +%Y%m%d)
79+
7780if [ " $breaking_changes " -gt 0 ]; then
7881 bump_type=" major"
7982elif [ " $new_features " -gt 0 ]; then
8083 bump_type=" minor"
8184else
82- bump_type=" patch "
85+ bump_type=" revision "
8386fi
8487
88+ # Extract current version components
89+ current_major=$( echo $current_version | sed ' s/v\([0-9]\+\)\..*/\1/' )
90+ current_minor=$( echo $current_version | sed ' s/v[0-9]\+\.\([0-9]\+\).*/\1/' )
91+ current_date_in_tag=$( echo $current_version | sed ' s/v[0-9]\+\.[0-9]\+\.\([0-9]\{8\}\).*/\1/' )
92+ current_revision=$( echo $current_version | sed ' s/.*r\([0-9]\+\)/\1/' )
93+
8594# Calculate new version
8695case $bump_type in
8796 " major" )
88- new_version=$( echo $current_version | sed ' s/v\([0-9]\+\).*/v\1/ ' | sed ' s/v// ' | awk ' {print "v" ($1+1) " .0.0"} ' )
97+ new_version=$( echo " v $(( current_major + 1 )) .0.${current_date} r1 " )
8998 ;;
9099 " minor" )
91- new_version=$( echo $current_version | sed ' s/v\([0-9]\+\)\.\([0-9]\+\).*/v\1.\2/ ' | sed ' s/v// ' | awk -F. ' {print "v" $1 "." ($2+1) ".0"} ' )
100+ new_version=$( echo " v ${current_major} . $(( current_minor + 1 )) . ${current_date} r1 " )
92101 ;;
93- " patch" )
94- new_version=$( echo $current_version | sed ' s/v//' | awk -F. ' {print "v" $1 "." $2 "." ($3+1)}' )
102+ " revision" )
103+ if [ " $current_date_in_tag " = " $current_date " ]; then
104+ new_version=$( echo " v${current_major} .${current_minor} .${current_date} r$(( current_revision + 1 )) " )
105+ else
106+ new_version=$( echo " v${current_major} .${current_minor} .${current_date} r1" )
107+ fi
95108 ;;
96109esac
97110
317330git add .
318331git commit -m " feat(agents): add template-manager meta agent"
319332@template-manager /skill template-release
320- # Output: "Created release v1.2.0 with new meta agent functionality"
333+ # Output: "Created release v1.2.20260320r1 with new meta agent functionality"
321334```
322335
323336### Patch Release
@@ -326,7 +339,7 @@ git commit -m "feat(agents): add template-manager meta agent"
326339git add .
327340git commit -m " fix(docs): correct cookiecutter variable examples"
328341@template-manager /skill template-release
329- # Output: "Created release v1.1.1 with documentation fixes"
342+ # Output: "Created release v1.2.20260320r2 with documentation fixes"
330343```
331344
332345### Major Release
@@ -337,5 +350,5 @@ git commit -m "feat!: restructure cookiecutter variables for better usability
337350
338351BREAKING CHANGE: cookiecutter.json format changed"
339352@template-manager /skill template-release
340- # Output: "Created release v2.0.0 with breaking changes - migration guide included"
353+ # Output: "Created release v2.0.20260401r1 with breaking changes - migration guide included"
341354```
0 commit comments