diff --git a/capabilities/release-management/src/release_management/cli/main.py b/capabilities/release-management/src/release_management/cli/main.py index e809f330..87387e16 100644 --- a/capabilities/release-management/src/release_management/cli/main.py +++ b/capabilities/release-management/src/release_management/cli/main.py @@ -261,5 +261,30 @@ def version_info(ctx, suggest: bool): print(f" {key.replace('_', ' ').title()}: {value}") +@main.command('check-consistency') +@click.option('--version', required=True, help='Version to check (e.g., 0.10.0)') +@click.pass_context +def check_consistency(ctx, version: str): + """Check consistency between CHANGELOG version and git tags.""" + manager = ReleaseManager( + project_root=ctx.obj['project_root'], + dry_run=ctx.obj['dry_run'], + force=ctx.obj['force'] + ) + + is_consistent, issues = manager.check_version_consistency(version) + + if is_consistent: + print(f"āœ… Version {version} is consistent:") + print(f" - CHANGELOG has section for {version}") + print(f" - Git tag v{version} exists") + print(f" - [Unreleased] section present") + else: + print(f"āŒ Version {version} has consistency issues:") + for issue in issues: + print(f" - {issue}") + sys.exit(1) + + if __name__ == '__main__': main() \ No newline at end of file diff --git a/capabilities/release-management/src/release_management/core/manager.py b/capabilities/release-management/src/release_management/core/manager.py index 88cb67b2..63fb0c90 100644 --- a/capabilities/release-management/src/release_management/core/manager.py +++ b/capabilities/release-management/src/release_management/core/manager.py @@ -94,6 +94,15 @@ class ReleaseManager: print(f" - {issue}") return False + # Check version-tag consistency (ensure CHANGELOG has version section) + changelog_valid, changelog_issues = self.validator.validate_changelog_version(version) + if not changelog_valid and not self.force: + print(f"āŒ Cannot create tag for version {version}:") + for issue in changelog_issues: + print(f" - {issue}") + print("\nšŸ’” Tip: Add a section for version {version} to CHANGELOG.md before tagging") + return False + return self.git_manager.create_tag(version, message, push=push) def build_packages(self) -> bool: @@ -213,4 +222,15 @@ class ReleaseManager: Returns: List of commit messages since last tag """ - return self.git_manager.get_commits_since_tag() \ No newline at end of file + return self.git_manager.get_commits_since_tag() + + def check_version_consistency(self, version: str) -> Tuple[bool, List[str]]: + """Check consistency between CHANGELOG version and git tags. + + Args: + version: Version to check (e.g., "0.10.0") + + Returns: + Tuple of (is_consistent, list_of_issues) + """ + return self.validator.check_version_tag_consistency(version) \ No newline at end of file