Fixed the snapshot verfication; fixes #40

This commit is contained in:
Marcin Grzejszczak
2017-08-18 19:44:44 +02:00
parent 87915190f5
commit c1e54944e2
9 changed files with 58 additions and 37 deletions

View File

@@ -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);
}

View File

@@ -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
}
}

View File

@@ -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:

View File

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

View File

@@ -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");

View File

@@ -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());
}

View File

@@ -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");

View File

@@ -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;

View File

@@ -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()),