@@ -5,7 +5,7 @@ import java.lang.invoke.MethodHandles;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.cloud.release.internal.project.Project;
|
||||
import org.springframework.cloud.release.internal.project.ProjectBuilder;
|
||||
import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
@@ -21,17 +21,56 @@ public class Releaser {
|
||||
|
||||
private final ReleaserProperties properties;
|
||||
private final ProjectPomUpdater projectPomUpdater;
|
||||
private final Project project;
|
||||
private final ProjectBuilder projectBuilder;
|
||||
private final ProjectGitUpdater projectGitUpdater;
|
||||
|
||||
public Releaser(ReleaserProperties properties, ProjectPomUpdater projectPomUpdater,
|
||||
Project project, ProjectGitUpdater projectGitUpdater) {
|
||||
ProjectBuilder projectBuilder, ProjectGitUpdater projectGitUpdater) {
|
||||
this.properties = properties;
|
||||
this.projectPomUpdater = projectPomUpdater;
|
||||
this.project = project;
|
||||
this.projectBuilder = projectBuilder;
|
||||
this.projectGitUpdater = projectGitUpdater;
|
||||
}
|
||||
|
||||
public ProjectVersion updateProjectFromScRelease(File project) {
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project);
|
||||
ProjectVersion changedVersion = new ProjectVersion(project);
|
||||
log.info("\n\nProject was successfully updated to [{}]", changedVersion);
|
||||
return changedVersion;
|
||||
}
|
||||
|
||||
public void buildProject() {
|
||||
this.projectBuilder.build();
|
||||
log.info("\nProject was successfully built");
|
||||
}
|
||||
|
||||
public void commitAndPushTags(File project, ProjectVersion changedVersion) {
|
||||
this.projectGitUpdater.commitAndTagIfApplicable(project, changedVersion);
|
||||
log.info("\nCommit was made and tag was pushed successfully");
|
||||
}
|
||||
|
||||
public void deploy() {
|
||||
this.projectBuilder.deploy();
|
||||
log.info("\nThe artifact was deployed successfully");
|
||||
}
|
||||
|
||||
public void publishDocs(ProjectVersion changedVersion) {
|
||||
this.projectBuilder.publishDocs(changedVersion.version);
|
||||
log.info("\nThe docs were published successfully");
|
||||
}
|
||||
|
||||
public void rollbackReleaseVersion(File project, ProjectVersion originalVersion, ProjectVersion changedVersion) {
|
||||
this.projectGitUpdater.revertChangesIfApplicable(project, changedVersion);
|
||||
this.projectBuilder.bumpVersions(originalVersion.bumpedVersion());
|
||||
this.projectGitUpdater.commitAfterBumpingVersions(project, originalVersion);
|
||||
log.info("\nSuccessfully reverted the commit and bumped snapshot versions");
|
||||
}
|
||||
|
||||
public void pushCurrentBranch(File project) {
|
||||
this.projectGitUpdater.pushCurrentBranch(project);
|
||||
log.info("\nSuccessfully pushed current branch");
|
||||
}
|
||||
|
||||
public void release() {
|
||||
String workingDir = this.properties.getWorkingDir();
|
||||
File project = new File(workingDir);
|
||||
@@ -41,49 +80,39 @@ public class Releaser {
|
||||
ProjectVersion originalVersion = new ProjectVersion(project);
|
||||
ProjectVersion changedVersion = new ProjectVersion(project);
|
||||
if (!skipPoms) {
|
||||
this.projectPomUpdater.updateProjectFromSCRelease(project);
|
||||
changedVersion = new ProjectVersion(project);
|
||||
log.info("\n\nProject was successfully updated to [{}]", changedVersion);
|
||||
changedVersion = this.updateProjectFromScRelease(project);
|
||||
}
|
||||
log.info("\n\n\n=== BUILD PROJECT ===\n\nPress ENTER to build the project {}", MSG);
|
||||
boolean skipBuild = skipStep();
|
||||
if (!skipBuild) {
|
||||
this.project.build();
|
||||
log.info("\nProject was successfully built");
|
||||
this.buildProject();
|
||||
}
|
||||
log.info("\n\n\n=== COMMITTING AND PUSHING TAGS ===\n\nPress ENTER to commit, tag and push the tag {}", MSG);
|
||||
boolean skipCommit = skipStep();
|
||||
if (!skipCommit) {
|
||||
this.projectGitUpdater.commitAndTagIfApplicable(project, changedVersion);
|
||||
log.info("\nCommit was made and tag was pushed successfully");
|
||||
this.commitAndPushTags(project, changedVersion);
|
||||
}
|
||||
log.info("\n\n\n=== ARTIFACT DEPLOYMENT ===\n\nPress ENTER to deploy the artifacts {}", MSG);
|
||||
boolean skipDeployment = skipStep();
|
||||
if (!skipDeployment) {
|
||||
this.project.deploy();
|
||||
log.info("\nThe artifact was deployed successfully");
|
||||
this.deploy();
|
||||
}
|
||||
log.info("\n\n\n=== PUBLISHING DOCS ===\n\nPress ENTER to deploy the artifacts {}", MSG);
|
||||
boolean skipDocs = skipStep();
|
||||
if (!skipDocs) {
|
||||
this.project.publishDocs(changedVersion.version);
|
||||
log.info("\nThe docs were published successfully");
|
||||
this.publishDocs(changedVersion);
|
||||
}
|
||||
if (!changedVersion.isSnapshot()) {
|
||||
log.info("\n\n\n=== REVERTING CHANGES & BUMPING VERSION===\n\nPress ENTER to go back to snapshots and bump originalVersion by patch {}", MSG);
|
||||
boolean skipRevert = skipStep();
|
||||
if (!skipRevert) {
|
||||
this.projectGitUpdater.revertChangesIfApplicable(project, changedVersion);
|
||||
this.project.bumpVersions(originalVersion.bumpedVersion());
|
||||
this.projectGitUpdater.commitAfterBumpingVersions(project, originalVersion);
|
||||
log.info("\nSuccessfully reverted the commit and bumped snapshot versions");
|
||||
rollbackReleaseVersion(project, originalVersion, changedVersion);
|
||||
}
|
||||
}
|
||||
log.info("\n\n\n=== PUSHING CHANGES===\n\nPress ENTER to push the commits {}", MSG);
|
||||
boolean skipPush = skipStep();
|
||||
if (!skipPush) {
|
||||
this.projectGitUpdater.pushCurrentBranch(project);
|
||||
log.info("\nSuccessfully pushed current branch");
|
||||
this.pushCurrentBranch(project);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@ public class ProjectGitUpdater {
|
||||
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
private static final String MSG = "Bumping versions";
|
||||
private static final String PRE_RELEASE_MSG = "Bumping versions before release";
|
||||
private static final String PRE_RELEASE_MSG = "Update SNAPSHOT to %s";
|
||||
private static final String POST_RELEASE_MSG = "Going back to snapshots";
|
||||
private static final String POST_RELEASE_BUMP_MSG = MSG + " after release";
|
||||
private static final String POST_RELEASE_BUMP_MSG = "Bumping versions to %s after release";
|
||||
|
||||
private final ReleaserProperties properties;
|
||||
|
||||
@@ -37,7 +37,7 @@ public class ProjectGitUpdater {
|
||||
gitRepo.commit(project, MSG);
|
||||
} else {
|
||||
log.info("NON-snapshot version [{}] found. Will commit the changed poms, tag the version and push the tag", version);
|
||||
gitRepo.commit(project, PRE_RELEASE_MSG);
|
||||
gitRepo.commit(project, String.format(PRE_RELEASE_MSG, version.version));
|
||||
String tagName = "v" + version.version;
|
||||
gitRepo.tag(project, tagName);
|
||||
gitRepo.pushTag(project, tagName);
|
||||
@@ -48,7 +48,7 @@ public class ProjectGitUpdater {
|
||||
GitRepo gitRepo = gitRepo(project);
|
||||
if (version.isSnapshot()) {
|
||||
log.info("Snapshot version [{}] found. Will only commit the changed poms", version);
|
||||
gitRepo.commit(project, POST_RELEASE_BUMP_MSG);
|
||||
gitRepo.commit(project, String.format(POST_RELEASE_BUMP_MSG, version.bumpedVersion()));
|
||||
} else {
|
||||
log.info("Non snapshot version [{}] found. Won't do anything", version);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class Project {
|
||||
public class ProjectBuilder {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
private static final String VERSION_MUSTACHE = "{{version}}";
|
||||
@@ -27,13 +27,13 @@ public class Project {
|
||||
private final ProcessExecutor executor;
|
||||
private final ProjectPomUpdater pomUpdater;
|
||||
|
||||
public Project(ReleaserProperties properties, ProjectPomUpdater pomUpdater) {
|
||||
public ProjectBuilder(ReleaserProperties properties, ProjectPomUpdater pomUpdater) {
|
||||
this.properties = properties;
|
||||
this.executor = new ProcessExecutor(properties);
|
||||
this.pomUpdater = pomUpdater;
|
||||
}
|
||||
|
||||
Project(ReleaserProperties properties, ProcessExecutor executor) {
|
||||
ProjectBuilder(ReleaserProperties properties, ProcessExecutor executor) {
|
||||
this.properties = properties;
|
||||
this.executor = executor;
|
||||
this.pomUpdater = new ProjectPomUpdater(properties);
|
||||
@@ -16,7 +16,7 @@ import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.TestPomReader;
|
||||
import org.springframework.cloud.release.internal.pom.TestUtils;
|
||||
import org.springframework.cloud.release.internal.project.Project;
|
||||
import org.springframework.cloud.release.internal.project.ProjectBuilder;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
@@ -56,9 +56,9 @@ public class AcceptanceTests {
|
||||
Iterable<RevCommit> commits = listOfCommits(project);
|
||||
Iterator<RevCommit> iterator = commits.iterator();
|
||||
tagIsPresentInOrigin(origin);
|
||||
commitIsPresent(iterator, "Bumping versions after release");
|
||||
commitIsPresent(iterator, "Bumping versions to 1.2.1.BUILD-SNAPSHOT after release");
|
||||
commitIsPresent(iterator, "Going back to snapshots");
|
||||
commitIsPresent(iterator, "Bumping versions before release");
|
||||
commitIsPresent(iterator, "Update SNAPSHOT to 1.1.2.RELEASE");
|
||||
pomVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
|
||||
pomParentVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
|
||||
}
|
||||
@@ -104,9 +104,9 @@ public class AcceptanceTests {
|
||||
private Releaser releaser(File projectFile) throws Exception {
|
||||
ReleaserProperties properties = releaserProperties(projectFile);
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
Project project = new Project(properties, pomUpdater);
|
||||
ProjectBuilder projectBuilder = new ProjectBuilder(properties, pomUpdater);
|
||||
ProjectGitUpdater gitUpdater = new ProjectGitUpdater(properties);
|
||||
return new Releaser(properties, pomUpdater, project, gitUpdater) {
|
||||
return new Releaser(properties, pomUpdater, projectBuilder, gitUpdater) {
|
||||
@Override boolean skipStep() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ public class ProjectGitUpdaterTests {
|
||||
public void should_commit_tag_and_push_tag_when_version_is_not_snapshot() {
|
||||
this.updater.commitAndTagIfApplicable(this.file, new ProjectVersion("1.0.0.RELEASE"));
|
||||
|
||||
then(this.gitRepo).should().commit(any(File.class), eq("Bumping versions before release"));
|
||||
then(this.gitRepo).should().commit(any(File.class), eq("Update SNAPSHOT to 1.0.0.RELEASE"));
|
||||
then(this.gitRepo).should().tag(any(File.class), eq("v1.0.0.RELEASE"));
|
||||
then(this.gitRepo).should().pushTag(any(File.class), eq("v1.0.0.RELEASE"));
|
||||
}
|
||||
@@ -50,7 +50,7 @@ public class ProjectGitUpdaterTests {
|
||||
public void should_commit_when_snapshot_version_is_present_with_post_release_msg() {
|
||||
this.updater.commitAfterBumpingVersions(this.file, new ProjectVersion("1.0.0.BUILD-SNAPSHOT"));
|
||||
|
||||
then(this.gitRepo).should().commit(any(File.class), eq("Bumping versions after release"));
|
||||
then(this.gitRepo).should().commit(any(File.class), eq("Bumping versions to 1.0.1.BUILD-SNAPSHOT after release"));
|
||||
then(this.gitRepo).should(never()).tag(any(File.class), anyString());
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ import static org.assertj.core.api.BDDAssertions.thenThrownBy;
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
public class ProjectTests {
|
||||
public class ProjectBuilderTests {
|
||||
|
||||
TestPomReader reader = new TestPomReader();
|
||||
|
||||
@@ -33,7 +33,7 @@ public class ProjectTests {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setBuildCommand("ls -al");
|
||||
properties.setWorkingDir(file("/projects/builder/resolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
builder.build();
|
||||
|
||||
@@ -46,7 +46,7 @@ public class ProjectTests {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setBuildCommand("ls -al");
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
thenThrownBy(builder::build).hasMessageContaining("contains a tag that wasn't resolved properly");
|
||||
}
|
||||
@@ -57,7 +57,7 @@ public class ProjectTests {
|
||||
properties.getMaven().setBuildCommand("sleep 1");
|
||||
properties.getMaven().setWaitTimeInMinutes(0);
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
thenThrownBy(builder::build).hasMessageContaining("Process waiting time of [0] minutes exceeded");
|
||||
}
|
||||
@@ -67,7 +67,7 @@ public class ProjectTests {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setDeployCommand("ls -al");
|
||||
properties.setWorkingDir(file("/projects/builder/resolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
builder.deploy();
|
||||
|
||||
@@ -81,7 +81,7 @@ public class ProjectTests {
|
||||
properties.getMaven().setDeployCommand("sleep 1");
|
||||
properties.getMaven().setWaitTimeInMinutes(0);
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
thenThrownBy(builder::deploy).hasMessageContaining("Process waiting time of [0] minutes exceeded");
|
||||
}
|
||||
@@ -92,7 +92,7 @@ public class ProjectTests {
|
||||
properties.getMaven().setPublishDocsCommands(new String[] { "ls -al", "ls -al" });
|
||||
properties.setWorkingDir(file("/projects/builder/resolved").getPath());
|
||||
TestProcessExecutor executor = executor(properties);
|
||||
Project builder = new Project(properties, executor);
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor);
|
||||
|
||||
builder.publishDocs("");
|
||||
|
||||
@@ -107,7 +107,7 @@ public class ProjectTests {
|
||||
properties.getMaven().setPublishDocsCommands(new String[] { "echo '{{version}}'" });
|
||||
properties.setWorkingDir(file("/projects/builder/resolved").getPath());
|
||||
TestProcessExecutor executor = executor(properties);
|
||||
Project builder = new Project(properties, executor);
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor);
|
||||
|
||||
builder.publishDocs("1.1.0.RELEASE");
|
||||
|
||||
@@ -121,7 +121,7 @@ public class ProjectTests {
|
||||
properties.getMaven().setPublishDocsCommands(new String[] { "ls -al", "ls -al" });
|
||||
properties.getMaven().setWaitTimeInMinutes(0);
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
thenThrownBy(() -> builder.publishDocs("")).hasMessageContaining("Process waiting time of [0] minutes exceeded");
|
||||
}
|
||||
@@ -131,7 +131,7 @@ public class ProjectTests {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setBuildCommand("exit 1");
|
||||
properties.setWorkingDir(file("/projects/builder/unresolved").getPath());
|
||||
Project builder = new Project(properties, new ProcessExecutor(properties) {
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, new ProcessExecutor(properties) {
|
||||
@Override Process startProcess(ProcessBuilder builder) throws IOException {
|
||||
return processWithInvalidExitCode();
|
||||
}
|
||||
@@ -144,7 +144,7 @@ public class ProjectTests {
|
||||
public void should_successfully_execute_a_bump_versions_command() throws Exception {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.setWorkingDir(file("/projects/spring-cloud-contract").getPath());
|
||||
Project builder = new Project(properties, executor(properties));
|
||||
ProjectBuilder builder = new ProjectBuilder(properties, executor(properties));
|
||||
|
||||
builder.bumpVersions("2.3.4.BUILD-SNAPSHOT");
|
||||
|
||||
@@ -205,7 +205,7 @@ public class ProjectTests {
|
||||
|
||||
private File file(String relativePath) {
|
||||
try {
|
||||
File root = new File(ProjectTests.class.getResource("/").toURI());
|
||||
File root = new File(ProjectBuilderTests.class.getResource("/").toURI());
|
||||
File file = new File(root, relativePath);
|
||||
if (!file.exists()) {
|
||||
file.createNewFile();
|
||||
@@ -18,7 +18,7 @@ package org.springframework.cloud.release.spring;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cloud.release.internal.Releaser;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.project.Project;
|
||||
import org.springframework.cloud.release.internal.project.ProjectBuilder;
|
||||
import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -31,6 +31,6 @@ class ReleaserConfiguration {
|
||||
@Bean Releaser releaser(ReleaserProperties properties) {
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
return new Releaser(properties, pomUpdater,
|
||||
new Project(properties, pomUpdater), new ProjectGitUpdater(properties));
|
||||
new ProjectBuilder(properties, pomUpdater), new ProjectGitUpdater(properties));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user