@@ -16,20 +16,19 @@ Use this when ready to release a new version of the cookiecutter template after
1616## Template Versioning Strategy
1717
1818### Hybrid Calver Versioning for Template
19- Use hybrid versioning: ` v{major}.{minor}.{YYYYMMDD}r{revision} `
19+ Use hybrid versioning: ` v{major}.{minor}.{YYYYMMDD} `
2020
2121** Version Bump Guidelines:**
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
22+ - ** Major (v2.x.20260401)** : Breaking changes to cookiecutter variables, major workflow changes, removed features
23+ - ** Minor (v1.x.20260315)** : New agents, new skills, workflow enhancements, new features, or same-day releases
2524
2625** Examples:**
2726```
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
27+ v1.0.20260302 # Initial release on March 2, 2026
28+ v1.1.20260315 # Added repo-manager agent and git-release skill on March 15
29+ v1.2.20260315 # Second release same day (increment minor)
30+ v1.3.20260320 # Added template-manager meta agent on March 20
31+ v2.0.20260401 # Changed cookiecutter.json structure (breaking) on April 1
3332```
3433
3534## Release Process Workflow
5655### Phase 2: Version Calculation and Update
5756``` bash
5857# Get current version from git tags
59- current_version=$( git describe --tags --abbrev=0 2> /dev/null || echo " v0.0.00000000r0" )
60- echo " Current version: $current_version "
58+ current_version=$( git describe --tags --abbrev=0 2> /dev/null || echo " v0.0.00000000" )
6159
62- # Determine next version based on changes
63- echo " Analyzing changes since last release..."
64- git log ${current_version} ..HEAD --oneline
65-
66- # Version bump logic (manual decision)
67- echo " Select version bump type:"
68- echo " 1. Revision (bug fixes, docs - same day)"
69- echo " 2. Minor (new features, agents, skills)"
70- echo " 3. Major (breaking changes)"
71-
72- # For automation, analyze commit messages
73- breaking_changes=$( git log ${current_version} ..HEAD --grep=" BREAKING CHANGE" --oneline | wc -l)
74- new_features=$( git log ${current_version} ..HEAD --grep=" feat:" --oneline | wc -l)
75- bug_fixes=$( git log ${current_version} ..HEAD --grep=" fix:" --oneline | wc -l)
76-
77- # Get current date for calver
60+ # Calculate new version
7861current_date=$( date +%Y%m%d)
79-
80- if [ " $breaking_changes " -gt 0 ]; then
81- bump_type=" major"
82- elif [ " $new_features " -gt 0 ]; then
83- bump_type=" minor"
84- else
85- bump_type=" revision"
86- fi
87-
88- # Extract current version components
8962current_major=$( echo $current_version | sed ' s/v\([0-9]\+\)\..*/\1/' )
9063current_minor=$( echo $current_version | sed ' s/v[0-9]\+\.\([0-9]\+\).*/\1/' )
9164current_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/' )
9365
94- # Calculate new version
9566case $bump_type in
9667 " major" )
97- new_version=$( echo " v$(( current_major + 1 )) .0.${current_date} r1 " )
68+ new_version=$( echo " v$(( current_major + 1 )) .0.${current_date} " )
9869 ;;
9970 " minor" )
100- new_version=$( echo " v${current_major} .$(( current_minor + 1 )) .${current_date} r1" )
71+ # If same day as last release, increment minor further
72+ if [ " $current_date_in_tag " = " $current_date " ]; then
73+ new_version=$( echo " v${current_major} .$(( current_minor + 2 )) .${current_date} " )
74+ else
75+ new_version=$( echo " v${current_major} .$(( current_minor + 1 )) .${current_date} " )
76+ fi
10177 ;;
10278 " revision" )
10379 if [ " $current_date_in_tag " = " $current_date " ]; then
104- new_version=$( echo " v${current_major} .${current_minor} . ${current_date} r $(( current_revision + 1 )) " )
80+ new_version=$( echo " v${current_major} .$(( current_minor + 1 )) . ${current_date} " )
10581 else
106- new_version=$( echo " v${current_major} .${current_minor} .${current_date} r1 " )
82+ new_version=$( echo " v${current_major} .${current_minor} .${current_date} " )
10783 fi
10884 ;;
10985esac
353329git add .
354330git commit -m " feat(agents): add template-manager meta agent"
355331@template-manager /skill template-release
356- # Output: "Created release v1.2.20260320r1 with new meta agent functionality"
332+ # Output: "Created release v1.2.20260320 with new meta agent functionality"
357333```
358334
359335### Patch Release
@@ -362,7 +338,7 @@ git commit -m "feat(agents): add template-manager meta agent"
362338git add .
363339git commit -m " fix(docs): correct cookiecutter variable examples"
364340@template-manager /skill template-release
365- # Output: "Created release v1.2.20260320r2 with documentation fixes"
341+ # Output: "Created release v1.2.20260320 with documentation fixes"
366342```
367343
368344### Major Release
@@ -373,5 +349,5 @@ git commit -m "feat!: restructure cookiecutter variables for better usability
373349
374350BREAKING CHANGE: cookiecutter.json format changed"
375351@template-manager /skill template-release
376- # Output: "Created release v2.0.20260401r1 with breaking changes - migration guide included"
352+ # Output: "Created release v2.0.20260401 with breaking changes - migration guide included"
377353```
0 commit comments