#!/usr/bin/env python3 """Read bump-my-version's current_version from a local file or Git ref.""" from __future__ import annotations import argparse import subprocess import tomllib def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument("config_file") parser.add_argument("--ref") return parser.parse_args() def main() -> None: args = parse_args() try: if args.ref: content = subprocess.check_output( ["git", "show", f"{args.ref}:{args.config_file}"], ) else: with open(args.config_file, "rb") as config_file: content = config_file.read() except (OSError, subprocess.CalledProcessError) as error: raise SystemExit(f"Could not load {args.config_file}: {error}") from error try: version = tomllib.loads(content.decode())["tool"]["bumpversion"]["current_version"] except (KeyError, TypeError, UnicodeDecodeError, tomllib.TOMLDecodeError) as error: raise SystemExit( f"Could not read tool.bumpversion.current_version from {args.config_file}: {error}" ) from error if not isinstance(version, str): raise SystemExit("tool.bumpversion.current_version must be a string") print(version) if __name__ == "__main__": main()