#!/usr/bin/env python3 """ Creates an annotated git tag for a given version number. The tag will include the version number and changes for given version. Usage: tag_version [version] """ import subprocess import sys import textwrap import yaml import toot from datetime import date from os import path from pkg_resources import get_distribution path = path.join(path.dirname(path.dirname(path.abspath(__file__))), "changelog.yaml") with open(path, "r") as f: changelog = yaml.safe_load(f) if len(sys.argv) != 2: print("Wrong argument count", file=sys.stderr) sys.exit(1) version = sys.argv[1] changelog_item = changelog.get(version) if not changelog_item: print(f"Version `{version}` not found in changelog.", file=sys.stderr) sys.exit(1) if toot.__version__ != version: print(f"toot.__version__ is `{toot.__version__}`, expected {version}.", file=sys.stderr) sys.exit(1) dist_version = get_distribution('toot').version if dist_version != version: print(f"Version in setup.py is `{dist_version}`, expected {version}.", file=sys.stderr) sys.exit(1) release_date = changelog_item["date"] changes = changelog_item["changes"] if not isinstance(release_date, date): print(f"Release date not set for version `{version}` in the changelog.", file=sys.stderr) sys.exit(1) commit_message = f"toot {version}\n\n" for c in changes: lines = textwrap.wrap(c, 70) initial = True for line in lines: lead = " *" if initial else " " initial = False commit_message += f"{lead} {line}\n" proc = subprocess.run(["git", "tag", "-a", version, "-m", commit_message]) if proc.returncode != 0: sys.exit(1) print() print(commit_message) print() print(f"Version {version} tagged \\o/")