diff --git a/markitect/__version__.py b/markitect/__version__.py index 369ad544..e4c5b0cb 100644 --- a/markitect/__version__.py +++ b/markitect/__version__.py @@ -49,33 +49,61 @@ def get_version_info(): 'is_git_repo': False } +def _normalize_release_info(raw): + """Ensure release info dict has the keys the CLI release command expects.""" + if 'full_version' in raw: + return raw # already in expected format + + import subprocess + + version = raw.get('version', 'unknown') + is_dev = raw.get('is_development', '.dev' in version) + commit = raw.get('git_commit', 'unknown') + + # Detect git repo and current tag + is_git_repo = False + git_tag = None + try: + subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL) + is_git_repo = True + tag_out = subprocess.check_output( + ['git', 'describe', '--tags', '--exact-match', 'HEAD'], + stderr=subprocess.DEVNULL, + ).decode().strip() + if tag_out: + git_tag = tag_out + except (subprocess.CalledProcessError, FileNotFoundError): + pass + + return { + 'full_version': version, + 'release_type': 'development' if is_dev else 'release', + 'build_from': 'git' if is_git_repo else 'source', + 'commit': commit, + 'clean_build': not is_dev, + 'is_git_repo': is_git_repo, + 'git_tag': git_tag, + } + + def get_release_info(): """Get release information by delegating to release-management capability.""" try: - # Delegate to release-management capability from pathlib import Path project_root = Path(__file__).parent.parent try: from release_management.utils.version import get_release_info as rm_get_release_info - return rm_get_release_info(project_root) + return _normalize_release_info(rm_get_release_info(project_root)) except ImportError: - # Fallback if release-management capability is not available pass except Exception: pass - # Simple fallback implementation - from datetime import datetime + # Fallback — build from version_info directly version_info = get_version_info() - - return { - 'name': 'MarkiTect', + return _normalize_release_info({ 'version': version_info['full_version'], - 'short_version': version_info['short_version'], 'is_development': version_info['is_dev'], - 'git_branch': version_info.get('git_branch', 'unknown'), 'git_commit': version_info.get('git_commit', 'unknown'), - 'build_date': datetime.now().isoformat(), - 'python_version': f"{__import__('sys').version_info.major}.{__import__('sys').version_info.minor}.{__import__('sys').version_info.micro}" - } \ No newline at end of file + }) \ No newline at end of file