Skip to content

Commit de351e2

Browse files
refactor: improve version update script logic
1 parent 454ec36 commit de351e2

2 files changed

Lines changed: 71 additions & 133 deletions

File tree

scripts/README.md

Lines changed: 0 additions & 87 deletions
This file was deleted.

scripts/update_readme_version.py

Lines changed: 71 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,42 @@
22
import sys
33
from pathlib import Path
44

5-
def extract_versions():
6-
"""从 libs.versions.toml 文件中提取 Kotlin 版本号和项目版本号"""
5+
6+
def extract_version_config():
7+
"""从 libs.versions.toml 文件中提取 README 同步所需的配置"""
78
try:
8-
# 1. 读取 libs.versions.toml
99
versions_toml_path = Path("gradle/libs.versions.toml")
1010
if not versions_toml_path.exists():
1111
raise FileNotFoundError(f"版本文件不存在: {versions_toml_path}")
1212

1313
versions_toml = versions_toml_path.read_text(encoding="utf-8")
1414

15-
# 提取 Kotlin 版本号
16-
kotlin_version_match = re.search(r'kotlin\s*=\s*"([\d\.]+)"', versions_toml)
17-
kotlin_version = kotlin_version_match.group(1) if kotlin_version_match else None
18-
19-
if not kotlin_version:
20-
raise ValueError("无法从 libs.versions.toml 中提取 Kotlin 版本号")
21-
22-
# 提取项目版本号
23-
project_version_match = re.search(r'project\s*=\s*"([\d\.]+)"', versions_toml)
24-
project_version = project_version_match.group(1) if project_version_match else None
25-
26-
if not project_version:
27-
raise ValueError("无法从 libs.versions.toml 中提取项目版本号")
28-
29-
return kotlin_version, project_version
15+
def extract_string(key: str) -> str:
16+
match = re.search(
17+
rf'(?m)^\s*{re.escape(key)}\s*=\s*"([^"\r\n]+)"\s*$',
18+
versions_toml,
19+
)
20+
if not match:
21+
raise ValueError(f"无法从 libs.versions.toml 中提取 {key} 配置")
22+
return match.group(1)
23+
24+
return {
25+
"kotlin_version": extract_string("kotlin"),
26+
"project_version": extract_string("project"),
27+
"project_group": extract_string("group"),
28+
}
3029

3130
except Exception as e:
32-
print(f"错误: 提取版本号失败 - {e}", file=sys.stderr)
31+
print(f"错误: 提取版本配置失败 - {e}", file=sys.stderr)
3332
sys.exit(1)
3433

35-
def update_readme_version(readme_path_str: str, kotlin_version: str, project_version: str):
34+
35+
def update_readme_version(
36+
readme_path_str: str,
37+
kotlin_version: str,
38+
project_version: str,
39+
project_group: str,
40+
):
3641
"""更新 README 文件中的版本号"""
3742
try:
3843
readme_path = Path(readme_path_str)
@@ -43,30 +48,51 @@ def update_readme_version(readme_path_str: str, kotlin_version: str, project_ver
4348
original_content = readme_path.read_text(encoding="utf-8")
4449
updated_content = original_content
4550

46-
# 替换 Kotlin 版本徽章
47-
kotlin_pattern = r'(Kotlin-)[\d\.]+(-[A-F0-9]+?\?logo=kotlin)'
51+
kotlin_pattern = r'(Kotlin-)([^?\r\n]+)(-[A-Za-z0-9]+(?:\?logo=kotlin\b[^)]*))'
4852
kotlin_replacement = rf'\g<1>{kotlin_version}\g<2>'
49-
updated_content = re.sub(kotlin_pattern, kotlin_replacement, updated_content)
50-
51-
# 替换 implementation 代码块里的版本号(支持多个data-saver库)
52-
# 替换 data-saver-core 版本号
53-
core_pattern = r'(implementation\s+"io\.github\.FunnySaltyFish:data-saver-core:).+?(")'
54-
core_replacement = rf'\g<1>{project_version}\g<2>'
55-
updated_content = re.sub(core_pattern, core_replacement, updated_content)
56-
57-
# 替换其他data-saver库的版本号
58-
other_pattern = r'(implementation\s+"io\.github\.FunnySaltyFish:data-saver-[^:]+:).+?(")'
59-
other_replacement = rf'\g<1>{project_version}\g<2>'
60-
updated_content = re.sub(other_pattern, other_replacement, updated_content)
61-
62-
# 检查是否有变化
53+
updated_content, kotlin_badge_count = re.subn(
54+
kotlin_pattern,
55+
kotlin_replacement,
56+
updated_content,
57+
)
58+
59+
dependency_pattern = re.compile(
60+
r'((?:implementation|api)\s*\(?\s*["\'])'
61+
r'((?:io\.github\.funnysaltyfish)|(?:com\.github\.funnysaltyfish))'
62+
r':'
63+
r'(data-saver(?:-[^:"\'\s\)]+)?)'
64+
r':'
65+
r'([^"\')\s]+)'
66+
r'(["\']\s*\)?)',
67+
flags=re.IGNORECASE,
68+
)
69+
70+
def replace_dependency(match: re.Match[str]) -> str:
71+
return (
72+
f"{match.group(1)}"
73+
f"{project_group}:{match.group(3)}:{project_version}"
74+
f"{match.group(5)}"
75+
)
76+
77+
updated_content, dependency_count = dependency_pattern.subn(
78+
replace_dependency,
79+
updated_content,
80+
)
81+
6382
if original_content == updated_content:
83+
if dependency_count == 0:
84+
print(f"⚠️ {readme_path_str} 未识别到可更新的 data-saver 依赖")
85+
elif kotlin_badge_count == 0:
86+
print(f"ℹ️ {readme_path_str} 未找到 Kotlin 版本徽章,已跳过")
6487
print(f"ℹ️ {readme_path_str} 无需更新")
6588
return False
66-
else:
67-
readme_path.write_text(updated_content, encoding="utf-8")
68-
print(f"✅ {readme_path_str} 更新完成")
69-
return True
89+
90+
readme_path.write_text(updated_content, encoding="utf-8")
91+
print(
92+
f"✅ {readme_path_str} 更新完成"
93+
f" (依赖 {dependency_count} 处, Kotlin 徽章 {kotlin_badge_count} 处)"
94+
)
95+
return True
7096

7197
except Exception as e:
7298
print(f"错误: 更新 {readme_path_str} 失败 - {e}", file=sys.stderr)
@@ -76,15 +102,14 @@ def main():
76102
"""主函数"""
77103
print("🚀 开始更新 README 版本号...")
78104

79-
# 提取版本号
80-
kotlin_version, project_version = extract_versions()
81-
print(f"📝 Kotlin 版本号: {kotlin_version}")
82-
print(f"📝 项目版本号: {project_version}")
105+
version_config = extract_version_config()
106+
print(f"📝 Kotlin 版本号: {version_config['kotlin_version']}")
107+
print(f"📝 项目版本号: {version_config['project_version']}")
108+
print(f"📝 项目 Group Id: {version_config['project_group']}")
83109

84-
# 更新 README 文件
85110
updated_files = []
86111
for readme_path in ("README.md", "README_en.md"):
87-
if update_readme_version(readme_path, kotlin_version, project_version):
112+
if update_readme_version(readme_path, **version_config):
88113
updated_files.append(readme_path)
89114

90115
if updated_files:

0 commit comments

Comments
 (0)