|
15 | 15 |
|
16 | 16 | # Standard library
|
17 | 17 | import argparse
|
18 |
| -import re |
19 | 18 | import sys
|
20 | 19 | from os import W_OK, access, path
|
21 | 20 | from pathlib import Path
|
22 | 21 |
|
| 22 | +# 3rd party |
| 23 | +from packaging.version import parse as parse_version |
| 24 | + |
23 | 25 | sys.path.insert(0, path.abspath(r"."))
|
24 | 26 |
|
25 | 27 | # module
|
|
29 | 31 | # ########### MAIN #################
|
30 | 32 | # ##################################
|
31 | 33 |
|
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 | + ) |
35 | 59 |
|
36 | 60 |
|
37 | 61 | REPLACEMENT_VALUES = {
|
|
0 commit comments