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:
yusyus
2026-01-31 17:03:40 +03:00
parent 86e77e2a30
commit f726a9abc5
5 changed files with 61 additions and 10 deletions

View 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()