From 0a18deff11f1d2e66ac243168ae7786373c6ed20 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 13 Mar 2017 12:00:56 +0100 Subject: [PATCH] Better commit messages fixes #5 --- .../cloud/release/internal/Releaser.java | 71 +++++++++++++------ .../internal/git/ProjectGitUpdater.java | 8 +-- .../{Project.java => ProjectBuilder.java} | 6 +- .../release/internal/AcceptanceTests.java | 10 +-- .../internal/git/ProjectGitUpdaterTests.java | 4 +- ...ectTests.java => ProjectBuilderTests.java} | 24 +++---- .../release/spring/ReleaserConfiguration.java | 4 +- 7 files changed, 78 insertions(+), 49 deletions(-) rename spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/{Project.java => ProjectBuilder.java} (96%) rename spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/{ProjectTests.java => ProjectBuilderTests.java} (88%) diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/Releaser.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/Releaser.java index f0d18609..e06a7e07 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/Releaser.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/Releaser.java @@ -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); } } diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/ProjectGitUpdater.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/ProjectGitUpdater.java index f5aa3b99..372dff94 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/ProjectGitUpdater.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/ProjectGitUpdater.java @@ -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); } diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/Project.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java similarity index 96% rename from spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/Project.java rename to spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java index 5e0bc1f5..a9e2f967 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/Project.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java @@ -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); diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java index cf4621f7..a6c2b0a7 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java @@ -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 commits = listOfCommits(project); Iterator 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; } diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/ProjectGitUpdaterTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/ProjectGitUpdaterTests.java index a00fc8b8..032dea36 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/ProjectGitUpdaterTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/ProjectGitUpdaterTests.java @@ -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()); } diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java similarity index 88% rename from spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectTests.java rename to spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java index e35ae46d..0534e240 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java @@ -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(); diff --git a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/spring/ReleaserConfiguration.java b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/spring/ReleaserConfiguration.java index 6f05e9a0..406b0535 100644 --- a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/spring/ReleaserConfiguration.java +++ b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/spring/ReleaserConfiguration.java @@ -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)); } }