Allow bumping of gradle props; fixes #43
This commit is contained in:
@@ -45,7 +45,7 @@ public class Releaser {
|
||||
public void updateProjectFromScRelease(File project, Projects versions,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project, versions, versionFromScRelease);
|
||||
this.gradleUpdater.updateProjectFromSCRelease(project, versions);
|
||||
this.gradleUpdater.updateProjectFromSCRelease(project, versions, versionFromScRelease);
|
||||
ProjectVersion changedVersion = new ProjectVersion(project);
|
||||
log.info("\n\nProject was successfully updated to [{}]", changedVersion);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ public class Releaser {
|
||||
log.info("\nThe docs were published successfully");
|
||||
}
|
||||
|
||||
public void rollbackReleaseVersion(File project, ProjectVersion scReleaseVersion) {
|
||||
public void rollbackReleaseVersion(File project, Projects projects, ProjectVersion scReleaseVersion) {
|
||||
if (scReleaseVersion.isSnapshot()) {
|
||||
log.info("\nWon't rollback a snapshot version");
|
||||
return;
|
||||
@@ -79,7 +79,10 @@ public class Releaser {
|
||||
ProjectVersion originalVersion = originalVersion(project);
|
||||
log.info("Original project version is [{}]", originalVersion);
|
||||
if ((scReleaseVersion.isRelease() || scReleaseVersion.isServiceRelease()) && originalVersion.isSnapshot()) {
|
||||
this.projectBuilder.bumpVersions(originalVersion.bumpedVersion());
|
||||
Projects newProjects = new Projects(projects);
|
||||
newProjects.remove(scReleaseVersion.projectName);
|
||||
newProjects.add(new ProjectVersion(originalVersion.projectName, originalVersion.bumpedVersion()));
|
||||
updateProjectFromScRelease(project, newProjects, originalVersion);
|
||||
this.projectGitHandler.commitAfterBumpingVersions(project, originalVersion);
|
||||
log.info("\nSuccessfully reverted the commit and bumped snapshot versions");
|
||||
} else {
|
||||
|
||||
@@ -39,14 +39,17 @@ public class GradleUpdater {
|
||||
* the project name via {@link ReleaserProperties.Gradle#gradlePropsSubstitution}
|
||||
* @param projectRoot - root folder with project to update
|
||||
* @param projects - versions of projects used to update poms
|
||||
* @param versionFromScRelease - version for the project from Spring Cloud Release
|
||||
*/
|
||||
public void updateProjectFromSCRelease(File projectRoot, Projects projects) {
|
||||
processAllGradleProps(projectRoot, projects);
|
||||
public void updateProjectFromSCRelease(File projectRoot, Projects projects,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
processAllGradleProps(projectRoot, projects, versionFromScRelease);
|
||||
}
|
||||
|
||||
private void processAllGradleProps(File projectRoot, Projects projects) {
|
||||
private void processAllGradleProps(File projectRoot, Projects projects,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
try {
|
||||
Files.walkFileTree(projectRoot.toPath(), new GradlePropertiesWalker(this.properties, projects));
|
||||
Files.walkFileTree(projectRoot.toPath(), new GradlePropertiesWalker(this.properties, projects, versionFromScRelease));
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
@@ -59,10 +62,13 @@ public class GradleUpdater {
|
||||
|
||||
private final ReleaserProperties properties;
|
||||
private final Projects projects;
|
||||
private final ProjectVersion versionFromScRelease;
|
||||
|
||||
private GradlePropertiesWalker(ReleaserProperties properties, Projects projects) {
|
||||
private GradlePropertiesWalker(ReleaserProperties properties, Projects projects,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
this.properties = properties;
|
||||
this.projects = projects;
|
||||
this.versionFromScRelease = versionFromScRelease;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -106,7 +112,14 @@ public class GradleUpdater {
|
||||
|
||||
private boolean pathIgnored(File file) {
|
||||
String path = file.getPath();
|
||||
return this.properties.getGradle().getIgnoredGradleRegex().stream().anyMatch(path::matches);
|
||||
return bumpingToRelease() &&
|
||||
this.properties.getGradle().getIgnoredGradleRegex().stream().anyMatch(path::matches);
|
||||
}
|
||||
|
||||
private boolean bumpingToRelease() {
|
||||
ProjectVersion version = this.projects
|
||||
.forName(this.versionFromScRelease.projectName);
|
||||
return version.isRelease() || version.isServiceRelease();
|
||||
}
|
||||
|
||||
private String asString(Path path) {
|
||||
|
||||
@@ -23,9 +23,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.HashSet;
|
||||
import java.util.Scanner;
|
||||
import java.util.Set;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -77,31 +75,17 @@ public class ProjectPomUpdater {
|
||||
log.info("Skipping project updating");
|
||||
return;
|
||||
}
|
||||
updatePoms(projectRoot, versions, versionFromScRelease, Assertion.ASSERT_SNAPSHOTS);
|
||||
updatePoms(projectRoot, projects, versionFromScRelease, Assertion.ASSERT_SNAPSHOTS);
|
||||
}
|
||||
|
||||
private void updatePoms(File projectRoot, Versions versions,
|
||||
private void updatePoms(File projectRoot, Projects projects,
|
||||
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,
|
||||
processAllPoms(projectRoot, new PomWalker(rootPomModel, projects, this.pomUpdater,
|
||||
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, new ProjectVersion("fake", "1.0.0"),
|
||||
Assertion.IGNORE_ASSERTION);
|
||||
}
|
||||
|
||||
private Versions versions(String version, File pom) {
|
||||
ModelWrapper model = this.pomUpdater.readModel(pom);
|
||||
Set<Project> projects = new HashSet<>();
|
||||
projects.add(new Project(model.projectName(), version));
|
||||
return new Versions("", "", projects);
|
||||
}
|
||||
|
||||
private void processAllPoms(File projectRoot, PomWalker pomWalker) {
|
||||
try {
|
||||
Files.walkFileTree(projectRoot.toPath(), pomWalker);
|
||||
@@ -121,18 +105,22 @@ public class ProjectPomUpdater {
|
||||
private final ReleaserProperties properties;
|
||||
private final boolean snapshotVersion;
|
||||
private final Assertion assertSnapshots;
|
||||
private final ProjectVersion versionFromScRelease;
|
||||
private final Projects projects;
|
||||
|
||||
private PomWalker(ModelWrapper rootPom, Versions versions, PomUpdater pomUpdater,
|
||||
private PomWalker(ModelWrapper rootPom, Projects projects, PomUpdater pomUpdater,
|
||||
ReleaserProperties properties, ProjectVersion versionFromScRelease,
|
||||
Assertion assertSnapshots) {
|
||||
this.rootPom = rootPom;
|
||||
this.versions = versions;
|
||||
this.versions = new Versions(projects);
|
||||
this.pomUpdater = pomUpdater;
|
||||
this.properties = properties;
|
||||
this.snapshotVersion =
|
||||
assertSnapshots != Assertion.ASSERT_SNAPSHOTS || versionFromScRelease
|
||||
.isSnapshot();
|
||||
this.assertSnapshots = assertSnapshots;
|
||||
this.versionFromScRelease = versionFromScRelease;
|
||||
this.projects = projects;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -166,7 +154,14 @@ public class ProjectPomUpdater {
|
||||
|
||||
private boolean pathIgnored(File file) {
|
||||
String path = file.getPath();
|
||||
return this.properties.getPom().getIgnoredPomRegex().stream().anyMatch(path::matches);
|
||||
return bumpingToRelease() &&
|
||||
this.properties.getPom().getIgnoredPomRegex().stream().anyMatch(path::matches);
|
||||
}
|
||||
|
||||
private boolean bumpingToRelease() {
|
||||
ProjectVersion version = this.projects
|
||||
.forName(this.versionFromScRelease.projectName);
|
||||
return version.isRelease() || version.isServiceRelease();
|
||||
}
|
||||
|
||||
private String asString(Path path) {
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package org.springframework.cloud.release.internal.pom;
|
||||
|
||||
import edu.emory.mathcs.backport.java.util.Arrays;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -19,7 +18,12 @@ public class Projects extends HashSet<ProjectVersion> {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Projects(ProjectVersion... versions) {
|
||||
addAll(new HashSet<ProjectVersion>(Arrays.asList(versions)));
|
||||
addAll(new HashSet<>(Arrays.asList(versions)));
|
||||
}
|
||||
|
||||
public void remove(String projectName) {
|
||||
ProjectVersion projectVersion = forName(projectName);
|
||||
remove(projectVersion);
|
||||
}
|
||||
|
||||
public ProjectVersion forFile(File projectRoot) {
|
||||
|
||||
@@ -11,9 +11,7 @@ import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -22,7 +20,6 @@ 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;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -103,12 +100,6 @@ public class ProjectBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
public void bumpVersions(String version) {
|
||||
String workingDir = this.properties.getWorkingDir();
|
||||
File dir = new File(workingDir);
|
||||
this.pomUpdater.updatePomsForRootVersion(dir, version);
|
||||
}
|
||||
|
||||
/**
|
||||
* We need to insert the system properties as a list of -Dkey=value entries
|
||||
* instead of just pasting the String that contains these values
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.springframework.cloud.release.internal;
|
||||
|
||||
import static org.mockito.BDDMockito.then;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.never;
|
||||
|
||||
import java.io.File;
|
||||
@@ -10,15 +9,19 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.assertj.core.api.BDDAssertions;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.boot.test.rule.OutputCapture;
|
||||
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
|
||||
import org.springframework.cloud.release.internal.gradle.GradleUpdater;
|
||||
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.project.ProjectBuilder;
|
||||
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
|
||||
import org.springframework.cloud.release.internal.template.TemplateGenerator;
|
||||
@@ -35,6 +38,7 @@ public class ReleaserTests {
|
||||
@Mock TemplateGenerator templateGenerator;
|
||||
@Mock GradleUpdater gradleUpdater;
|
||||
@Mock SaganUpdater saganUpdater;
|
||||
@Rule public OutputCapture outputCapture = new OutputCapture();
|
||||
File pom;
|
||||
|
||||
@Before
|
||||
@@ -63,27 +67,35 @@ public class ReleaserTests {
|
||||
public void should_not_bump_versions_for_original_release_project() throws Exception {
|
||||
releaser(() -> new ProjectVersion("original", "1.0.0.RELEASE"))
|
||||
.rollbackReleaseVersion(this.pom,
|
||||
new ProjectVersion("changed", "1.0.0.RELEASE"));
|
||||
new Projects(new ProjectVersion("changed", "1.0.0.RELEASE")),
|
||||
new ProjectVersion("changed", "1.0.0.RELEASE"));
|
||||
|
||||
then(this.projectBuilder).should(never()).bumpVersions(anyString());
|
||||
BDDAssertions.then(this.outputCapture.toString()).contains("Successfully reverted the commit and came back to snapshot versions");
|
||||
then(this.projectGitHandler).should(never()).commitAfterBumpingVersions(any(File.class), any(ProjectVersion.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_not_bump_versions_for_original_snapshot_project_and_current_snapshot() throws Exception {
|
||||
releaser(() -> new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"))
|
||||
.rollbackReleaseVersion(this.pom,
|
||||
new ProjectVersion("changed", "1.0.0.BUILD-SNAPSHOT"));
|
||||
new Projects(new ProjectVersion("changed", "1.0.0.BUILD-SNAPSHOT")),
|
||||
new ProjectVersion("changed", "1.0.0.BUILD-SNAPSHOT"));
|
||||
|
||||
then(this.projectBuilder).should(never()).bumpVersions(anyString());
|
||||
BDDAssertions.then(this.outputCapture.toString()).contains("Won't rollback a snapshot version");
|
||||
then(this.projectGitHandler).should(never()).commitAfterBumpingVersions(any(File.class), any(ProjectVersion.class));
|
||||
}
|
||||
|
||||
@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, scReleaseVersion);
|
||||
.rollbackReleaseVersion(this.pom,
|
||||
new Projects(new ProjectVersion("changed", "1.0.0.RELEASE")),
|
||||
scReleaseVersion);
|
||||
|
||||
then(this.projectBuilder).should().bumpVersions(anyString());
|
||||
BDDAssertions.then(this.outputCapture.toString())
|
||||
.contains("Project was successfully updated")
|
||||
.contains("Successfully reverted the commit and bumped snapshot versions");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -110,7 +122,9 @@ public class ReleaserTests {
|
||||
@Test
|
||||
public void should_not_rollback_for_snapshots() throws Exception {
|
||||
releaser(() -> new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"))
|
||||
.rollbackReleaseVersion(null, new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"));
|
||||
.rollbackReleaseVersion(null,
|
||||
new Projects(new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT")),
|
||||
new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"));
|
||||
|
||||
then(this.projectGitHandler).should(never()).revertChangesIfApplicable(any(File.class), any(ProjectVersion.class));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.springframework.cloud.release.internal.gradle;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
@@ -16,8 +18,6 @@ import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.Projects;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -45,7 +45,8 @@ public class GradleUpdaterTests {
|
||||
new ProjectVersion("spring-cloud-sleuth", "2.0.0")
|
||||
);
|
||||
|
||||
new GradleUpdater(properties).updateProjectFromSCRelease(projectRoot, projects);
|
||||
new GradleUpdater(properties).updateProjectFromSCRelease(projectRoot,
|
||||
projects, new ProjectVersion("spring-cloud-contract", "1.0.0"));
|
||||
|
||||
then(asString(tmpFile("gradleproject/gradle.properties")))
|
||||
.contains("foo=1.0.0");
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package org.springframework.cloud.release.internal.pom;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
import static org.assertj.core.api.BDDAssertions.thenThrownBy;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.HashSet;
|
||||
@@ -7,9 +10,6 @@ import java.util.Set;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
import static org.assertj.core.api.BDDAssertions.thenThrownBy;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -35,6 +35,17 @@ public class ProjectsTests {
|
||||
then(projects.forName("spring-cloud-starter-build").version).isEqualTo("1.0.0");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_remove_a_project_by_name() {
|
||||
Set<ProjectVersion> projectVersions = new HashSet<>();
|
||||
projectVersions.add(new ProjectVersion("spring-cloud-starter-build", "1.0.0"));
|
||||
Projects projects = new Projects(projectVersions);
|
||||
|
||||
projects.remove("spring-cloud-starter-build");
|
||||
|
||||
then(projects).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_true_when_there_is_at_least_one_snapshot_project() {
|
||||
Set<ProjectVersion> projectVersions = new HashSet<>();
|
||||
|
||||
@@ -224,22 +224,6 @@ public class ProjectBuilderTests {
|
||||
thenThrownBy(builder::build).hasMessageContaining("The process has exited with exit code [1]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_successfully_execute_a_bump_versions_command() throws Exception {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.setWorkingDir(tmpFile("/spring-cloud-contract").getPath());
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
builder.bumpVersions("2.3.4.BUILD-SNAPSHOT");
|
||||
|
||||
File rootPom = tmpFile("/spring-cloud-contract/pom.xml");
|
||||
File tools = tmpFile("/spring-cloud-contract/spring-cloud-contract-tools/pom.xml");
|
||||
File converters = tmpFile("/spring-cloud-contract/spring-cloud-contract-tools/spring-cloud-contract-converters/pom.xml");
|
||||
then(this.reader.readPom(rootPom).getVersion()).isEqualTo("2.3.4.BUILD-SNAPSHOT");
|
||||
then(this.reader.readPom(tools).getParent().getVersion()).isEqualTo("2.3.4.BUILD-SNAPSHOT");
|
||||
then(this.reader.readPom(converters).getParent().getVersion()).isEqualTo("2.3.4.BUILD-SNAPSHOT");
|
||||
}
|
||||
|
||||
private Process processWithInvalidExitCode() {
|
||||
return new Process() {
|
||||
@Override public OutputStream getOutputStream() {
|
||||
|
||||
@@ -34,7 +34,7 @@ class Tasks {
|
||||
static Task SNAPSHOTS = task("snapshots", "s",
|
||||
"REVERTING CHANGES & BUMPING VERSION (RELEASE ONLY)",
|
||||
"Go back to snapshots and bump originalVersion by patch",
|
||||
args -> args.releaser.rollbackReleaseVersion(args.project, args.versionFromScRelease));
|
||||
args -> args.releaser.rollbackReleaseVersion(args.project, args.projects, args.versionFromScRelease));
|
||||
static Task PUSH = task("push", "p",
|
||||
"PUSHING CHANGES",
|
||||
"Push the commits",
|
||||
|
||||
Reference in New Issue
Block a user