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.")