diff --git a/commitizen/providers/scm_provider.py b/commitizen/providers/scm_provider.py index cb575148c..826324d6a 100644 --- a/commitizen/providers/scm_provider.py +++ b/commitizen/providers/scm_provider.py @@ -1,5 +1,7 @@ from __future__ import annotations +from packaging.version import InvalidVersion + from commitizen.git import get_tags from commitizen.providers.base_provider import VersionProvider from commitizen.tags import TagRules @@ -18,7 +20,13 @@ def get_version(self) -> str: rules = TagRules.from_settings(self.config.settings) tags = get_tags(reachable_only=True) version_tags = rules.get_version_tags(tags) - versions = sorted(rules.extract_version(t) for t in version_tags) + versions = [] + for t in version_tags: + try: + versions.append(rules.extract_version(t)) + except InvalidVersion: + continue + versions = sorted(versions) if not versions: return "0.0.0" return str(versions[-1]) diff --git a/tests/providers/test_scm_provider.py b/tests/providers/test_scm_provider.py index 9d955b232..1682865b3 100644 --- a/tests/providers/test_scm_provider.py +++ b/tests/providers/test_scm_provider.py @@ -23,6 +23,7 @@ ("$version", "0.1.0", "0.1.0"), ("$version", "v0.1.0", "0.1.0"), ("$version", "v-0.1.0", "0.0.0"), + ("$version", "1.0.0.xxxx", "0.0.0"), # If tag_format is not None or $version, TAG_FORMAT_REGEXS are used, which are # much more lenient but require a v prefix. ("v$version", "v0.1.0", "0.1.0"),