From 9e9a9bcc3c97ffe1b214d85a3c4c8099937859bf Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 14 Jul 2022 22:58:08 +0100 Subject: [PATCH 1/5] test: reproduce bug in version parsing from commit logs --- tests/history/test_version.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/history/test_version.py b/tests/history/test_version.py index f62b2d513..d317dd351 100644 --- a/tests/history/test_version.py +++ b/tests/history/test_version.py @@ -162,6 +162,17 @@ def test_should_return_correct_version_from_large_prerelease(self): def test_should_return_correct_version_without_prerelease(self): assert get_current_release_version_by_commits() == "7.28.0" + @mock.patch( + "semantic_release.history.get_commit_log", + lambda: [ + ("211", "chore(deps): bump some-deps to 0.6.0"), + ("13", "fix(deps): bump other-deps to 1.2.3"), + ("13", "8.9.2"), + ], + ) + def test_should_ignore_deps_version_bump(self): + assert get_current_release_version_by_commits() == "8.9.2" + class TestGetNewVersion: def test_major_bump(self): From fb57492f35b2e41bb2fbabb1e9fea43c0c868a0e Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 14 Jul 2022 23:02:08 +0100 Subject: [PATCH 2/5] fix: ignore dependencies versions bump when parsing version from commit logs --- semantic_release/history/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semantic_release/history/__init__.py b/semantic_release/history/__init__.py index 4a47c8b9d..aeedac067 100644 --- a/semantic_release/history/__init__.py +++ b/semantic_release/history/__init__.py @@ -388,7 +388,7 @@ def get_current_release_version_by_commits() -> str: """ for commit_hash, commit_message in get_commit_log(): logger.debug(f"Checking commit {commit_hash}") - match = re.search(rf"{release_version_pattern}", commit_message) + match = re.match(rf"{release_version_pattern}", commit_message) if match: logger.debug(f"Version matches regex {commit_message}") return match.group(1).strip() From 65c796801cc6ea8994867a1dd1b169c319adf096 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 14 Jul 2022 23:11:06 +0100 Subject: [PATCH 3/5] fix: accept versions with 'v' as prefix --- semantic_release/history/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semantic_release/history/__init__.py b/semantic_release/history/__init__.py index aeedac067..704084a0b 100644 --- a/semantic_release/history/__init__.py +++ b/semantic_release/history/__init__.py @@ -27,7 +27,7 @@ prerelease_pattern = f"-{config.get('prerelease_tag')}\.\d+" version_pattern = f"(\d+\.\d+\.\d+({prerelease_pattern})?)" -release_version_pattern = f"(\d+\.\d+\.\d+(?!.*{prerelease_pattern}))" +release_version_pattern = f"v?(\d+\.\d+\.\d+(?!.*{prerelease_pattern}))" release_version_regex = rf"{release_version_pattern}" version_regex = rf"{version_pattern}" From f1fa070a0236e67be32567cad967d325af658cd0 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 14 Jul 2022 23:14:16 +0100 Subject: [PATCH 4/5] fix: return only captured group to exclude 'v' prefix --- semantic_release/vcs_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semantic_release/vcs_helpers.py b/semantic_release/vcs_helpers.py index cdfb1ae2f..d75393e49 100644 --- a/semantic_release/vcs_helpers.py +++ b/semantic_release/vcs_helpers.py @@ -82,7 +82,7 @@ def version_finder(tag): match = re.search(rf"{pattern}", i.name) if match: - return match.group(0).strip() + return match.group(1).strip() return None From c25c57e233838bdb309f6ab0f7d67d5a68732af0 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Thu, 14 Jul 2022 23:16:11 +0100 Subject: [PATCH 5/5] test: add missing groups to regexes --- tests/test_vcs_helpers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_vcs_helpers.py b/tests/test_vcs_helpers.py index 5a583a870..8e8412019 100644 --- a/tests/test_vcs_helpers.py +++ b/tests/test_vcs_helpers.py @@ -359,9 +359,9 @@ def test_checkout_should_checkout_correct_branch(mock_git): @pytest.mark.parametrize( "pattern, skip_tags,expected_result", [ - ("\d+.\d+.\d+", None, "2.0.0"), - ("\d+.\d+.\d+", ["v2.0.0"], "1.1.0"), - ("\d+.\d+.\d+", ["v0.1.0", "v1.0.0", "v1.1.0", "v2.0.0"], None), + ("(\d+.\d+.\d+)", None, "2.0.0"), + ("(\d+.\d+.\d+)", ["v2.0.0"], "1.1.0"), + ("(\d+.\d+.\d+)", ["v0.1.0", "v1.0.0", "v1.1.0", "v2.0.0"], None), ], ) def test_get_last_version(pattern, skip_tags, expected_result):