33
44This script helps manage semantic versioning with support for:
55- major.minor.patch version bumping
6- - Pre-release labels (alpha, beta, rc)
6+ - Pre-release labels (alpha, beta, rc, dev)
7+ - Changing prerelease label without version bump
78- Automatic git tagging and GitHub release creation
89
910Usage:
10- python scripts/bump_version.py [major|minor|patch] [--prerelease alpha|beta|rc|stable]
11+ python scripts/bump_version.py [major|minor|patch] [--prerelease alpha|beta|rc|dev|stable]
12+ python scripts/bump_version.py --prerelease alpha # Change only prerelease label
1113 python scripts/bump_version.py --current # Show current version
1214
1315Examples:
14- python scripts/bump_version.py patch # 0.3.0-alpha -> 0.3.1-alpha
15- python scripts/bump_version.py minor --prerelease beta # 0.3.0-alpha -> 0.4.0-beta
16+ python scripts/bump_version.py patch # 0.3.0-alpha -> 0.3.1-alpha
17+ python scripts/bump_version.py minor --prerelease beta # 0.3.0-alpha -> 0.4.0-beta
1618 python scripts/bump_version.py major --prerelease stable # 0.3.0-alpha -> 1.0.0
19+ python scripts/bump_version.py --prerelease alpha # 0.4.5-dev -> 0.4.5-alpha
1720"""
1821
1922import argparse
@@ -57,12 +60,12 @@ def format_version(self, major: int, minor: int, patch: int, prerelease: str) ->
5760 version += f"-{ prerelease } "
5861 return version
5962
60- def bump_version (self , bump_type : str , new_prerelease : str = None ) -> tuple [str , str ]:
63+ def bump_version (self , bump_type : str | None , new_prerelease : str = None ) -> tuple [str , str ]:
6164 """Bump version and return (old_version, new_version)."""
6265 major , minor , patch , prerelease = self .get_current_version ()
6366 old_version = self .format_version (major , minor , patch , prerelease )
6467
65- # Apply bump type
68+ # Apply bump type (if specified)
6669 if bump_type == "major" :
6770 major += 1
6871 minor = 0
@@ -72,7 +75,7 @@ def bump_version(self, bump_type: str, new_prerelease: str = None) -> tuple[str,
7275 patch = 0
7376 elif bump_type == "patch" :
7477 patch += 1
75- else :
78+ elif bump_type is not None :
7679 raise ValueError (f"Invalid bump type: { bump_type } " )
7780
7881 # Apply prerelease change if specified
@@ -283,8 +286,8 @@ def main():
283286 print (f"Current version: { version } " )
284287 return 0
285288
286- # Validate arguments
287- if not args .bump_type :
289+ # Validate arguments - need either bump_type or prerelease
290+ if not args .bump_type and not args . prerelease :
288291 parser .print_help ()
289292 return 1
290293
0 commit comments