From 3afeb78a604d53106e6e6dc89d43efa7bed95092 Mon Sep 17 00:00:00 2001 From: joaorodrigues Date: Tue, 1 Jun 2021 13:49:17 +0100 Subject: [PATCH] feat: add breaking change footer and !: --- .../ConventionalCommits.java | 13 +++- .../ConventionalCommitsTest.java | 65 ++++++++++++++++++- 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java index 80aefbb..a67273d 100644 --- a/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java +++ b/src/main/java/io/jenkins/plugins/conventionalcommits/ConventionalCommits.java @@ -12,7 +12,7 @@ private List filterMergeCommits(List commits) { public Version nextVersion(Version in, List commits) { List filtered = filterMergeCommits(commits); - List breaking = filtered.stream().filter(s -> s.startsWith("BREAKING CHANGE")).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()) { @@ -25,4 +25,15 @@ public Version nextVersion(Version in, List commits) { return in.incrementPatchVersion(); } + + private boolean breakingChangeFooter(String commit){ + int startIndex = commit.lastIndexOf("\n"); + + String result = commit; + + if(startIndex!=-1 && startIndex!= commit.length()){ + result = commit.substring(startIndex+1); + } + return result.startsWith("BREAKING CHANGE"); + } } diff --git a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java index 5326188..b523b07 100644 --- a/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java +++ b/src/test/java/io/jenkins/plugins/conventionalcommits/ConventionalCommitsTest.java @@ -1,11 +1,14 @@ package io.jenkins.plugins.conventionalcommits; import com.github.zafarkhaja.semver.Version; -import java.util.Arrays; import org.junit.Test; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.CoreMatchers.*; +import java.util.Arrays; +import java.util.Collections; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.MatcherAssert.assertThat; public class ConventionalCommitsTest { @@ -79,4 +82,60 @@ public void willBumpMajorVersion_MultipleCommits() { assertThat(out, is(notNullValue())); assertThat(out.toString(), is("1.0.0")); } + + @Test + public void willBumpMajorVersion_ExclamationCommit() { + ConventionalCommits cc = new ConventionalCommits(); + + Version out = cc.nextVersion(Version.valueOf("0.0.1"), Collections.singletonList( + "feat!: new major version")); + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("1.0.0")); + } + + @Test + public void willBumpMajorVersion_FooterMultipleLineCommit() { + ConventionalCommits cc = new ConventionalCommits(); + + Version out = cc.nextVersion(Version.valueOf("0.0.1"), Collections.singletonList( + "feat: new major version \nBREAKING CHANGE: new breaking change" + )); + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("1.0.0")); + } + + @Test + public void willNotBumpMajorVersion_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" + )); + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("0.0.2")); + } + + @Test + public void willBumpMajorVersion_MultipleCommitsMultipleLineExclamation() { + ConventionalCommits cc = new ConventionalCommits(); + + Version out = cc.nextVersion(Version.valueOf("0.0.1"), Arrays.asList( + "feat!: add new feature", + "fix: bug fix", + "fix: another fix")); + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("1.0.0")); + } + + @Test + public void willBumpMajorVersion_MultipleCommitsMultipleLineFooter() { + 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: another fix")); + assertThat(out, is(notNullValue())); + assertThat(out.toString(), is("1.0.0")); + } }