v1.4.0: fix #43, #31, #29, #49, #33 + shared templating

This commit is contained in:
2026-05-20 20:08:25 +03:00
parent ca4d00c895
commit 64991f0228
63 changed files with 5005 additions and 45 deletions
+73
View File
@@ -0,0 +1,73 @@
#!/usr/bin/env python3
"""Auto-increment version and update changelog on deploy."""
import os
import sys
import json
from datetime import datetime
from pathlib import Path
BASE = Path(__file__).resolve().parent.parent
VERSION_FILE = BASE / "version.txt"
CHANGELOG_FILE = BASE / "CHANGELOG.md"
def read_version() -> tuple:
try:
parts = VERSION_FILE.read_text().strip().split(".")
return tuple(int(p) for p in parts[:3])
except (FileNotFoundError, ValueError):
return (0, 0, 1)
def write_version(major: int, minor: int, patch: int):
VERSION_FILE.write_text(f"{major}.{minor}.{patch}\n")
def bump_version(bump_type: str = "patch") -> str:
major, minor, patch = read_version()
if bump_type == "major":
major += 1; minor = 0; patch = 0
elif bump_type == "minor":
minor += 1; patch = 0
else:
patch += 1
write_version(major, minor, patch)
return f"{major}.{minor}.{patch}"
def add_changelog_entry(version: str, features: list = None, fixes: list = None):
date = datetime.now().strftime("%d.%m.%Y")
lines = [f"\n## {version} ({date})"]
if features:
lines.append("### Новые функции\n" + "\n".join(f"- {f}" for f in features))
if fixes:
lines.append("### Исправления и улучшения\n" + "\n".join(f"- {f}" for f in fixes))
entry = "\n".join(lines) + "\n"
changelog = CHANGELOG_FILE.read_text(encoding="utf-8") if CHANGELOG_FILE.exists() else "# Changelog — AegisOne Service Portal\n"
# Insert after the title line
if changelog.startswith("# Changelog"):
header_end = changelog.find("\n", changelog.find("\n", 2) + 1)
if header_end == -1:
changelog += entry
else:
changelog = changelog[:header_end] + entry + changelog[header_end:]
else:
changelog = f"# Changelog — AegisOne Service Portal\n{entry}\n" + changelog
CHANGELOG_FILE.write_text(changelog, encoding="utf-8")
if __name__ == "__main__":
bump = sys.argv[1] if len(sys.argv) > 1 and sys.argv[1] in ("major", "minor", "patch") else "patch"
features = []
fixes = []
if len(sys.argv) > 2:
try:
parsed = json.loads(sys.argv[2])
features = parsed.get("features", [])
fixes = parsed.get("fixes", [])
except (json.JSONDecodeError, TypeError):
pass
version = bump_version(bump)
add_changelog_entry(version, features, fixes)
print(f"Version bumped to {version}")