Files
EOS/scripts/cz_check_branch.py
T

72 lines
1.9 KiB
Python
Raw Normal View History

2025-10-28 02:50:31 +01:00
#!/usr/bin/env python3
"""Branch name checker using regex (compatible with Commitizen v4.9.1).
Cross-platform + .venv aware.
"""
import os
import re
import subprocess
import sys
from pathlib import Path
def find_cz() -> list[str]:
"""Return command to invoke Commitizen via virtualenv or globally."""
candidates = []
2025-10-28 02:50:31 +01:00
# 1️⃣ Currently active virtualenv
venv = os.getenv("VIRTUAL_ENV")
if venv:
candidates.append(Path(venv))
# 2️⃣ uv-managed virtualenv
uv_venv = Path(".uv") / "venv"
if uv_venv.exists():
candidates.append(uv_venv)
# 3️⃣ traditional .venv
dot_venv = Path(".venv")
if dot_venv.exists():
candidates.append(dot_venv)
# Check each candidate for Commitizen binary
for base in candidates:
cz_path = base / ("Scripts" if os.name == "nt" else "bin") / ("cz.exe" if os.name == "nt" else "cz")
if cz_path.exists():
return [str(cz_path)]
# 4️⃣ fallback to uv run cz
try:
subprocess.run(["uv", "run", "cz", "--version"], check=True, stdout=subprocess.DEVNULL)
return ["uv", "run", "cz"]
except (subprocess.CalledProcessError, FileNotFoundError):
pass
# 5️⃣ fallback to system cz
return ["cz"]
2025-10-28 02:50:31 +01:00
def main():
# Get current branch name
try:
branch = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"], text=True).strip()
except subprocess.CalledProcessError:
print("❌ Could not determine current branch name.")
return 1
# Regex pattern
pattern = r"^(feat|fix|chore|docs|refactor|test)/[a-z0-9._-]+$"
print(f"🔍 Checking branch name '{branch}'...")
if not re.match(pattern, branch):
print(f"❌ Branch name '{branch}' does not match pattern '{pattern}'")
return 1
print("✅ Branch name is valid.")
return 0
if __name__ == "__main__":
sys.exit(main())