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