create_release_tag.py
1 """ 2 How to test this script 3 ----------------------- 4 # Ensure origin points to your fork 5 git remote -v | grep origin 6 7 # Pretend we're releasing MLflow 9.0.0 8 git checkout -b branch-9.0 9 10 # First, test the dry run mode 11 python dev/create_release_tag.py --new-version 9.0.0 --dry-run 12 git tag -d v9.0.0 13 14 # Open https://github.com/<username>/mlflow/tree/v9.0.0 and verify that the tag does not exist. 15 16 # Then, test the non-dry run mode 17 python dev/create_release_tag.py --new-version 9.0.0 --no-dry-run 18 git tag -d v9.0.0 19 20 # Open https://github.com/<username>/mlflow/tree/v9.0.0 and verify that the tag exists now. 21 22 # Clean up the remote tag 23 git push --delete origin v9.0.0 24 25 # Clean up the local release branch 26 git checkout master 27 git branch -D branch-9.0 28 """ 29 30 import argparse 31 import os 32 import subprocess 33 34 35 def main(new_version: str, remote: str, dry_run: bool = False) -> None: 36 release_tag = f"v{new_version}" 37 subprocess.check_call(["git", "tag", release_tag]) 38 subprocess.check_call(["git", "push", remote, release_tag, *(["--dry-run"] if dry_run else [])]) 39 40 41 if __name__ == "__main__": 42 parser = argparse.ArgumentParser(description="Create a release tag") 43 parser.add_argument("--new-version", required=True, help="New version to release") 44 parser.add_argument("--remote", default="origin", help="Git remote to use (default: origin)") 45 parser.add_argument( 46 "--dry-run", 47 action="store_true", 48 default=os.environ.get("DRY_RUN", "true").lower() == "true", 49 help="Dry run mode (default: True, can be set via DRY_RUN env var)", 50 ) 51 parser.add_argument( 52 "--no-dry-run", 53 action="store_false", 54 dest="dry_run", 55 help="Disable dry run mode", 56 ) 57 args = parser.parse_args() 58 main(args.new_version, args.remote, args.dry_run)