From 3394310437fa18bb3e5e69eb59420a68896916ea Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Mon, 15 Mar 2021 10:13:54 -0400 Subject: [PATCH] Fixes milestone in -dependencies bom for ga or rc release. (#236) * Updates isReleaseOrServiceRelease test for calver. * clarifies test name * Fixes milestone in -dependencies bom for ga or rc release. Previously if there was a -M* or -RC* in a spring-cloud-*-dependencies/pom.xml this would be skipped. This was do to lines and java regex mismatches. The change moves to using Matcher.lookingAt() which only considers the start of the line, not the end. Fixes gh-234 --- .../buildsystem/ProjectPomUpdater.java | 2 +- .../internal/project/ProjectVersion.java | 2 +- .../internal/PomUpdateAcceptanceTests.java | 57 ++- .../internal/buildsystem/PomUpdaterTests.java | 4 +- .../buildsystem/ProjectVersionTests.java | 28 +- .../pom.xml | 368 ++++++++++++++++++ .../spring-cloud-sleuth-dependencies/pom.xml | 139 +++++++ 7 files changed, 587 insertions(+), 13 deletions(-) create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/pom.xml create mode 100644 releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/spring-cloud-sleuth-dependencies/pom.xml diff --git a/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java b/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java index 743efc77..46d41e63 100644 --- a/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java +++ b/releaser-core/src/main/java/releaser/internal/buildsystem/ProjectPomUpdater.java @@ -237,7 +237,7 @@ public class ProjectPomUpdater implements Closeable { .stream() .filter(pattern -> IGNORED_SNAPSHOT_LINE_PATTERNS.stream() .noneMatch(line::matches) - && pattern.matcher(line).matches()) + && pattern.matcher(line).lookingAt()) .findFirst().orElse(null); if (matchingPattern != null) { if (log.isDebugEnabled()) { diff --git a/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java b/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java index 27741dfb..5edcde5f 100644 --- a/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java +++ b/releaser-core/src/main/java/releaser/internal/project/ProjectVersion.java @@ -54,7 +54,7 @@ public class ProjectVersion implements Comparable, Serializable private static final Pattern SNAPSHOT_PATTERN = Pattern .compile("^.*[\\.|\\-](BUILD-)?SNAPSHOT.*$"); - private static final String MILESTONE_REGEX = ".*[\\.|\\-]M[0-9]+"; + private static final String MILESTONE_REGEX = "^.*[\\.|\\-]M[0-9]+.*$"; private static final String RC_REGEX = "^.*[\\.|\\-]RC.*$"; diff --git a/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java b/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java index 5217334b..3baa8817 100644 --- a/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java +++ b/releaser-core/src/test/java/releaser/internal/PomUpdateAcceptanceTests.java @@ -115,7 +115,7 @@ public class PomUpdateAcceptanceTests { } @Test - public void should_not_fail_update_when_after_updating_a_release_version_there_still_is_a_snapshot_version_in_a_non_deployable_module() + public void should_fail_update_when_after_updating_a_release_version_there_still_is_a_snapshot_version_in_a_non_deployable_module() throws Exception { ReleaserProperties releaserProperties = branchReleaserProperties(); ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties, @@ -131,6 +131,61 @@ public class PomUpdateAcceptanceTests { .hasMessageContaining("0.3.1.BUILD-SNAPSHOT"); } + @Test + public void should_fail_update_when_after_updating_a_release_version_there_still_is_a_milestone_version_in_a_non_deployable_module() + throws Exception { + ReleaserProperties releaserProperties = branchReleaserProperties(); + ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties, + Collections + .singletonList(MavenBomParserAccessor.maven(releaserProperties))); + Projects projects = projectPomUpdater.retrieveVersionsFromReleaseTrainBom(); + projects.removeIf(projectVersion -> projectVersion.projectName + .contains("spring-cloud-build")); + projects.add(new ProjectVersion("spring-cloud-build", "1.4.2.RELEASE")); + File project = new File(this.temporaryFolder, + "/spring-cloud-sleuth-with-milestone-dep"); + + BDDAssertions + .thenThrownBy(() -> projectPomUpdater.updateProjectFromReleaseTrain( + project, projects, projects.forFile(project), true)) + .hasMessageContaining("1.19.2-M2"); + } + + @Test + public void should_fail_update_when_after_updating_a_release_candidate_version_there_still_is_a_milestone_version_in_a_non_deployable_module() + throws Exception { + ReleaserProperties releaserProperties = branchReleaserProperties(); + ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties, + Collections + .singletonList(MavenBomParserAccessor.maven(releaserProperties))); + Projects projects = projectPomUpdater.retrieveVersionsFromReleaseTrainBom(); + projects.removeIf( + projectVersion -> projectVersion.projectName.equals("spring-cloud")); + projects.add(new ProjectVersion("spring-cloud", "Camden.RC1")); + projects.removeIf(projectVersion -> projectVersion.projectName + .equals("spring-cloud-dependencies")); + projects.add(new ProjectVersion("spring-cloud-dependencies", "Camden.RC1")); + projects.removeIf(projectVersion -> projectVersion.projectName + .equals("spring-cloud-starter")); + projects.add(new ProjectVersion("spring-cloud-starter", "Camden.RC1")); + projects.removeIf(projectVersion -> projectVersion.projectName + .equals("spring-cloud-starter-build")); + projects.add(new ProjectVersion("spring-cloud-starter-build", "Camden.RC1")); + projects.removeIf(projectVersion -> projectVersion.projectName + .equals("spring-cloud-release")); + projects.add(new ProjectVersion("spring-cloud-release", "Camden.RC1")); + projects.removeIf(projectVersion -> projectVersion.projectName + .contains("spring-cloud-build")); + projects.add(new ProjectVersion("spring-cloud-build", "1.4.2.RELEASE")); + File project = new File(this.temporaryFolder, + "/spring-cloud-sleuth-with-milestone-dep"); + + BDDAssertions + .thenThrownBy(() -> projectPomUpdater.updateProjectFromReleaseTrain( + project, projects, projects.forFile(project), true)) + .hasMessageContaining("1.19.2-M2"); + } + @Test public void should_update_fail_when_after_updating_a_release_version_there_still_is_a_snapshot_version_for_boot_snapshot_version() throws Exception { diff --git a/releaser-core/src/test/java/releaser/internal/buildsystem/PomUpdaterTests.java b/releaser-core/src/test/java/releaser/internal/buildsystem/PomUpdaterTests.java index 0468a266..0dae4341 100644 --- a/releaser-core/src/test/java/releaser/internal/buildsystem/PomUpdaterTests.java +++ b/releaser-core/src/test/java/releaser/internal/buildsystem/PomUpdaterTests.java @@ -35,7 +35,7 @@ import releaser.internal.git.GitRepoTests; import releaser.internal.project.Project; import releaser.internal.tech.PomReader; -import org.springframework.boot.test.rule.OutputCapture; +import org.springframework.boot.test.system.OutputCaptureRule; import org.springframework.util.FileSystemUtils; /** @@ -44,7 +44,7 @@ import org.springframework.util.FileSystemUtils; public class PomUpdaterTests { @Rule - public OutputCapture capture = new OutputCapture(); + public OutputCaptureRule capture = new OutputCaptureRule(); @Rule public TemporaryFolder tmp = new TemporaryFolder(); diff --git a/releaser-core/src/test/java/releaser/internal/buildsystem/ProjectVersionTests.java b/releaser-core/src/test/java/releaser/internal/buildsystem/ProjectVersionTests.java index 08d9f0db..92fd5f28 100644 --- a/releaser-core/src/test/java/releaser/internal/buildsystem/ProjectVersionTests.java +++ b/releaser-core/src/test/java/releaser/internal/buildsystem/ProjectVersionTests.java @@ -345,8 +345,10 @@ public class ProjectVersionTests { public void should_return_true_when_checking_ga_version_against_ga() { then(projectVersion("1.0.1.RELEASE").isReleaseOrServiceRelease()).isTrue(); then(projectVersion("1.0.1-SR1").isReleaseOrServiceRelease()).isTrue(); - // then(projectVersion("1.0.0").isReleaseOrServiceRelease()).isTrue(); - // then(projectVersion("1.0.1").isReleaseOrServiceRelease()).isTrue(); + then(projectVersion("1.0.0").isReleaseOrServiceRelease()).isTrue(); + then(projectVersion("1.0.1").isReleaseOrServiceRelease()).isTrue(); + then(projectVersion("2021.0.0").isReleaseOrServiceRelease()).isTrue(); + then(projectVersion("2022.0.3").isReleaseOrServiceRelease()).isTrue(); } @Test @@ -837,15 +839,25 @@ public class ProjectVersionTests { then(unknownTypeOfVersion.get(1).pattern()).contains("M[0-9]"); then(unknownTypeOfVersion.get(2).pattern()).contains("RC"); - then(unknownTypeOfVersion.get(0).matcher("SomeName-SNAPSHOT").matches()).isTrue(); - then(unknownTypeOfVersion.get(0).matcher("SomeName.BUILD-SNAPSHOT").matches()) + then(unknownTypeOfVersion.get(0).matcher("SomeName-SNAPSHOT").lookingAt()) .isTrue(); + then(unknownTypeOfVersion.get(0).matcher("SomeName.BUILD-SNAPSHOT").lookingAt()) + .isTrue(); + then(unknownTypeOfVersion.get(0) + .matcher("\t\t1.19.2-SNAPSHOT\n").lookingAt()) + .isTrue(); - then(unknownTypeOfVersion.get(1).matcher("SomeName-M3").matches()).isTrue(); - then(unknownTypeOfVersion.get(1).matcher("SomeName.M3").matches()).isTrue(); + then(unknownTypeOfVersion.get(1).matcher("SomeName-M3").lookingAt()).isTrue(); + then(unknownTypeOfVersion.get(1).matcher("SomeName.M3").lookingAt()).isTrue(); + then(unknownTypeOfVersion.get(1) + .matcher("\t\t1.19.2-M2\n").lookingAt()) + .isTrue(); - then(unknownTypeOfVersion.get(2).matcher("SomeName-RC3").matches()).isTrue(); - then(unknownTypeOfVersion.get(2).matcher("SomeName.RC3").matches()).isTrue(); + then(unknownTypeOfVersion.get(2).matcher("SomeName-RC3").lookingAt()).isTrue(); + then(unknownTypeOfVersion.get(2).matcher("SomeName.RC3").lookingAt()).isTrue(); + then(unknownTypeOfVersion.get(2) + .matcher("1.19.2-RC1").lookingAt()) + .isTrue(); } private ProjectVersion projectVersion(String version) { diff --git a/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/pom.xml b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/pom.xml new file mode 100644 index 00000000..c29243aa --- /dev/null +++ b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/pom.xml @@ -0,0 +1,368 @@ + + + 4.0.0 + + spring-cloud-sleuth + 0.2.0-SNAPSHOT + pom + Spring Cloud Sleuth + Spring Cloud Sleuth + + + org.springframework.cloud + spring-cloud-build + 1.4.2 + + + + + + https://github.com/spring-cloud/spring-cloud-sleuth + scm:git:git://github.com/spring-cloud/spring-cloud-sleuth.git + scm:git:ssh://git@github.com/spring-cloud/spring-cloud-sleuth.git + HEAD + + + + spring-cloud-sleuth-dependencies + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + + default-compile + + true + true + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + default-testCompile + + true + true + + ${maven.compiler.testSource} + ${maven.compiler.testTarget} + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + enforce-java + + enforce + + + + + ${maven.compiler.testTarget} + + + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.version} + + + org.springframework.cloud + spring-cloud-build-tools + ${spring-cloud-build.version} + + + + + validate + validate + + checkstyle.xml + LICENSE.txt + true + true + + + check + + + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.version} + + checkstyle.xml + LICENSE.txt + + + + + + + + + org.springframework.cloud + spring-cloud-sleuth-dependencies + ${project.version} + pom + import + + + org.springframework.cloud + spring-cloud-netflix-dependencies + ${spring-cloud-netflix.version} + pom + import + + + org.springframework.cloud + spring-cloud-commons-dependencies + ${spring-cloud-commons.version} + pom + import + + + org.springframework.cloud + spring-cloud-stream-dependencies + ${spring-cloud-stream.version} + pom + import + + + + org.spockframework + spock-core + ${spock.version} + test + + + org.spockframework + spock-spring + ${spock.version} + test + + + cglib + cglib-nodep + 3.1 + + + org.objenesis + objenesis + 2.1 + + + + org.hamcrest + hamcrest-core + test + + + com.jayway.awaitility + awaitility + 1.7.0 + test + + + com.github.tomakehurst + wiremock + 2.5.1 + test + + + pl.pragmatists + JUnitParams + 1.0.6 + test + + + org.assertj + assertj-core + 3.6.2 + test + + + + + + 1.7 + 1.7 + 1.8 + 1.8 + 2.19.1 + 2.17 + 0.3.1-SNAPSHOT + 0.2.0-SNAPSHOT + Foo-SNAPSHOT + 0.3.0-SNAPSHOT + + + + + spring + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/libs-release-local + + false + + + + + + ide + + false + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${maven.compiler.testSource} + ${maven.compiler.testTarget} + + + + + + + benchmarks + + false + + + benchmarks + + + + sonar + + + + org.jacoco + jacoco-maven-plugin + + + pre-unit-test + + prepare-agent + + + surefireArgLine + ${project.build.directory}/jacoco.exec + + + + post-unit-test + test + + report + + + + ${project.build.directory}/jacoco.exec + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire.plugin.version} + + + ${surefireArgLine} + + + + + + + + diff --git a/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/spring-cloud-sleuth-dependencies/pom.xml b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/spring-cloud-sleuth-dependencies/pom.xml new file mode 100644 index 00000000..5132b7b2 --- /dev/null +++ b/releaser-core/src/test/resources/projects/spring-cloud-sleuth-with-milestone-dep/spring-cloud-sleuth-dependencies/pom.xml @@ -0,0 +1,139 @@ + + + 4.0.0 + + spring-cloud-dependencies-parent + org.springframework.cloud + 1.4.2 + + + spring-cloud-sleuth-dependencies + 0.2.0-SNAPSHOT + pom + spring-cloud-sleuth-dependencies + Spring Cloud Sleuth Dependencies + + 1.19.2-M2 + 0.6.12 + + + + + org.springframework.cloud + spring-cloud-sleuth-core + ${project.version} + + + org.springframework.cloud + spring-cloud-sleuth-zipkin + ${project.version} + + + org.springframework.cloud + spring-cloud-sleuth-stream + ${project.version} + + + org.springframework.cloud + spring-cloud-sleuth-zipkin-stream + ${project.version} + + + org.springframework.cloud + spring-cloud-starter-zipkin + ${project.version} + + + org.springframework.cloud + spring-cloud-starter-sleuth + ${project.version} + + + io.zipkin.java + zipkin + ${zipkin.version} + + + io.zipkin.java + zipkin-server + ${zipkin.version} + + + io.zipkin.java + zipkin-autoconfigure-ui + ${zipkin.version} + + + io.zipkin.java + zipkin-autoconfigure-storage-mysql + ${zipkin.version} + + + io.zipkin.java + zipkin-junit + ${zipkin.version} + + + io.zipkin.reporter + zipkin-reporter + ${zipkin-reporter.version} + + + + + + spring + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + + +