|
21 | 21 |
|
22 | 22 | import argparse |
23 | 23 | import os |
24 | | -import re |
25 | 24 | import subprocess |
26 | 25 | import sys |
27 | 26 | from pathlib import Path |
28 | 27 |
|
29 | 28 | REPO_DIR = Path(__file__).resolve().parent.parent |
30 | 29 | sys.path.insert(0, str(REPO_DIR)) |
| 30 | +sys.path.insert(0, str(Path(__file__).resolve().parent)) |
| 31 | + |
| 32 | +from _release_common import display_version, msi_version # noqa: E402 |
31 | 33 |
|
32 | 34 | import scenedetect # noqa: E402 |
33 | 35 |
|
34 | 36 | INSTALLER_AIP = REPO_DIR / "packaging" / "windows" / "installer" / "PySceneDetect.aip" |
35 | 37 | DIST_TREE = REPO_DIR / "dist" / "scenedetect" |
36 | 38 |
|
37 | 39 |
|
38 | | -def msi_version(raw: str) -> str: |
39 | | - # AdvancedInstaller's ProductVersion only accepts numeric X[.Y[.Z[.B]]]. |
40 | | - # Strip Python-style suffixes ("0.7-dev0" -> "0.7"; "1.0.0-rc1" -> "1.0.0") |
41 | | - # and pad to three components so the resulting MSI filename is consistent. |
42 | | - parts = [re.split(r"[^\d]", p, maxsplit=1)[0] for p in raw.split(".")] |
43 | | - if not all(p.isdigit() for p in parts if p): |
44 | | - sys.exit(f"Cannot derive numeric MSI version from {raw!r}") |
45 | | - while len(parts) < 3: |
46 | | - parts.append("0") |
47 | | - return ".".join(parts[:4]) |
48 | | - |
49 | | - |
50 | 40 | def find_advinst() -> Path: |
51 | 41 | if env := os.environ.get("ADVINST"): |
52 | 42 | path = Path(env) |
@@ -122,24 +112,28 @@ def main() -> None: |
122 | 112 | print(f"Re-syncing APPDIR in {INSTALLER_AIP.name}") |
123 | 113 | resync_appdir(advinst) |
124 | 114 | if args.dev: |
125 | | - version = msi_version(args.version_override or scenedetect.__version__) |
126 | | - dev_name = f"PySceneDetect-{version}-dev-win64.msi" |
| 115 | + raw_version = args.version_override or scenedetect.__version__ |
| 116 | + file_version = display_version(raw_version) |
| 117 | + dev_name = f"PySceneDetect-{file_version}-dev-win64.msi" |
127 | 118 | print(f"Renaming MSI package to {dev_name} (dev build)") |
128 | 119 | run(advinst, "/SetPackageName", dev_name, "-buildname", "DefaultBuild") |
129 | 120 | return |
130 | 121 |
|
131 | 122 | raw_version = args.version_override or scenedetect.__version__ |
132 | | - version = msi_version(raw_version) |
133 | | - if version != raw_version: |
134 | | - print(f"Normalized {raw_version!r} -> {version!r} for AdvancedInstaller") |
135 | | - print(f"Bumping {INSTALLER_AIP.name} to {version}") |
136 | | - |
137 | | - run(advinst, "/SetVersion", version) |
| 123 | + product_version = msi_version(raw_version) |
| 124 | + file_version = display_version(raw_version) |
| 125 | + if not all(p.isdigit() for p in product_version.split(".") if p): |
| 126 | + sys.exit(f"Cannot derive numeric MSI version from {raw_version!r}") |
| 127 | + if product_version != raw_version: |
| 128 | + print(f"Normalized {raw_version!r} -> {product_version!r} for AdvancedInstaller") |
| 129 | + print(f"Bumping {INSTALLER_AIP.name} to {product_version} (filename: {file_version})") |
| 130 | + |
| 131 | + run(advinst, "/SetVersion", product_version) |
138 | 132 | run(advinst, "/SetProductCode", "-langid", "1033") |
139 | 133 | run( |
140 | 134 | advinst, |
141 | 135 | "/SetPackageName", |
142 | | - f"PySceneDetect-{version}-win64.msi", |
| 136 | + f"PySceneDetect-{file_version}-win64.msi", |
143 | 137 | "-buildname", |
144 | 138 | "DefaultBuild", |
145 | 139 | ) |
|
0 commit comments