get_version.py
1 # Get current project version from Git tags or changelog. 2 3 import re 4 from contextlib import suppress 5 from pathlib import Path 6 7 from pdm.backend.hooks.version import ( # ty: ignore[unresolved-import] 8 SCMVersion, 9 Version, 10 default_version_formatter, 11 get_version_from_scm, 12 ) 13 14 _root = Path(__file__).parent.parent 15 _changelog = _root / "CHANGELOG.md" 16 _changelog_version_re = re.compile(r"^## \[(\d+\.\d+\.\d+)\].*$") 17 _default_scm_version = SCMVersion(Version("0.0.0"), None, False, None, None) # noqa: FBT003 18 19 20 def get_version() -> str: 21 scm_version = get_version_from_scm(_root) or _default_scm_version 22 if scm_version.version <= Version("0.1"): # Missing Git tags? 23 with suppress(OSError, StopIteration): # noqa: SIM117 24 with _changelog.open("r", encoding="utf8") as file: 25 match = next(filter(None, map(_changelog_version_re.match, file))) 26 scm_version = scm_version._replace(version=Version(match.group(1))) 27 return default_version_formatter(scm_version) 28 29 30 if __name__ == "__main__": 31 print(get_version())