Source code for tseda.bump_version
"""bump_version — increment the version string in pyproject.toml.
Usage
-----
bump-version # bumps patch (0.1.7 -> 0.1.8)
bump-version patch # same
bump-version minor # bumps minor (0.1.7 -> 0.2.0)
bump-version major # bumps major (0.1.7 -> 1.0.0)
The script edits pyproject.toml in-place and prints the old and new version.
"""
from __future__ import annotations
import re
import sys
from pathlib import Path
_PYPROJECT = Path(__file__).parent.parent.parent / "pyproject.toml"
_VERSION_RE = re.compile(r'^(version\s*=\s*")(\d+)\.(\d+)\.(\d+)(")', re.MULTILINE)
def _bump(major: int, minor: int, patch: int, part: str) -> tuple[int, int, int]:
if part == "major":
return major + 1, 0, 0
if part == "minor":
return major, minor + 1, 0
return major, minor, patch + 1
[docs]
def main() -> None:
part = sys.argv[1].lower() if len(sys.argv) > 1 else "patch"
if part not in {"major", "minor", "patch"}:
print(f"error: unknown part '{part}'. Choose major, minor, or patch.", file=sys.stderr)
sys.exit(1)
text = _PYPROJECT.read_text(encoding="utf-8")
match = _VERSION_RE.search(text)
if not match:
print("error: could not find version = \"x.y.z\" in pyproject.toml", file=sys.stderr)
sys.exit(1)
prefix, maj, min_, pat, suffix = match.groups()
old_version = f"{maj}.{min_}.{pat}"
new_maj, new_min, new_pat = _bump(int(maj), int(min_), int(pat), part)
new_version = f"{new_maj}.{new_min}.{new_pat}"
new_text = _VERSION_RE.sub(rf'\g<1>{new_version}\5', text)
_PYPROJECT.write_text(new_text, encoding="utf-8")
print(f"Bumped {part}: {old_version} → {new_version}")
if __name__ == "__main__":
main()