mac-messages-mcp

  • scripts
#!/usr/bin/env python3 """ Bump version script for mac-messages-mcp package. Usage: python scripts/bump_version.py [major|minor|patch] python scripts/bump_version.py --help Default is patch if no argument is provided.] """ import os import re import subprocess import sys from pathlib import Path # Define version pattern VERSION_PATTERN = r'\d+\.\d+\.\d+' def print_help(): """Print help information""" print(__doc__) sys.exit(0) def get_current_version(): """Read the current version from pyproject.toml""" pyproject_path = Path("pyproject.toml") if not pyproject_path.exists(): print("Error: pyproject.toml not found!") sys.exit(1) content = pyproject_path.read_text() version_match = re.search(r'version = "(' + VERSION_PATTERN + ')"', content) if not version_match: print("Error: Could not find version in pyproject.toml!") sys.exit(1) return version_match.group(1) def bump_version(current_version, bump_type): """Bump the version according to the specified type""" major, minor, patch = map(int, current_version.split('.')) if bump_type == "major": major += 1 minor = 0 patch = 0 elif bump_type == "minor": minor += 1 patch = 0 elif bump_type == "patch": patch += 1 else: print(f"Error: Invalid bump type '{bump_type}'!") print("Usage: python scripts/bump_version.py [major|minor|patch]") sys.exit(1) return f"{major}.{minor}.{patch}" def update_files(new_version): """Update version in all relevant files""" # Update pyproject.toml pyproject_path = Path("pyproject.toml") content = pyproject_path.read_text() updated_content = re.sub( r'version = "' + VERSION_PATTERN + '"', f'version = "{new_version}"', content ) pyproject_path.write_text(updated_content) # Update __init__.py init_path = Path("mac_messages_mcp/__init__.py") content = init_path.read_text() updated_content = re.sub( r'__version__ = "' + VERSION_PATTERN + '"', f'__version__ = "{new_version}"', content ) init_path.write_text(updated_content) print(f"Updated version to {new_version} in pyproject.toml and __init__.py") def create_git_tag(new_version): """Create a new git tag and push it""" tag_name = f"v{new_version}" # Create tag subprocess.run(["git", "tag", tag_name], check=True) print(f"Created git tag: {tag_name}") # Inform how to push the tag print("\nTo push the tag to GitHub and trigger a release, run:") print(f" git push origin {tag_name}") def main(): # Check for help request if len(sys.argv) > 1 and sys.argv[1] in ["-h", "--help", "help"]: print_help() # Determine bump type bump_type = "patch" # Default if len(sys.argv) > 1: bump_type = sys.argv[1].lower() if bump_type not in ["major", "minor", "patch"]: print(f"Invalid bump type: {bump_type}") print("Usage: python scripts/bump_version.py [major|minor|patch]") sys.exit(1) # Get current version current_version = get_current_version() print(f"Current version: {current_version}") # Bump version new_version = bump_version(current_version, bump_type) print(f"New version: {new_version}") # Update files update_files(new_version) # Ask to commit changes commit_changes = input("Do you want to commit these changes? [y/N]: ").lower() if commit_changes == "y": subprocess.run(["git", "add", "pyproject.toml", "mac_messages_mcp/__init__.py"], check=True) subprocess.run(["git", "commit", "-m", f"Bump version to {new_version}"], check=True) print("Changes committed.") # Create git tag create_tag = input(f"Do you want to create git tag v{new_version}? [y/N]: ").lower() if create_tag == "y": create_git_tag(new_version) if __name__ == "__main__": main()