fix(version): normalize release info for CLI release command
Add _normalize_release_info() to ensure get_release_info() returns keys expected by the CLI release command regardless of whether the release-management capability is available. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -49,33 +49,61 @@ def get_version_info():
|
|||||||
'is_git_repo': False
|
'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():
|
def get_release_info():
|
||||||
"""Get release information by delegating to release-management capability."""
|
"""Get release information by delegating to release-management capability."""
|
||||||
try:
|
try:
|
||||||
# Delegate to release-management capability
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
project_root = Path(__file__).parent.parent
|
project_root = Path(__file__).parent.parent
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from release_management.utils.version import get_release_info as rm_get_release_info
|
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:
|
except ImportError:
|
||||||
# Fallback if release-management capability is not available
|
|
||||||
pass
|
pass
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Simple fallback implementation
|
# Fallback — build from version_info directly
|
||||||
from datetime import datetime
|
|
||||||
version_info = get_version_info()
|
version_info = get_version_info()
|
||||||
|
return _normalize_release_info({
|
||||||
return {
|
|
||||||
'name': 'MarkiTect',
|
|
||||||
'version': version_info['full_version'],
|
'version': version_info['full_version'],
|
||||||
'short_version': version_info['short_version'],
|
|
||||||
'is_development': version_info['is_dev'],
|
'is_development': version_info['is_dev'],
|
||||||
'git_branch': version_info.get('git_branch', 'unknown'),
|
|
||||||
'git_commit': version_info.get('git_commit', '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}"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user