75 lines
2.0 KiB
Python
75 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""版本号自增 — pyproject.toml(2605.X) + Cargo.toml(26.5.X)
|
|
|
|
规则: YYMM 匹配当前年月 → patch 自增; 不匹配 → 重置为 NEW_YYMM.1
|
|
仅当版本号需要变化时才修改文件。
|
|
"""
|
|
|
|
import os
|
|
import re
|
|
import sys
|
|
from datetime import date
|
|
|
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
PYPROJECT = os.path.join(SCRIPT_DIR, "pyproject.toml")
|
|
CARGO_TOML = os.path.join(SCRIPT_DIR, "Cargo.toml")
|
|
|
|
|
|
def read_file(path: str) -> str:
|
|
with open(path, "r") as f:
|
|
return f.read()
|
|
|
|
|
|
def write_file(path: str, content: str) -> None:
|
|
with open(path, "w") as f:
|
|
f.write(content)
|
|
|
|
|
|
def main() -> None:
|
|
today = date.today()
|
|
new_yymm = today.strftime("%y%m") # 2605
|
|
|
|
# --- pyproject.toml ---
|
|
pyproject = read_file(PYPROJECT)
|
|
m = re.search(r'^version\s*=\s*"(\d{4})\.(\d+)"', pyproject, re.MULTILINE)
|
|
if not m:
|
|
print("ERROR: 无法从 pyproject.toml 解析版本号", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
old_yymm, old_patch = m.group(1), int(m.group(2))
|
|
|
|
if old_yymm == new_yymm:
|
|
new_patch = old_patch + 1
|
|
else:
|
|
new_patch = 1
|
|
|
|
new_py_ver = f"{new_yymm}.{new_patch}"
|
|
if old_yymm == new_yymm and old_patch == new_patch:
|
|
print(f"版本号未变: {new_py_ver}")
|
|
return
|
|
|
|
new_pyproject = re.sub(
|
|
r'^(version\s*=\s*)"\d{4}\.\d+"',
|
|
rf'\1"{new_py_ver}"',
|
|
pyproject,
|
|
flags=re.MULTILINE,
|
|
)
|
|
write_file(PYPROJECT, new_pyproject)
|
|
print(f'pyproject.toml: {m.group(0).split("=")[1].strip()} → "{new_py_ver}"')
|
|
|
|
# --- Cargo.toml ---
|
|
new_cargo_ver = f"{new_yymm[:2]}.{int(new_yymm[2:])}.{new_patch}" # 26.5.2
|
|
cargo = read_file(CARGO_TOML)
|
|
new_cargo = re.sub(
|
|
r'^(version\s*=\s*)"\d+\.\d+\.\d+"',
|
|
rf'\1"{new_cargo_ver}"',
|
|
cargo,
|
|
flags=re.MULTILINE,
|
|
)
|
|
write_file(CARGO_TOML, new_cargo)
|
|
print(f'Cargo.toml: → "{new_cargo_ver}"')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|