From 9634cddcf2f7a79a9ea5a256795e1eb3fc9fcceb Mon Sep 17 00:00:00 2001 From: Aditya Srivastava Date: Sun, 27 Jun 2021 04:43:48 +0530 Subject: [PATCH 1/3] fix: update breakingChangeFooter Signed-off-by: Aditya Srivastava --- .../conventionalcommits/ConventionalCommits.java | 15 ++++++++++----- .../ConventionalCommitsTest.java | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java index a67273d..cfb7508 100644 --- a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java +++ b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java @@ -27,13 +27,18 @@ public Version nextVersion(Version in, List commits) { } private boolean breakingChangeFooter(String commit){ - int startIndex = commit.lastIndexOf("\n"); - String result = commit; + boolean result = false; + String[] lines = commit.split("[\\r\\n]+"); - if(startIndex!=-1 && startIndex!= commit.length()){ - result = commit.substring(startIndex+1); + for(String line: lines){ + if (line.startsWith("BREAKING CHANGE") || line.startsWith("BREAKING-CHANGE")) { + result = true; + break; + } } - return result.startsWith("BREAKING CHANGE"); + + return result; } + } diff --git a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java index b523b07..efe8f40 100644 --- a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java +++ b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java @@ -105,14 +105,14 @@ public void willBumpMajorVersion_FooterMultipleLineCommit() { } @Test - public void willNotBumpMajorVersion_ExclamationMultipleLineCommitNotFooter() { + public void willBumpMajorVersion_ExclamationMultipleLineCommitNotFooter() { ConventionalCommits cc = new ConventionalCommits(); Version out = cc.nextVersion(Version.valueOf("0.0.1"), Collections.singletonList( - "chore: new major version \nBREAKING CHANGE: new breaking change \nstupid footer" + "chore: new major version \nBREAKING CHANGE: new breaking change \nextra footer" )); assertThat(out, is(notNullValue())); - assertThat(out.toString(), is("0.0.2")); + assertThat(out.toString(), is("1.0.0")); } @Test From 432a6ce96e601247704bd7486a72a4d47efdc793 Mon Sep 17 00:00:00 2001 From: Aditya Srivastava Date: Mon, 28 Jun 2021 15:13:36 +0530 Subject: [PATCH 2/3] fix: add ':' to check breaking change Signed-off-by: Aditya Srivastava --- .../plugins/conventionalcommits/ConventionalCommits.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java index cfb7508..a85e332 100644 --- a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java +++ b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java @@ -32,7 +32,7 @@ private boolean breakingChangeFooter(String commit){ String[] lines = commit.split("[\\r\\n]+"); for(String line: lines){ - if (line.startsWith("BREAKING CHANGE") || line.startsWith("BREAKING-CHANGE")) { + if (line.startsWith("BREAKING CHANGE:") || line.startsWith("BREAKING-CHANGE:")) { result = true; break; } From 06da65acd8b30c286da5d2897117c7d3e34dccf2 Mon Sep 17 00:00:00 2001 From: Aditya Srivastava Date: Fri, 2 Jul 2021 14:19:31 +0530 Subject: [PATCH 3/3] chore: add logging for breaking change case sensitivity Signed-off-by: Aditya Srivastava --- .../ConventionalCommits.java | 18 +++++++-- .../conventionalcommits/utils/LogUtils.java | 39 +++++++++++++++++++ .../ConventionalCommitsTest.java | 13 +++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/main/java/io/jenkins/plugins/conventionalcommits/utils/LogUtils.java diff --git a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java index a85e332..1e211df 100644 --- a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java +++ b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java @@ -1,18 +1,23 @@ package io.jenkins.plugins.conventionalcommits; import com.github.zafarkhaja.semver.Version; +import io.jenkins.plugins.conventionalcommits.utils.LogUtils; + import java.util.List; +import java.util.logging.Level; import java.util.stream.Collectors; public class ConventionalCommits { + LogUtils logger = new LogUtils(); + private List filterMergeCommits(List commits) { return commits.stream().filter(s -> !s.startsWith("Merge")).collect(Collectors.toList()); } public Version nextVersion(Version in, List commits) { List filtered = filterMergeCommits(commits); - List breaking = filtered.stream().filter(s -> s.contains("!:") || breakingChangeFooter(s) ).collect(Collectors.toList()); + List breaking = filtered.stream().filter(s -> s.contains("!:") || breakingChangeFooter(s)).collect(Collectors.toList()); List features = filtered.stream().filter(s -> s.startsWith("feat")).collect(Collectors.toList()); if (!breaking.isEmpty()) { @@ -26,15 +31,22 @@ public Version nextVersion(Version in, List commits) { return in.incrementPatchVersion(); } - private boolean breakingChangeFooter(String commit){ + private boolean breakingChangeFooter(String commit) { boolean result = false; String[] lines = commit.split("[\\r\\n]+"); - for(String line: lines){ + for (String line : lines) { if (line.startsWith("BREAKING CHANGE:") || line.startsWith("BREAKING-CHANGE:")) { result = true; break; + } else if (line.toLowerCase().startsWith("breaking change:") || line.toLowerCase().startsWith("breaking-change:")) { + String keyword = line.substring(0, 16); + logger.log( + Level.INFO, Level.INFO, Level.FINE, Level.FINE, true, + "'" + keyword + "' detected which is not compliant with Conventional Commits Guidelines " + + "(https://www.conventionalcommits.org/en/v1.0.0/#summary)" + ); } } diff --git a/src/main/java/io/jenkins/plugins/conventionalcommits/utils/LogUtils.java b/src/main/java/io/jenkins/plugins/conventionalcommits/utils/LogUtils.java new file mode 100644 index 0000000..a8cd549 --- /dev/null +++ b/src/main/java/io/jenkins/plugins/conventionalcommits/utils/LogUtils.java @@ -0,0 +1,39 @@ +package io.jenkins.plugins.conventionalcommits.utils; + + +import io.jenkins.plugins.conventionalcommits.ConventionalCommits; + +import java.util.logging.ConsoleHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class LogUtils { + + private static final Logger LOGGER = Logger.getLogger(ConventionalCommits.class.getName()); + private static Handler consoleHandler = new ConsoleHandler(); + + private void beforeLogging(Level loggerLevel, Level consoleLevel){ + LOGGER.setLevel(loggerLevel); + consoleHandler.setLevel(consoleLevel); + LOGGER.addHandler(consoleHandler); + } + + private void afterLogging(Level loggerLevel, Level consoleLevel){ + LOGGER.removeHandler(consoleHandler); + LOGGER.setLevel(loggerLevel); + consoleHandler.setLevel(consoleLevel); + } + + public void log(Level initialLogLevel, Level initialConsoleLevel, Level requiredLogLevel, + Level requiredConsoleLevel, boolean revertAfterLogging, String message) { + /* + revertAfterLogging (boolean): revert to initial log and console level after logging the current log string + */ + + beforeLogging(requiredLogLevel, requiredConsoleLevel); + LOGGER.log(requiredLogLevel, message); + if (revertAfterLogging) + afterLogging(initialLogLevel, initialConsoleLevel); + } +} diff --git a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java index efe8f40..e6c7038 100644 --- a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java +++ b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java @@ -138,4 +138,17 @@ public void willBumpMajorVersion_MultipleCommitsMultipleLineFooter() { assertThat(out, is(notNullValue())); assertThat(out.toString(), is("1.0.0")); } + + @Test + public void willNotBumpMajorVersion_BreakingChangeCaseSensitivity() { + ConventionalCommits cc = new ConventionalCommits(); + Version out = cc.nextVersion(Version.valueOf("0.0.1"), Arrays.asList( + "feat: add new feature", + "fix: bug fix \nBreaking Change: breaking change", + "fix: bug fix \nBREAKING change: breaking change" + )); + + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("0.1.0")); + } }