Загрузка данных


#!/usr/bin/env python3

import os
import re
import tomllib
from pathlib import Path
from datetime import datetime
from jinja2 import Template

# ====================== PATH CONFIG ======================
APP_PATH = os.environ.get("APP_PATH")
if APP_PATH:
    ROOT = Path(APP_PATH).resolve()
else:
    ROOT = Path(__file__).resolve().parent

PYPROJECT = ROOT / "django-ma/src/pyproject.toml"
CHANGELOG = ROOT / "django-ma/src/changelog.md"
TEMPLATES_DIR = ROOT / "templates"

print("=== Обновление версии ===")
print(f"Рабочая папка ROOT: {ROOT}")
print(f"pyproject.toml: {PYPROJECT}")
print(f"Папка templates: {TEMPLATES_DIR}")


def render_file(src: Path, dst: Path, context: dict):
    if not src.exists():
        raise FileNotFoundError(f"Шаблон не найден: {src}")
    
    template = Template(src.read_text(encoding="utf-8"))
    rendered = template.render(**context)

    dst.parent.mkdir(parents=True, exist_ok=True)
    dst.write_text(rendered, encoding="utf-8")

    print(f"[ОК] {src.name} → {dst.name}")


# ============================================================
# Обновление версии
# ============================================================

data = tomllib.loads(PYPROJECT.read_text(encoding="utf-8"))
current_version = data["project"]["version"]

version = current_version.replace("-dev", "")
major, minor, patch = map(int, version.split("."))
patch += 1
new_version = f"{major}.{minor}.{patch}-dev"

text = PYPROJECT.read_text(encoding="utf-8")
text = re.sub(
    r'version\s*=\s*"[^"]+"',
    f'version = "{new_version}"',
    text,
    count=1
)
PYPROJECT.write_text(text, encoding="utf-8")

print(f"[ОК] Версия обновлена: {current_version} → {new_version}")

build_id = os.getenv("BUILD_BUILDID") or os.getenv("BUILD_ID") or "local"

print(f"##vso[task.setvariable variable=APP_VERSION]{new_version}")
print(f"##vso[build.updatebuildnumber]{new_version} (build #{build_id})")

# ============================================================
# Changelog
# ============================================================

print("=== Обновление Changelog ===")

commit_message = os.getenv("BUILD_SOURCEVERSIONMESSAGE", "Local build")

entry = f"""## {new_version} (build #{build_id})
Date: {datetime.now():%Y-%m-%d %H:%M:%S}

{commit_message}

---

"""

old_content = CHANGELOG.read_text(encoding="utf-8") if CHANGELOG.exists() else ""
CHANGELOG.write_text(entry + old_content, encoding="utf-8")

print("[ОК] changelog.md обновлён")

# ============================================================
# Рендеринг шаблонов
# ============================================================

print("=== Рендеринг шаблонов ===")

branch = os.getenv("BUILD_SOURCEBRANCHNAME") or os.getenv("BRANCH") or "dev"

context = {
    "version": new_version,
    "branch": branch,
}

render_file(
    TEMPLATES_DIR / "django-ma-dockerfile.j2",
    ROOT / "django-ma/Dockerfile",
    context
)

render_file(
    TEMPLATES_DIR / "docker-compose.yml.j2",
    ROOT / "docker-compose.yml",
    context
)

print("=== Готово ===")