mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-06 07:15:41 -06:00
126 lines
3.3 KiB
Python
126 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Post-commit hook script to automatically create git tags based on the version in Cargo.toml.
|
|
|
|
This script reads the current version from Cargo.toml and creates a git tag with that version.
|
|
It's designed to run after the version has been bumped by the bump-version.py script.
|
|
|
|
Usage: python scripts/tag-version.py
|
|
"""
|
|
|
|
import sys
|
|
import subprocess
|
|
import re
|
|
from pathlib import Path
|
|
|
|
|
|
def get_version_from_cargo_toml():
|
|
"""Get the current version from Cargo.toml."""
|
|
cargo_toml_path = Path("Cargo.toml")
|
|
|
|
if not cargo_toml_path.exists():
|
|
print("Cargo.toml not found", file=sys.stderr)
|
|
return None
|
|
|
|
try:
|
|
with open(cargo_toml_path, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Look for version = "x.y.z" pattern
|
|
version_match = re.search(r'version\s*=\s*["\']([^"\']+)["\']', content)
|
|
|
|
if version_match:
|
|
return version_match.group(1)
|
|
else:
|
|
print("Could not find version in Cargo.toml", file=sys.stderr)
|
|
return None
|
|
|
|
except Exception as e:
|
|
print(f"Error reading Cargo.toml: {e}", file=sys.stderr)
|
|
return None
|
|
|
|
|
|
def get_existing_tags():
|
|
"""Get list of existing git tags."""
|
|
try:
|
|
result = subprocess.run(
|
|
["git", "tag", "--list"],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True
|
|
)
|
|
return result.stdout.strip().split('\n') if result.stdout.strip() else []
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error getting git tags: {e}", file=sys.stderr)
|
|
return []
|
|
|
|
|
|
def create_git_tag(version):
|
|
"""Create a git tag with the specified version."""
|
|
tag_name = f"v{version}"
|
|
|
|
try:
|
|
# Check if tag already exists
|
|
existing_tags = get_existing_tags()
|
|
if tag_name in existing_tags:
|
|
print(f"Tag {tag_name} already exists, skipping")
|
|
return True
|
|
|
|
# Create the tag
|
|
result = subprocess.run(
|
|
["git", "tag", tag_name],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True
|
|
)
|
|
|
|
print(f"Successfully created tag: {tag_name}")
|
|
return True
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error creating git tag: {e}", file=sys.stderr)
|
|
print(f"stdout: {e.stdout}", file=sys.stderr)
|
|
print(f"stderr: {e.stderr}", file=sys.stderr)
|
|
return False
|
|
|
|
|
|
def is_git_repository():
|
|
"""Check if we're in a git repository."""
|
|
try:
|
|
subprocess.run(
|
|
["git", "rev-parse", "--git-dir"],
|
|
capture_output=True,
|
|
check=True
|
|
)
|
|
return True
|
|
except subprocess.CalledProcessError:
|
|
return False
|
|
|
|
|
|
def main():
|
|
# Check if we're in a git repository
|
|
if not is_git_repository():
|
|
print("Not in a git repository, skipping tag creation")
|
|
sys.exit(0)
|
|
|
|
# Get the current version from Cargo.toml
|
|
version = get_version_from_cargo_toml()
|
|
|
|
if not version:
|
|
print("Could not determine version, skipping tag creation")
|
|
sys.exit(0)
|
|
|
|
print(f"Current version: {version}")
|
|
|
|
# Create the git tag
|
|
if create_git_tag(version):
|
|
print("Tag creation completed successfully")
|
|
sys.exit(0)
|
|
else:
|
|
print("Tag creation failed", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|