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


import os
import re
import tomllib

from pathlib import Path
from datetime import datetime
from jinja2 import Template

ROOT = Path(__file__).resolve().parent

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


def render_file(src, dst, context):
    template = Template(Path(src).read_text())
    rendered = template.render(**context)

    dst = Path(dst)
    dst.parent.mkdir(parents=True, exist_ok=True)
    dst.write_text(rendered)

    print(f"[OK] {src} -> {dst}")


print("=== Version bump ===")

data = tomllib.loads(PYPROJECT.read_text())

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()

text = re.sub(
    r'version\s*=\s*"[^"]+"',
    f'version = "{new_version}"',
    text,
    count=1
)

PYPROJECT.write_text(text)

print(f"[OK] Version: {current_version} -> {new_version}")

build_id = os.getenv("BUILD_BUILDID", "local")

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

print(
    f"##vso[build.updatebuildnumber]"
    f"{new_version} (build #{build_id})"
)

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 = ""

if CHANGELOG.exists():
    old_content = CHANGELOG.read_text()

CHANGELOG.write_text(entry + old_content)

print("[OK] changelog.md updated")

print("=== Template rendering ===")

branch = os.getenv(
    "BUILD_SOURCEBRANCHNAME",
    "dev"
)

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

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

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

print("Done.")