#!/usr/bin/env python3 """Thin CLI over ``shared.changelog`` for the release workflow. Keeps all changelog parsing in one tested module instead of inline shell/Python in the workflow. Reads the changelog file given as an argument. Usage: changelog_cli.py top-version # newest entry's version changelog_cli.py bump-kind # major|minor|patch|none vs changelog_cli.py payload # JSON {version, notes, date_label} """ import json import pathlib import sys sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "src" / "shared")) from shared.changelog import bump_kind, entry_for, top_version # noqa: E402 def main(argv: list[str]) -> int: if len(argv) < 3: sys.exit(__doc__) cmd, path = argv[1], argv[2] text = pathlib.Path(path).read_text() if cmd == "top-version": sys.stdout.write(top_version(text) or "") elif cmd == "bump-kind": prev = argv[3].lstrip("v") top = top_version(text) sys.stdout.write((bump_kind(top, prev) or "none") if top else "none") elif cmd == "payload": version = argv[3].lstrip("v") entry = entry_for(text, version) sys.stdout.write( json.dumps( { "version": version, "notes": entry.body if entry else "", "date_label": entry.date_label if entry else "", } ) ) else: sys.exit(f"unknown command: {cmd}") return 0 if __name__ == "__main__": raise SystemExit(main(sys.argv))