|
3 | 3 |
|
4 | 4 |
|
5 | 5 | def get_version_from_env(): |
6 | | - raw_version = os.getenv("VERSION", "v0.0.0") |
7 | | - stripped_version = re.sub(r"^v", "", raw_version) |
8 | | - |
9 | | - pre_release_suffix = "" |
10 | | - if "-" in stripped_version: |
11 | | - _, pre_release_suffix = stripped_version.split("-", 1) |
12 | | - pre_release_suffix = f"-{pre_release_suffix}" |
13 | | - |
| 6 | + original_version = os.getenv("VERSION", "v0.0.0") |
| 7 | + stripped_version = re.sub(r"^v", "", original_version) |
14 | 8 | # 匹配数字版本部分,包括预发布版本标识符之前的部分 |
15 | 9 | numeric_version = re.search( |
16 | 10 | r"^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.(\d+))?", stripped_version |
17 | 11 | ) |
18 | 12 | if numeric_version: |
19 | | - major = int(numeric_version.group(1)) |
20 | | - minor = int(numeric_version.group(2) or 0) |
21 | | - patch = int(numeric_version.group(3) or 0) |
22 | | - |
23 | | - version_3 = f"{major}.{minor}.{patch}" |
24 | | - original_version = f"v{version_3}{pre_release_suffix}" |
| 13 | + parts = numeric_version.groups(default="0") |
| 14 | + # 确保至少有三位数字 |
| 15 | + if parts[2] is None: |
| 16 | + stripped_version = f"{parts[0]}.{parts[1]}.0" |
| 17 | + elif parts[3] is None: |
| 18 | + stripped_version = f"{parts[0]}.{parts[1]}.{parts[2]}" |
| 19 | + else: |
| 20 | + stripped_version = ".".join(parts) |
25 | 21 | else: |
26 | | - version_3 = "0.0.0" |
| 22 | + stripped_version = "0.0.0" |
27 | 23 | original_version = "v0.0.0" |
28 | | - return original_version, version_3 |
| 24 | + return original_version, stripped_version |
29 | 25 |
|
30 | 26 |
|
31 | 27 | def update_version_info(version): |
32 | | - # 处理三位数字的版本号 |
| 28 | + # 处理三位或四位数字的版本号 |
33 | 29 | version_parts = version.split(".") |
34 | | - # 确保有三位数字 |
35 | | - while len(version_parts) < 3: |
| 30 | + # 确保有四位数字 |
| 31 | + while len(version_parts) < 4: |
36 | 32 | version_parts.append("0") |
37 | | - # 只取前三位 |
38 | | - major, minor, patch = map(int, version_parts[:3]) |
| 33 | + # 只取前四位 |
| 34 | + major, minor, patch, build = map(int, version_parts[:4]) |
39 | 35 |
|
40 | | - version_tuple = (major, minor, patch) |
41 | | - version_str = f"{major}.{minor}.{patch}" |
| 36 | + version_tuple = (major, minor, patch, build) |
| 37 | + version_str = f"{major}.{minor}.{patch}.{build}" |
42 | 38 |
|
43 | 39 | with open("version_info.txt", "r", encoding="utf-8") as f: |
44 | 40 | content = f.read() |
45 | 41 |
|
46 | 42 | content = re.sub( |
47 | | - r"filevers=\(\d, \d, \d(?:, \d)?\)", f"filevers={version_tuple}", content |
| 43 | + r"filevers=\(\d, \d, \d, \d\)", f"filevers={version_tuple}", content |
48 | 44 | ) |
49 | 45 | content = re.sub( |
50 | | - r"prodvers=\(\d, \d, \d(?:, \d)?\)", f"prodvers={version_tuple}", content |
| 46 | + r"prodvers=\(\d, \d, \d, \d\)", f"prodvers={version_tuple}", content |
51 | 47 | ) |
52 | 48 | content = re.sub( |
53 | 49 | r"StringStruct\(u\'FileVersion\', u\'[^\']+\'\)", |
@@ -87,7 +83,7 @@ def update_iss_version(stripped_version): |
87 | 83 |
|
88 | 84 |
|
89 | 85 | if __name__ == "__main__": |
90 | | - original_version, version_3 = get_version_from_env() |
91 | | - update_version_info(version_3) |
| 86 | + original_version, stripped_version = get_version_from_env() |
| 87 | + update_version_info(stripped_version) |
92 | 88 | update_config_py(original_version) |
93 | | - update_iss_version(version_3) |
| 89 | + update_iss_version(stripped_version) |
0 commit comments