From 5b761bbca1f3df5a06d53c8393ee719988cebbf8 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 2 Jul 2026 07:42:08 +0200 Subject: [PATCH] add script to make release tags Now that the changelog entry is also include in the tag message, this script makes sure that happens, and the entry also ends up in CHANGELOG.md --- tools/make-release-tag.py | 56 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 tools/make-release-tag.py diff --git a/tools/make-release-tag.py b/tools/make-release-tag.py new file mode 100755 index 000000000..b8e5ce137 --- /dev/null +++ b/tools/make-release-tag.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +"""A script to check everything is in order, then make the release tag.""" + +import git +import re +import sys + +from pathlib import Path + + +def main(): + project_dir = Path(__file__).parent.parent + + for line in (project_dir / 'app/build.gradle.kts').open(): + m = re.search(r"""versionName\s*=\s*["']([^"']+)["']""", line) + if m: + current_version = m.group(1) + break + + changelog_file = project_dir / "CHANGELOG.md" + changelog = changelog_file.read_text() + versions = list() + entries = dict() + for entry in changelog.split('###'): + if not entry: + continue + m = re.match(r" *(\S+) *\([0-9-]+\)\n(.*)", entry, flags=re.DOTALL) + if not m: + print('ERROR: broken entry format in CHANGELOG.md:', entry) + sys.exit(1) + version = m.group(1) + versions.append(version) + entries[version] = m.group(2).strip() + + if current_version not in versions: + print(f"ERROR: CHANGELOG.md missing entry for {current_version}") + sys.exit(1) + + repo = git.Repo(project_dir) + for tag in sorted( + repo.tags, + key=lambda t: t.tag.tagged_date if t.tag is not None else 0, + reverse=True, + ): + if tag.name == current_version: + print(f"ERROR: current version {tag.name} tag exists at {tag.commit}") + sys.exit(1) + + message = entries[current_version] + repo.create_tag(current_version, message=message, sign=True) + print(f'Tagged current version {current_version} with changelog entry:\n\n{message}') + + +if __name__ == "__main__": + main()