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 + + + + + +