refactor: Centralize version management in single source of truth
- Create src/skill_seekers/_version.py as single source of truth - Read version dynamically from pyproject.toml at runtime - Update all __init__.py files to import from _version module - Add tomli dependency for Python <3.11 (built-in tomllib for 3.11+) - Remove hardcoded version duplicates (2.7.2 in 3 files) - Fixes version mismatch: pyproject.toml (2.7.4) vs __init__.py (2.7.2) Benefits: - Single place to update version (pyproject.toml) - No more version mismatches across files - Automatic version consistency - Works across Python 3.10-3.13 Before: - pyproject.toml: 2.7.4 - src/skill_seekers/__init__.py: 2.7.2 - src/skill_seekers/cli/__init__.py: 2.7.2 - src/skill_seekers/mcp/__init__.py: 2.7.2 After: - pyproject.toml: 2.7.4 (single source of truth) - All other files: import from _version.py
This commit is contained in:
52
src/skill_seekers/_version.py
Normal file
52
src/skill_seekers/_version.py
Normal file
@@ -0,0 +1,52 @@
|
||||
"""
|
||||
Single source of truth for skill-seekers version.
|
||||
|
||||
This module dynamically reads the version from pyproject.toml to avoid
|
||||
version mismatches across multiple files.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Use tomllib (built-in) for Python 3.11+, tomli (package) for earlier versions
|
||||
if sys.version_info >= (3, 11):
|
||||
import tomllib
|
||||
else:
|
||||
try:
|
||||
import tomli as tomllib
|
||||
except ImportError:
|
||||
# Fallback if tomli not available
|
||||
tomllib = None
|
||||
|
||||
|
||||
def get_version() -> str:
|
||||
"""
|
||||
Read version from pyproject.toml.
|
||||
|
||||
Returns:
|
||||
Version string (e.g., "2.7.4")
|
||||
"""
|
||||
if tomllib is None:
|
||||
# Fallback if TOML library not available
|
||||
return "2.7.4" # Hardcoded fallback
|
||||
|
||||
try:
|
||||
# Get path to pyproject.toml (3 levels up from this file)
|
||||
repo_root = Path(__file__).parent.parent.parent
|
||||
pyproject_path = repo_root / "pyproject.toml"
|
||||
|
||||
if not pyproject_path.exists():
|
||||
# Fallback for installed package
|
||||
return "2.7.4" # Hardcoded fallback
|
||||
|
||||
with open(pyproject_path, "rb") as f:
|
||||
pyproject_data = tomllib.load(f)
|
||||
|
||||
return pyproject_data["project"]["version"]
|
||||
|
||||
except Exception:
|
||||
# Fallback if anything goes wrong
|
||||
return "2.7.4" # Hardcoded fallback
|
||||
|
||||
|
||||
__version__ = get_version()
|
||||
Reference in New Issue
Block a user