[Pre Commit][Added] Version check

To overcome comfy-cli limitations
This commit is contained in:
Salvador E. Tropea
2025-07-25 12:49:49 -03:00
parent d443749537
commit 062e1f5041
2 changed files with 94 additions and 1 deletions
+16 -1
View File
@@ -51,7 +51,7 @@ repos:
# The command to execute. It's expected to be found in the PATH
# of the environment where you run `git commit`.
entry: mypy
args: ["--explicit-package-bases", "source/"]
args: ["--explicit-package-bases", "src/"]
# 'system' tells pre-commit to find the command in the current environment
# instead of building an isolated one.
language: system
@@ -64,3 +64,18 @@ repos:
# whole project as configured in mypy.ini, rather than just the changed files.
# Try without it first.
# pass_filenames: false
# --- Version checking ---
- repo: local
hooks:
- id: version-check
name: check for version consistency
# The command to execute. It's a Python script.
entry: python tools/check_versions.py
# Use 'system' to run it with the current environment's Python
language: system
# This hook doesn't need to run on every file.
# It should run if either of the version files change.
# This makes it very fast.
files: ^(pyproject\.toml|src/nodes/__init__\.py)$
# The regex `^...$` ensures it matches the full path from the repo root.
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env python3
import re
import sys
from pathlib import Path
# --- Configuration ---
# The path to your pyproject.toml file, relative to the project root
PYPROJECT_PATH = Path("pyproject.toml")
# The path to the Python file containing the __version__ string
SOURCE_VERSION_PATH = Path("src/nodes/__init__.py")
# --- End Configuration ---
def get_version_from_pyproject(file_path: Path) -> str | None:
"""Extracts the version string from a pyproject.toml file."""
try:
content = file_path.read_text()
# A simple regex to find `version = "..."` under the `[project]` table
match = re.search(r'^version\s*=\s*"(.*?)"', content, re.MULTILINE)
if match:
return match.group(1)
except FileNotFoundError:
print(f"Error: {file_path} not found.", file=sys.stderr)
except Exception as e:
print(f"Error reading or parsing {file_path}: {e}", file=sys.stderr)
return None
def get_version_from_source(file_path: Path) -> str | None:
"""Extracts the __version__ string from a Python source file."""
try:
content = file_path.read_text()
# A simple regex to find `__version__ = "..."`
match = re.search(r'^__version__\s*=\s*"(.*?)"', content, re.MULTILINE)
if match:
return match.group(1)
except FileNotFoundError:
print(f"Error: {file_path} not found.", file=sys.stderr)
except Exception as e:
print(f"Error reading or parsing {file_path}: {e}", file=sys.stderr)
return None
def main() -> int:
"""
Compares version strings from pyproject.toml and the source code.
Exits with a non-zero status code if they do not match.
"""
print("--- Checking version consistency ---")
# Get versions
pyproject_version = get_version_from_pyproject(PYPROJECT_PATH)
source_version = get_version_from_source(SOURCE_VERSION_PATH)
# Validate that we found both
if not pyproject_version:
print(f"Error: Could not find version in {PYPROJECT_PATH}", file=sys.stderr)
return 1
if not source_version:
print(f"Error: Could not find `__version__` in {SOURCE_VERSION_PATH}", file=sys.stderr)
return 1
print(f"Version in {PYPROJECT_PATH}: {pyproject_version}")
print(f"Version in {SOURCE_VERSION_PATH}: {source_version}")
# Compare and exit
if pyproject_version == source_version:
print("✅ Versions are consistent.")
return 0
else:
print("\n❌ Error: Version mismatch!", file=sys.stderr)
print(f" pyproject.toml has version '{pyproject_version}'", file=sys.stderr)
print(f" {SOURCE_VERSION_PATH} has version '{source_version}'", file=sys.stderr)
print(" Please ensure both versions are identical.", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())