Fixed the snapshot verfication; fixes #40
This commit is contained in:
@@ -35,8 +35,9 @@ public class Releaser {
|
||||
return this.projectPomUpdater.retrieveVersionsFromSCRelease();
|
||||
}
|
||||
|
||||
public void updateProjectFromScRelease(File project, Projects versions) {
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project, versions);
|
||||
public void updateProjectFromScRelease(File project, Projects versions,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project, versions, versionFromScRelease);
|
||||
ProjectVersion changedVersion = new ProjectVersion(project);
|
||||
log.info("\n\nProject was successfully updated to [{}]", changedVersion);
|
||||
}
|
||||
|
||||
@@ -66,30 +66,33 @@ public class ProjectPomUpdater {
|
||||
/**
|
||||
* For the given root folder (typically the working directory) performs the whole
|
||||
* flow of updating {@code pom.xml} with values from Spring Cloud Release project.
|
||||
*
|
||||
* @param projectRoot - root folder with project to update
|
||||
* @param projectRoot - root folder with project to update
|
||||
* @param projects - versions of projects used to update poms
|
||||
* @param versionFromScRelease - version for the built project taken from Spring Cloud Release project
|
||||
*/
|
||||
public void updateProjectFromSCRelease(File projectRoot, Projects projects) {
|
||||
public void updateProjectFromSCRelease(File projectRoot, Projects projects,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
Versions versions = new Versions(projects);
|
||||
if (!this.pomUpdater.shouldProjectBeUpdated(projectRoot, versions)) {
|
||||
log.info("Skipping project updating");
|
||||
return;
|
||||
}
|
||||
updatePoms(projectRoot, versions);
|
||||
updatePoms(projectRoot, versions, versionFromScRelease, Assertion.ASSERT_SNAPSHOTS);
|
||||
}
|
||||
|
||||
private void updatePoms(File projectRoot, Versions versions) {
|
||||
private void updatePoms(File projectRoot, Versions versions,
|
||||
ProjectVersion versionFromScRelease, Assertion assertSnapshots) {
|
||||
File rootPom = new File(projectRoot, "pom.xml");
|
||||
ModelWrapper rootPomModel = this.pomUpdater.readModel(rootPom);
|
||||
processAllPoms(projectRoot, new PomWalker(rootPomModel, versions, this.pomUpdater,
|
||||
this.properties));
|
||||
this.properties, versionFromScRelease, assertSnapshots));
|
||||
}
|
||||
|
||||
public void updatePomsForRootVersion(File directory, String version) {
|
||||
File pom = new File(directory, "pom.xml");
|
||||
Versions versions = versions(version, pom);
|
||||
updatePoms(directory, versions);
|
||||
updatePoms(directory, versions, new ProjectVersion("fake", "1.0.0"),
|
||||
Assertion.IGNORE_ASSERTION);
|
||||
}
|
||||
|
||||
private Versions versions(String version, File pom) {
|
||||
@@ -117,14 +120,19 @@ public class ProjectPomUpdater {
|
||||
private final PomUpdater pomUpdater;
|
||||
private final ReleaserProperties properties;
|
||||
private final boolean snapshotVersion;
|
||||
private final Assertion assertSnapshots;
|
||||
|
||||
private PomWalker(ModelWrapper rootPom, Versions versions, PomUpdater pomUpdater,
|
||||
ReleaserProperties properties) {
|
||||
ReleaserProperties properties, ProjectVersion versionFromScRelease,
|
||||
Assertion assertSnapshots) {
|
||||
this.rootPom = rootPom;
|
||||
this.versions = versions;
|
||||
this.pomUpdater = pomUpdater;
|
||||
this.properties = properties;
|
||||
this.snapshotVersion = versions.isSnapshot();
|
||||
this.snapshotVersion =
|
||||
assertSnapshots != Assertion.ASSERT_SNAPSHOTS || versionFromScRelease
|
||||
.isSnapshot();
|
||||
this.assertSnapshots = assertSnapshots;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -137,7 +145,7 @@ public class ProjectPomUpdater {
|
||||
}
|
||||
ModelWrapper model = this.pomUpdater.updateModel(this.rootPom, file, this.versions);
|
||||
this.pomUpdater.overwritePomIfDirty(model, this.versions, file);
|
||||
if (!this.snapshotVersion) {
|
||||
if (this.assertSnapshots == Assertion.ASSERT_SNAPSHOTS && !this.snapshotVersion) {
|
||||
log.debug("Update is a non-snapshot one. Checking if no snapshot versions remained in the pom");
|
||||
Scanner scanner = new Scanner(asString(path));
|
||||
int lineNumber = 0;
|
||||
@@ -171,4 +179,10 @@ public class ProjectPomUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private enum Assertion {
|
||||
ASSERT_SNAPSHOTS, IGNORE_ASSERTION
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -109,10 +109,6 @@ class Versions {
|
||||
return project.name.equals(withoutParent);
|
||||
}
|
||||
|
||||
boolean isSnapshot() {
|
||||
return this.projects.stream().anyMatch(project -> project.version.endsWith("BUILD-SNAPSHOT"));
|
||||
}
|
||||
|
||||
Versions setVersion(String projectName, String version) {
|
||||
switch (projectName) {
|
||||
case SPRING_BOOT_PROJECT_NAME:
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.assertj.core.api.BDDAssertions;
|
||||
@@ -12,6 +13,7 @@ import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.Projects;
|
||||
import org.springframework.cloud.release.internal.pom.TestPomReader;
|
||||
import org.springframework.cloud.release.internal.pom.TestUtils;
|
||||
@@ -41,9 +43,10 @@ public class PomUpdateAcceptanceTests {
|
||||
releaserProperties.getFixedVersions().put("checkstyle", "100.0.0.RELEASE");
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
|
||||
File project = new File(this.temporaryFolder, "/spring-cloud-sleuth");
|
||||
|
||||
projectPomUpdater
|
||||
.updateProjectFromSCRelease(new File(this.temporaryFolder, "/spring-cloud-sleuth"), projects);
|
||||
.updateProjectFromSCRelease(project, projects, projects.forFile(project));
|
||||
|
||||
then(this.temporaryFolder).exists();
|
||||
Model rootPom = this.testPomReader.readPom(tmpFile("/spring-cloud-sleuth/pom.xml"));
|
||||
@@ -68,21 +71,39 @@ public class PomUpdateAcceptanceTests {
|
||||
ReleaserProperties releaserProperties = branchReleaserProperties();
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
|
||||
File project = new File(this.temporaryFolder, "/spring-cloud-sleuth-with-unmatched-property");
|
||||
|
||||
BDDAssertions.thenThrownBy(() ->
|
||||
projectPomUpdater
|
||||
.updateProjectFromSCRelease(new File(this.temporaryFolder, "/spring-cloud-sleuth-with-unmatched-property"), projects)
|
||||
.updateProjectFromSCRelease(project, projects, projects.forFile(project))
|
||||
).hasMessageContaining("<spring-cloud-unmatched.version>0.6.0.BUILD-SNAPSHOT</spring-cloud-unmatched.version>");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_fail_when_after_updating_a_release_version_there_still_is_a_snapshot_version_for_boot_snapshot_version() throws Exception {
|
||||
ReleaserProperties releaserProperties = branchReleaserProperties();
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
|
||||
projects.removeIf(projectVersion -> projectVersion.projectName.contains("spring-cloud-build"));
|
||||
projects.add(new ProjectVersion("spring-cloud-build", "1.4.2.BUILD-SNAPSHOT"));
|
||||
File project = new File(this.temporaryFolder, "/spring-cloud-sleuth");
|
||||
|
||||
BDDAssertions.thenThrownBy(() ->
|
||||
projectPomUpdater
|
||||
.updateProjectFromSCRelease(project, projects, projects.forFile(project))
|
||||
).hasMessageContaining("<version>1.4.2.BUILD-SNAPSHOT</version>");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_not_update_a_project_that_is_not_on_the_list() throws Exception {
|
||||
ReleaserProperties releaserProperties = releaserProperties();
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
File beforeProcessing = pom("/projects/project/");
|
||||
Projects projects = projectPomUpdater.retrieveVersionsFromSCRelease();
|
||||
File project = tmpFile("/project/");
|
||||
|
||||
projectPomUpdater.updateProjectFromSCRelease(tmpFile("/project/"), projects);
|
||||
projectPomUpdater.updateProjectFromSCRelease(project, projects,
|
||||
new ProjectVersion("foo", "1.0.0.BUILD-SNAPSHOT"));
|
||||
|
||||
then(this.temporaryFolder).exists();
|
||||
File afterProcessing = tmpFile("/project/pom.xml");
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.function.Supplier;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.BDDMockito;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
@@ -21,6 +22,7 @@ import org.springframework.cloud.release.internal.project.ProjectBuilder;
|
||||
import static org.mockito.BDDMockito.then;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.never;
|
||||
|
||||
/**
|
||||
@@ -75,9 +77,9 @@ public class ReleaserTests {
|
||||
|
||||
@Test
|
||||
public void should_bump_versions_for_original_snapshot_project() throws Exception {
|
||||
ProjectVersion scReleaseVersion = new ProjectVersion("changed", "1.0.0.RELEASE");
|
||||
releaser(() -> new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"))
|
||||
.rollbackReleaseVersion(this.pom,
|
||||
new ProjectVersion("changed", "1.0.0.RELEASE"));
|
||||
.rollbackReleaseVersion(this.pom, scReleaseVersion);
|
||||
|
||||
then(this.projectBuilder).should().bumpVersions(anyString());
|
||||
}
|
||||
|
||||
@@ -76,21 +76,6 @@ public class VersionsTests {
|
||||
then(this.versions.shouldSetProperty(missingProps())).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_true_when_all_versions_are_snapshot() {
|
||||
then(new Versions("", snapshotProjects()).isSnapshot()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_true_when_there_only_release_versions() {
|
||||
then(new Versions("1.0.0.RELEASE", releaseProjects()).isSnapshot()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_true_when_there_are_mixed_versions() {
|
||||
then(new Versions("", mixedProjects()).isSnapshot()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_projects_for_boot() {
|
||||
Versions versions = mixedVersions().setVersion("spring-boot", "3.0.0");
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import org.springframework.cloud.release.internal.PomUpdateAcceptanceTests;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.TestPomReader;
|
||||
import org.springframework.cloud.release.internal.pom.TestUtils;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SpringReleaser {
|
||||
private final List<Task> TASKS = Stream.of(
|
||||
task("UPDATING POMS",
|
||||
"Update poms with versions from Spring Cloud Release",
|
||||
args -> args.releaser.updateProjectFromScRelease(args.project, args.projects)),
|
||||
args -> args.releaser.updateProjectFromScRelease(args.project, args.projects, args.versionFromScRelease)),
|
||||
task("BUILD PROJECT",
|
||||
"Build the project",
|
||||
args -> args.releaser.buildProject()),
|
||||
|
||||
Reference in New Issue
Block a user