Fixed version bump
This commit is contained in:
@@ -41,7 +41,7 @@ public class Releaser {
|
||||
ProjectVersion originalVersion = new ProjectVersion(project);
|
||||
ProjectVersion changedVersion = new ProjectVersion(project);
|
||||
if (!skipPoms) {
|
||||
this.projectPomUpdater.updateProject(project);
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project);
|
||||
changedVersion = new ProjectVersion(project);
|
||||
log.info("\n\nProject was successfully updated to [{}]", originalVersion);
|
||||
}
|
||||
|
||||
@@ -129,11 +129,6 @@ public class ReleaserProperties {
|
||||
*/
|
||||
private String deployCommand = "./mvnw deploy -DskipTests -Pfast";
|
||||
|
||||
/**
|
||||
* Command to be executed to bump versions. The new version will be passed under %s param
|
||||
*/
|
||||
private String bumpVersionsCommand = "./mvnw versions:set -DgenerateBackupPoms=false -DnewVersion=%s";
|
||||
|
||||
/**
|
||||
* Command to be executed to deploy a built project. If present "{{version}}" will be replaced by the
|
||||
* provided version
|
||||
@@ -180,14 +175,6 @@ public class ReleaserProperties {
|
||||
public void setPublishDocsCommands(String[] publishDocsCommands) {
|
||||
this.publishDocsCommands = publishDocsCommands;
|
||||
}
|
||||
|
||||
public String getBumpVersionsCommand() {
|
||||
return this.bumpVersionsCommand;
|
||||
}
|
||||
|
||||
public void setBumpVersionsCommand(String bumpVersionsCommand) {
|
||||
this.bumpVersionsCommand = bumpVersionsCommand;
|
||||
}
|
||||
}
|
||||
|
||||
public String getWorkingDir() {
|
||||
|
||||
@@ -23,6 +23,8 @@ 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.Set;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -51,7 +53,7 @@ public class ProjectPomUpdater {
|
||||
*
|
||||
* @param projectRoot - root folder with project to update
|
||||
*/
|
||||
public void updateProject(File projectRoot) {
|
||||
public void updateProjectFromSCRelease(File projectRoot) {
|
||||
File clonedScRelease = this.gitRepo.cloneScReleaseProject();
|
||||
this.gitRepo.checkout(clonedScRelease, this.properties.getPom().getBranch());
|
||||
SCReleasePomParser sCReleasePomParser = new SCReleasePomParser(clonedScRelease);
|
||||
@@ -61,10 +63,27 @@ public class ProjectPomUpdater {
|
||||
log.info("Skipping project updating");
|
||||
return;
|
||||
}
|
||||
updatePoms(projectRoot, versions);
|
||||
}
|
||||
|
||||
private void updatePoms(File projectRoot, Versions versions) {
|
||||
File rootPom = new File(projectRoot, "pom.xml");
|
||||
ModelWrapper rootPomModel = this.pomUpdater.readModel(rootPom);
|
||||
processAllPoms(projectRoot, new PomWalker(rootPomModel, versions, this.pomUpdater,
|
||||
properties));
|
||||
this.properties));
|
||||
}
|
||||
|
||||
public void updatePomsForRootVersion(File directory, String version) {
|
||||
File pom = new File(directory, "pom.xml");
|
||||
Versions versions = versions(version, pom);
|
||||
updatePoms(directory, versions);
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
@@ -24,15 +25,18 @@ public class Project {
|
||||
|
||||
private final ReleaserProperties properties;
|
||||
private final ProcessExecutor executor;
|
||||
private final ProjectPomUpdater pomUpdater;
|
||||
|
||||
public Project(ReleaserProperties properties) {
|
||||
public Project(ReleaserProperties properties, ProjectPomUpdater pomUpdater) {
|
||||
this.properties = properties;
|
||||
this.executor = new ProcessExecutor(properties);
|
||||
this.pomUpdater = pomUpdater;
|
||||
}
|
||||
|
||||
Project(ReleaserProperties properties, ProcessExecutor executor) {
|
||||
this.properties = properties;
|
||||
this.executor = executor;
|
||||
this.pomUpdater = new ProjectPomUpdater(properties);
|
||||
}
|
||||
|
||||
public void build() {
|
||||
@@ -85,18 +89,9 @@ public class Project {
|
||||
}
|
||||
|
||||
public void bumpVersions(String version) {
|
||||
try {
|
||||
log.info("Bumping versions to [{}]", version);
|
||||
String[] commands = String.format(bumpVersionsCommand(), version).split(" ");
|
||||
runCommand(commands);
|
||||
log.info("Versions successfully bumped");
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
|
||||
String bumpVersionsCommand() {
|
||||
return this.properties.getMaven().getBumpVersionsCommand();
|
||||
String workingDir = this.properties.getWorkingDir();
|
||||
File dir = new File(workingDir);
|
||||
this.pomUpdater.updatePomsForRootVersion(dir, version);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
@@ -45,24 +45,49 @@ public class AcceptanceTests {
|
||||
@Test
|
||||
public void should_perform_a_release_of_consul() throws Exception {
|
||||
File origin = clonedProject(this.tmp.newFolder(), this.springCloudConsulProject);
|
||||
pomVersionIsEqualTo(origin, "1.2.0.BUILD-SNAPSHOT");
|
||||
pomParentVersionIsEqualTo(origin, "1.2.0.BUILD-SNAPSHOT");
|
||||
File project = clonedProject(this.tmp.newFolder(), tmpFile("spring-cloud-consul"));
|
||||
setOriginOnProjectToTmp(origin, project);
|
||||
Releaser releaser = releaser(project);
|
||||
|
||||
releaser.release();
|
||||
|
||||
then(this.temporaryFolder).exists();
|
||||
File afterProcessing = new File(project, "bumped");
|
||||
then(afterProcessing).exists();
|
||||
Iterable<RevCommit> commits = openGitProject(project).log().call();
|
||||
Iterable<RevCommit> commits = listOfCommits(project);
|
||||
Iterator<RevCommit> iterator = commits.iterator();
|
||||
RevCommit afterRelease = iterator.next();
|
||||
RevCommit goingBackToSnapshots = iterator.next();
|
||||
RevCommit bumping = iterator.next();
|
||||
tagIsPresentInOrigin(origin);
|
||||
commitIsPresent(iterator, "Bumping versions after release");
|
||||
commitIsPresent(iterator, "Going back to snapshots");
|
||||
commitIsPresent(iterator, "Bumping versions before release");
|
||||
pomVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
|
||||
pomParentVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
|
||||
}
|
||||
|
||||
private Iterable<RevCommit> listOfCommits(File project) throws GitAPIException {
|
||||
return openGitProject(project).log().call();
|
||||
}
|
||||
|
||||
private void pomParentVersionIsEqualTo(File project, String expected) {
|
||||
then(pom(new File(project, "spring-cloud-starter-consul")).getParent()
|
||||
.getVersion()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
private void pomVersionIsEqualTo(File project, String expected) {
|
||||
then(pom(project).getVersion()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
private void commitIsPresent(Iterator<RevCommit> iterator,
|
||||
String expected) {
|
||||
RevCommit commit = iterator.next();
|
||||
then(commit.getShortMessage()).isEqualTo(expected);
|
||||
}
|
||||
|
||||
private void tagIsPresentInOrigin(File origin) throws GitAPIException {
|
||||
then(openGitProject(origin).tagList().call().iterator().next().getName()).endsWith("v1.1.2.RELEASE");
|
||||
then(afterRelease.getShortMessage()).isEqualTo("Bumping versions after release");
|
||||
then(goingBackToSnapshots.getShortMessage()).isEqualTo("Going back to snapshots");
|
||||
then(bumping.getShortMessage()).isEqualTo("Bumping versions before release");
|
||||
}
|
||||
|
||||
private Model pom(File dir) {
|
||||
return this.testPomReader.readPom(new File(dir, "pom.xml"));
|
||||
}
|
||||
|
||||
private ReleaserProperties releaserProperties(File project) throws URISyntaxException {
|
||||
@@ -73,14 +98,13 @@ public class AcceptanceTests {
|
||||
releaserProperties.getMaven().setBuildCommand("touch build");
|
||||
releaserProperties.getMaven().setDeployCommand("touch deploy");
|
||||
releaserProperties.getMaven().setPublishDocsCommands(new String[] { "touch docs"} );
|
||||
releaserProperties.getMaven().setBumpVersionsCommand("touch bumped");
|
||||
return releaserProperties;
|
||||
}
|
||||
|
||||
private Releaser releaser(File projectFile) throws Exception {
|
||||
ReleaserProperties properties = releaserProperties(projectFile);
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
Project project = new Project(properties);
|
||||
Project project = new Project(properties, pomUpdater);
|
||||
ProjectGitUpdater gitUpdater = new ProjectGitUpdater(properties);
|
||||
return new Releaser(properties, pomUpdater, project, gitUpdater) {
|
||||
@Override boolean skipStep() {
|
||||
@@ -96,12 +120,4 @@ public class AcceptanceTests {
|
||||
private File file(String relativePath) throws URISyntaxException {
|
||||
return new File(AcceptanceTests.class.getResource(relativePath).toURI());
|
||||
}
|
||||
|
||||
private File pom(String relativePath) throws URISyntaxException {
|
||||
return new File(new File(AcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml");
|
||||
}
|
||||
|
||||
private String asString(File file) throws IOException {
|
||||
return new String(Files.readAllBytes(file.toPath()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public class PomUpdateAcceptanceTests {
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
|
||||
projectPomUpdater
|
||||
.updateProject(new File(this.temporaryFolder, "/spring-cloud-sleuth"));
|
||||
.updateProjectFromSCRelease(new File(this.temporaryFolder, "/spring-cloud-sleuth"));
|
||||
|
||||
then(this.temporaryFolder).exists();
|
||||
Model rootPom = this.testPomReader.readPom(tmpFile("/spring-cloud-sleuth/pom.xml"));
|
||||
@@ -64,7 +64,7 @@ public class PomUpdateAcceptanceTests {
|
||||
ProjectPomUpdater projectPomUpdater = new ProjectPomUpdater(releaserProperties);
|
||||
File beforeProcessing = pom("/projects/project/");
|
||||
|
||||
projectPomUpdater.updateProject(tmpFile("/project/"));
|
||||
projectPomUpdater.updateProjectFromSCRelease(tmpFile("/project/"));
|
||||
|
||||
then(this.temporaryFolder).exists();
|
||||
File afterProcessing = tmpFile("/project/pom.xml");
|
||||
|
||||
@@ -36,7 +36,7 @@ import org.springframework.util.FileSystemUtils;
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class PomUpdaterTests {
|
||||
public class ProjectPomUpdaterTests {
|
||||
|
||||
Versions versions = new Versions("0.0.1", "0.0.2", projects());
|
||||
PomUpdater pomUpdater = new PomUpdater();
|
||||
@@ -263,6 +263,21 @@ public class PomUpdaterTests {
|
||||
.contains("Won't update the version of module");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_a_change_version() throws Exception {
|
||||
File originalPom = pom("/projects/project/", "pom_matching_artifact_same_version.xml");
|
||||
File pomInTemp = tmpFile("/project/pom_matching_artifact_same_version.xml");
|
||||
ModelWrapper rootPom = model("spring-cloud-sleuth");
|
||||
ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions);
|
||||
|
||||
File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp);
|
||||
|
||||
BDDAssertions.then(asString(storedPom)).isEqualTo(asString(originalPom));
|
||||
BDDAssertions.then(this.capture.toString())
|
||||
.contains("Won't update the version of parent")
|
||||
.contains("Won't update the version of module");
|
||||
}
|
||||
|
||||
Set<Project> projects() {
|
||||
Set<Project> projects = new HashSet<>();
|
||||
projects.add(new Project("spring-cloud-contract", "0.0.2.BUILD-SNAPSHOT"));
|
||||
@@ -9,6 +9,7 @@ import org.junit.Assume;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.pom.TestPomReader;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
import static org.assertj.core.api.BDDAssertions.thenThrownBy;
|
||||
@@ -18,6 +19,8 @@ import static org.assertj.core.api.BDDAssertions.thenThrownBy;
|
||||
*/
|
||||
public class ProjectTests {
|
||||
|
||||
TestPomReader reader = new TestPomReader();
|
||||
|
||||
@Before
|
||||
public void checkOs() {
|
||||
Assume.assumeFalse(System.getProperty("os.name").toLowerCase().startsWith("win"));
|
||||
@@ -124,31 +127,17 @@ public class ProjectTests {
|
||||
@Test
|
||||
public void should_successfully_execute_a_bump_versions_command() throws Exception {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.setWorkingDir(file("/projects/builder/resolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties)) {
|
||||
@Override String bumpVersionsCommand() {
|
||||
return "%s";
|
||||
}
|
||||
};
|
||||
properties.setWorkingDir(file("/projects/spring-cloud-contract").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
|
||||
builder.bumpVersions("ls -al");
|
||||
builder.bumpVersions("2.3.4.BUILD-SNAPSHOT");
|
||||
|
||||
then(asString(file("/projects/builder/resolved/resolved.log")))
|
||||
.contains("file.txt");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_throw_exception_when_bump_command_took_too_long_to_execute() throws Exception {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setWaitTimeInMinutes(0);
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties)) {
|
||||
@Override String bumpVersionsCommand() {
|
||||
return "echo '%s'";
|
||||
}
|
||||
};
|
||||
|
||||
thenThrownBy(() -> builder.bumpVersions("1.0.0")).hasMessageContaining("Process waiting time of [0] minutes exceeded");
|
||||
File rootPom = file("/projects/spring-cloud-contract/pom.xml");
|
||||
File tools = file("/projects/spring-cloud-contract/spring-cloud-contract-tools/pom.xml");
|
||||
File converters = file("/projects/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 TestProcessExecutor executor(ReleaserProperties properties) {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-contract-parent</artifactId>
|
||||
<version></version>
|
||||
<version>1.1.0.BUILD-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-contract-tools</artifactId>
|
||||
<version></version>
|
||||
<version>1.1.0.BUILD-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>spring-cloud-contract-converters</artifactId>
|
||||
|
||||
@@ -29,7 +29,8 @@ import org.springframework.context.annotation.Configuration;
|
||||
class ReleaserConfiguration {
|
||||
|
||||
@Bean Releaser releaser(ReleaserProperties properties) {
|
||||
return new Releaser(properties, new ProjectPomUpdater(properties),
|
||||
new Project(properties), new ProjectGitUpdater(properties));
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
return new Releaser(properties, pomUpdater,
|
||||
new Project(properties, pomUpdater), new ProjectGitUpdater(properties));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user