Skip to content

Commit e621211

Browse files
committed
improve version string validation in version_info_templater.py
1 parent b7a523f commit e621211

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

builder/version_info_templater.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515

1616
# Standard library
1717
import argparse
18-
import re
1918
import sys
2019
from os import W_OK, access, path
2120
from pathlib import Path
2221

22+
# 3rd party
23+
from packaging.version import parse as parse_version
24+
2325
sys.path.insert(0, path.abspath(r"."))
2426

2527
# module
@@ -29,9 +31,31 @@
2931
# ########### MAIN #################
3032
# ##################################
3133

32-
# Define a regular expression pattern to match the version string
33-
pattern = re.compile(r"(\d+)\.(\d+)\.(\d+)")
34-
semver = pattern.match(__about__.__version__).groups()
34+
# Parse the version using packaging.version which handles setuptools_scm formats
35+
# This supports formats like:
36+
# - Standard releases: "1.2.3"
37+
# - Development versions: "1.2.3.dev4+g1234567"
38+
# - Pre-releases: "1.2.3a1", "1.2.3b2", "1.2.3rc1"
39+
try:
40+
parsed_version = parse_version(__about__.__version__)
41+
# Extract major, minor, patch from the parsed version
42+
# For development versions like "0.1.dev1+ge6f014e", this will give us (0, 1, 0)
43+
if hasattr(parsed_version, "release") and len(parsed_version.release) >= 3:
44+
semver = parsed_version.release[:3] # (major, minor, patch)
45+
elif hasattr(parsed_version, "release") and len(parsed_version.release) == 2:
46+
# Handle case where only major.minor is provided
47+
semver = (*parsed_version.release, 0) # (major, minor, 0)
48+
elif hasattr(parsed_version, "release") and len(parsed_version.release) == 1:
49+
# Handle case where only major is provided
50+
semver = (parsed_version.release[0], 0, 0) # (major, 0, 0)
51+
else:
52+
# Fallback for unexpected formats
53+
semver = (0, 1, 0)
54+
except Exception as e:
55+
raise ValueError(
56+
f"Invalid version format: {__about__.__version__}. "
57+
f"Error parsing version: {e}"
58+
)
3559

3660

3761
REPLACEMENT_VALUES = {

0 commit comments

Comments
 (0)