From 5af438fd870b38b53c103ac3e8cbb5161acc906c Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 10 Mar 2017 10:54:26 +0100 Subject: [PATCH] Fixed broken release process --- .../cloud/release/internal/Releaser.java | 17 +- .../release/internal/ReleaserProperties.java | 13 + .../cloud/release/internal/git/GitRepo.java | 4 +- .../internal/git/ProjectGitUpdater.java | 12 + .../release/internal/project/Project.java | 3 +- .../release/internal/AcceptanceTests.java | 107 +++++++++ .../PomUpdateAcceptanceTests.java} | 9 +- .../release/internal/git/GitRepoTests.java | 32 +-- .../release/internal/git/GitTestUtils.java | 41 ++++ .../internal/git/ProjectGitUpdaterTests.java | 16 ++ .../cloud/release/internal/pom/TestUtils.java | 1 + .../projects/spring-cloud-consul/.gitignore | 16 ++ .../spring-cloud-consul/git/COMMIT_EDITMSG | 1 + .../projects/spring-cloud-consul/git/HEAD | 1 + .../projects/spring-cloud-consul/git/config | 7 + .../spring-cloud-consul/git/description | 1 + .../projects/spring-cloud-consul/git/index | Bin 0 -> 373 bytes .../spring-cloud-consul/git/logs/HEAD | 1 + .../git/logs/refs/heads/master | 1 + .../2e/289de071592d4d361957e59cc0485c5e1941a0 | 2 + .../3f/e60ad83d20b9fcc485d1f4a07c84f81a4820f9 | 4 + .../41/a65456b03d965616e321ae1c3d3afc44599cec | Bin 0 -> 141 bytes .../51/4eff03a3ead54a8a2cc950ace02f85baf24e35 | Bin 0 -> 1552 bytes .../7e/a3be063a4f6503fe63c3a1db5b653cf774ab97 | Bin 0 -> 52 bytes .../8d/b262c5ba9b96d3a26a5e2b133f131194e4f915 | Bin 0 -> 115 bytes .../spring-cloud-consul/git/refs/heads/master | 1 + .../projects/spring-cloud-consul/pom.xml | 222 ++++++++++++++++++ .../spring-cloud-starter-consul/pom.xml | 57 +++++ 28 files changed, 527 insertions(+), 42 deletions(-) create mode 100644 spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java rename spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/{AcceptanceTests.java => internal/PomUpdateAcceptanceTests.java} (92%) create mode 100644 spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitTestUtils.java create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/.gitignore create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/COMMIT_EDITMSG create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/HEAD create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/config create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/description create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/index create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/HEAD create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/refs/heads/master create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/2e/289de071592d4d361957e59cc0485c5e1941a0 create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/3f/e60ad83d20b9fcc485d1f4a07c84f81a4820f9 create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/41/a65456b03d965616e321ae1c3d3afc44599cec create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/51/4eff03a3ead54a8a2cc950ace02f85baf24e35 create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/7e/a3be063a4f6503fe63c3a1db5b653cf774ab97 create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/8d/b262c5ba9b96d3a26a5e2b133f131194e4f915 create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/refs/heads/master create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/pom.xml create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/spring-cloud-starter-consul/pom.xml 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 c724d206..c76a7cf4 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 @@ -38,10 +38,12 @@ public class Releaser { log.info("\n\n\n=== UPDATING POMS ===\n\nWill run the application " + "for root folder [{}]. \n\nPress ENTER to continue {}", workingDir, MSG); boolean skipPoms = skipStep(); - ProjectVersion version = new ProjectVersion(project); + ProjectVersion originalVersion = new ProjectVersion(project); + ProjectVersion changedVersion = new ProjectVersion(project); if (!skipPoms) { this.projectPomUpdater.updateProject(project); - log.info("\n\nProject was successfully updated"); + changedVersion = new ProjectVersion(project); + log.info("\n\nProject was successfully updated to [{}]", originalVersion); } log.info("\n\n\n=== BUILD PROJECT ===\n\nPress ENTER to build the project {}", MSG); boolean skipBuild = skipStep(); @@ -52,7 +54,7 @@ public class Releaser { 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, version); + this.projectGitUpdater.commitAndTagIfApplicable(project, changedVersion); } log.info("\n\n\n=== ARTIFACT DEPLOYMENT ===\n\nPress ENTER to deploy the artifacts {}", MSG); boolean skipDeployment = skipStep(); @@ -64,12 +66,13 @@ public class Releaser { if (!skipDocs) { this.project.publishDocs(); } - if (!version.isSnapshot()) { - log.info("\n\n\n=== REVERTING CHANGES & BUMPING VERSION===\n\nPress ENTER to go back to snapshots and bump version by patch {}", MSG); + 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, version); - this.project.bumpVersions(version.bumpedVersion()); + this.projectGitUpdater.revertChangesIfApplicable(project, changedVersion); + this.project.bumpVersions(originalVersion.bumpedVersion()); + this.projectGitUpdater.commitAfterBumpingVersions(project, originalVersion); } } log.info("\n\n\n=== PUSHING CHANGES===\n\nPress ENTER to push the commits {}", MSG); diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java index 56421e0d..43f00fa8 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java @@ -129,6 +129,11 @@ 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 -DnewVersion=%s"; + /** * Command to be executed to deploy a built project */ @@ -174,6 +179,14 @@ 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() { diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java index 40d721c4..97e64fbb 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/git/GitRepo.java @@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; /** - * Abstraction over a Git repo. Can clonea repo from a given location + * Abstraction over a Git repo. Can cloned repo from a given location * and check its branch. * * @author Marcin Grzejszczak @@ -104,6 +104,7 @@ class GitRepo { */ void commit(File project, String message) { try(Git git = this.gitFactory.open(file(project))) { + git.add().addFilepattern(".").call(); git.commit().setMessage(message).call(); } catch (Exception e) { throw new IllegalStateException(e); @@ -168,6 +169,7 @@ class GitRepo { void revert(File project, String message) { try(Git git = this.gitFactory.open(file(project))) { RevCommit commit = git.log().setMaxCount(1).call().iterator().next(); + log.debug("The commit to be reverted is [{}]", commit); git.revert().include(commit).call(); git.commit().setAmend(true).setMessage(message).call(); } catch (Exception e) { 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 9eb91a88..f5aa3b99 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 @@ -22,6 +22,7 @@ public class ProjectGitUpdater { private static final String MSG = "Bumping versions"; private static final String PRE_RELEASE_MSG = "Bumping versions before release"; private static final String POST_RELEASE_MSG = "Going back to snapshots"; + private static final String POST_RELEASE_BUMP_MSG = MSG + " after release"; private final ReleaserProperties properties; @@ -43,6 +44,16 @@ public class ProjectGitUpdater { } } + public void commitAfterBumpingVersions(File project, ProjectVersion version) { + 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); + } else { + log.info("Non snapshot version [{}] found. Won't do anything", version); + } + } + public File cloneScReleaseProject() { try { File destinationDir = properties.getGit().getCloneDestinationDir() != null ? @@ -65,6 +76,7 @@ public class ProjectGitUpdater { log.info("Won't revert a snapshot version"); return; } + log.info("Reverting last commit"); gitRepo(project).revert(project, POST_RELEASE_MSG); } 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/Project.java index d0d95067..8fc60adc 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/Project.java @@ -20,7 +20,6 @@ import org.springframework.cloud.release.internal.ReleaserProperties; public class Project { private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private static final String BUMP_VERSIONS = "./mvnw versions:set -DnewVersion=%s"; private final ReleaserProperties properties; private final ProcessExecutor executor; @@ -95,7 +94,7 @@ public class Project { } String bumpVersionsCommand() { - return BUMP_VERSIONS; + return this.properties.getMaven().getBumpVersionsCommand(); } } 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 new file mode 100644 index 00000000..574f47a3 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/AcceptanceTests.java @@ -0,0 +1,107 @@ +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.eclipse.jgit.revwalk.RevCommit; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.springframework.cloud.release.internal.git.GitRepoTests; +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.util.FileSystemUtils; + +import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.cloud.release.internal.git.GitTestUtils.clonedProject; +import static org.springframework.cloud.release.internal.git.GitTestUtils.openGitProject; +import static org.springframework.cloud.release.internal.git.GitTestUtils.setOriginOnProjectToTmp; + +/** + * @author Marcin Grzejszczak + */ +public class AcceptanceTests { + + @Rule public TemporaryFolder tmp = new TemporaryFolder(); + TestPomReader testPomReader = new TestPomReader(); + File springCloudConsulProject; + File temporaryFolder; + + @Before + public void setup() throws Exception { + this.temporaryFolder = this.tmp.newFolder(); + this.springCloudConsulProject = new File(GitRepoTests.class.getResource("/projects/spring-cloud-consul").toURI()); + TestUtils.prepareLocalRepo(); + FileSystemUtils.copyRecursively(file("/projects/"), this.temporaryFolder); + } + + @Test + public void should_perform_a_release_of_consul() throws Exception { + File origin = clonedProject(this.tmp.newFolder(), this.springCloudConsulProject); + 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 commits = openGitProject(project).log().call(); + Iterator iterator = commits.iterator(); + RevCommit afterRelease = iterator.next(); + RevCommit goingBackToSnapshots = iterator.next(); + RevCommit bumping = iterator.next(); + 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 ReleaserProperties releaserProperties(File project) throws URISyntaxException { + ReleaserProperties releaserProperties = new ReleaserProperties(); + releaserProperties.getGit().setSpringCloudReleaseGitUrl(file("/projects/spring-cloud-release/").toURI().getPath()); + releaserProperties.getPom().setBranch("vCamden.SR5"); + releaserProperties.setWorkingDir(project.getPath()); + 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); + ProjectGitUpdater gitUpdater = new ProjectGitUpdater(properties); + return new Releaser(properties, pomUpdater, project, gitUpdater) { + @Override boolean skipStep() { + return false; + } + }; + } + + private File tmpFile(String relativePath) { + return new File(this.temporaryFolder, relativePath); + } + + 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())); + } +} diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/AcceptanceTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java similarity index 92% rename from spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/AcceptanceTests.java rename to spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java index 75cca539..32a22d65 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/AcceptanceTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/PomUpdateAcceptanceTests.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.release; +package org.springframework.cloud.release.internal; import java.io.File; import java.io.IOException; @@ -11,7 +11,6 @@ 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.ReleaserProperties; import org.springframework.cloud.release.internal.pom.TestPomReader; import org.springframework.cloud.release.internal.pom.TestUtils; import org.springframework.util.FileSystemUtils; @@ -21,7 +20,7 @@ import static org.assertj.core.api.BDDAssertions.then; /** * @author Marcin Grzejszczak */ -public class AcceptanceTests { +public class PomUpdateAcceptanceTests { @Rule public TemporaryFolder tmp = new TemporaryFolder(); TestPomReader testPomReader = new TestPomReader(); @@ -83,11 +82,11 @@ public class AcceptanceTests { } private File file(String relativePath) throws URISyntaxException { - return new File(AcceptanceTests.class.getResource(relativePath).toURI()); + return new File(PomUpdateAcceptanceTests.class.getResource(relativePath).toURI()); } private File pom(String relativePath) throws URISyntaxException { - return new File(new File(AcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml"); + return new File(new File(PomUpdateAcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml"); } private String asString(File file) throws IOException { diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java index 607e6119..aef5a0a3 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitRepoTests.java @@ -4,19 +4,15 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; -import java.net.MalformedURLException; import java.net.URISyntaxException; import java.nio.file.Files; import java.util.List; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.RemoteRemoveCommand; -import org.eclipse.jgit.api.RemoteSetUrlCommand; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; -import org.eclipse.jgit.transport.URIish; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -26,6 +22,8 @@ import org.springframework.cloud.release.internal.pom.TestUtils; import static org.assertj.core.api.Assertions.fail; import static org.assertj.core.api.BDDAssertions.then; import static org.assertj.core.api.BDDAssertions.thenThrownBy; +import static org.springframework.cloud.release.internal.git.GitTestUtils.clonedProject; +import static org.springframework.cloud.release.internal.git.GitTestUtils.setOriginOnProjectToTmp; /** * @author Marcin Grzejszczak @@ -133,7 +131,7 @@ public class GitRepoTests { @Test public void should_push_changes_to_master_branch() throws Exception { - File origin = clonedProject(); + File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject); File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI()); setOriginOnProjectToTmp(origin, project); createNewFile(project); @@ -149,7 +147,7 @@ public class GitRepoTests { @Test public void should_push_changes_to_current_branch() throws Exception { - File origin = clonedProject(); + File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject); File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI()); setOriginOnProjectToTmp(origin, project); createNewFile(project); @@ -165,7 +163,7 @@ public class GitRepoTests { @Test public void should_push_a_tag_to_new_branch_in_origin() throws Exception { - File origin = clonedProject(); + File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject); File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI()); setOriginOnProjectToTmp(origin, project); createNewFile(project); @@ -182,31 +180,11 @@ public class GitRepoTests { } } - private void setOriginOnProjectToTmp(File origin, File project) - throws GitAPIException, MalformedURLException { - try(Git git = openGitProject(project)) { - RemoteRemoveCommand remove = git.remoteRemove(); - remove.setName("origin"); - remove.call(); - RemoteSetUrlCommand command = git.remoteSetUrl(); - command.setUri(new URIish(origin.toURI().toURL())); - command.setName("origin"); - command.setPush(true); - command.call(); - } - } private Git openGitProject(File project) { return new GitRepo.JGitFactory().open(project); } - private File clonedProject() throws IOException { - File anotherFolder = this.tmp.newFolder(); - GitRepo projectRepo = new GitRepo(anotherFolder); - projectRepo.cloneProject(this.springCloudReleaseProject.toURI()); - return anotherFolder; - } - private void createNewFile(File project) throws Exception { File newFile = new File(this.tmpFolder, "newFile"); newFile.createNewFile(); diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitTestUtils.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitTestUtils.java new file mode 100644 index 00000000..0a6e35db --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/git/GitTestUtils.java @@ -0,0 +1,41 @@ +package org.springframework.cloud.release.internal.git; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.RemoteRemoveCommand; +import org.eclipse.jgit.api.RemoteSetUrlCommand; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.transport.URIish; + +/** + * @author Marcin Grzejszczak + */ +public class GitTestUtils { + + public static void setOriginOnProjectToTmp(File origin, File project) + throws GitAPIException, MalformedURLException { + try(Git git = openGitProject(project)) { + RemoteRemoveCommand remove = git.remoteRemove(); + remove.setName("origin"); + remove.call(); + RemoteSetUrlCommand command = git.remoteSetUrl(); + command.setUri(new URIish(origin.toURI().toURL())); + command.setName("origin"); + command.setPush(true); + command.call(); + } + } + + public static Git openGitProject(File project) { + return new GitRepo.JGitFactory().open(project); + } + + public static File clonedProject(File baseDir, File projectToClone) throws IOException { + GitRepo projectRepo = new GitRepo(baseDir); + projectRepo.cloneProject(projectToClone.toURI()); + return baseDir; + } +} 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 400163df..a00fc8b8 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 @@ -46,6 +46,22 @@ public class ProjectGitUpdaterTests { then(this.gitRepo).should().pushTag(any(File.class), eq("v1.0.0.RELEASE")); } + @Test + 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(never()).tag(any(File.class), anyString()); + } + + @Test + public void should_not_commit_when_non_snapshot_version_is_present() { + this.updater.commitAfterBumpingVersions(this.file, new ProjectVersion("1.0.0.RELEASE")); + + then(this.gitRepo).should(never()).commit(any(File.class), eq("Bumping versions after release")); + then(this.gitRepo).should(never()).tag(any(File.class), anyString()); + } + @Test public void should_not_revert_changes_for_snapshots() { this.updater.revertChangesIfApplicable(this.file, new ProjectVersion("1.0.0.BUILD-SNAPSHOT")); diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/TestUtils.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/TestUtils.java index c77075a2..184687c4 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/TestUtils.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/TestUtils.java @@ -9,6 +9,7 @@ public class TestUtils { public static void prepareLocalRepo() throws IOException { prepareLocalRepo("target/test-classes/projects/", "spring-cloud-release"); + prepareLocalRepo("target/test-classes/projects/", "spring-cloud-consul"); } private static void prepareLocalRepo(String buildDir, String repoPath) throws IOException { diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/.gitignore b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/.gitignore new file mode 100644 index 00000000..8db262c5 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/.gitignore @@ -0,0 +1,16 @@ +*~ +#* +*# +.#* +.classpath +.project +.settings/ +.springBeans +target/ +_site/ +.idea +*.iml +*.ipr +.factorypath +*.swp +/consul \ No newline at end of file diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/COMMIT_EDITMSG b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/COMMIT_EDITMSG new file mode 100644 index 00000000..5852f446 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/COMMIT_EDITMSG @@ -0,0 +1 @@ +Initial commit diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/HEAD b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/config b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/config new file mode 100644 index 00000000..6c9406b7 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/config @@ -0,0 +1,7 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = true diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/description b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/index b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/index new file mode 100644 index 0000000000000000000000000000000000000000..fcccf6d736c1cba260c9b8032511e9c26cb57115 GIT binary patch literal 373 zcmZ?q402{*U|<4b=7>Yt&ww;T_?AR(5Y5QIz{2>WVkZMb;}Rh6J4g%&N_saX9o;p1 z+T}%AaoWQ6!h%zt{1j#2(o4@Q$xP47FG__dV_<-p7jY=o5F`dQZx^b0GNyrk|CtxR zy6V-Xb24Df1O3)rpZrW2*bDM=^(u06fckKlvjf!}_R03oxNg`g?EG`2_2QQWH7!4+ zJQRL1C>IwLW#*;pCgvV7U?GE=M|Uc=p*a^xi2Kh)fGtjG8iiuayc#w z3EN;hElljO;yM{yt3NK0bKc-FiosC9fU9otJ~k`=ROWxlhZo+CPPO@7vU>W&kevC> V_g}4wp7cjWxMlInLzi#-1OTTMe1`x4 literal 0 HcmV?d00001 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/HEAD b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/HEAD new file mode 100644 index 00000000..8fc76092 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 2e289de071592d4d361957e59cc0485c5e1941a0 Marcin Grzejszczak 1489136624 +0100 commit (initial): Initial commit diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/refs/heads/master b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/refs/heads/master new file mode 100644 index 00000000..8fc76092 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 2e289de071592d4d361957e59cc0485c5e1941a0 Marcin Grzejszczak 1489136624 +0100 commit (initial): Initial commit diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/2e/289de071592d4d361957e59cc0485c5e1941a0 b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/2e/289de071592d4d361957e59cc0485c5e1941a0 new file mode 100644 index 00000000..fe76f9f2 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/2e/289de071592d4d361957e59cc0485c5e1941a0 @@ -0,0 +1,2 @@ +x10 @Q;"0@Ӣ ˜s1jQL:[7D +CV78!FQ1 դvyimcQamZ#˻9N&˙WB \ No newline at end of file diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/3f/e60ad83d20b9fcc485d1f4a07c84f81a4820f9 b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/3f/e60ad83d20b9fcc485d1f4a07c84f81a4820f9 new file mode 100644 index 00000000..c6d94969 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/3f/e60ad83d20b9fcc485d1f4a07c84f81a4820f9 @@ -0,0 +1,4 @@ +xUo0+L#ۍV`1ic!^;n sv >ww}*!ӳJ>d2!c68Q7H-A4`fm9` <UzF7 ,9XFWUES;  +i,) ?R)jbidYQNT /uױX 1% -;Tyy"5Fm&P)g[Ak+&<QC +S%<ֽ7}zҽ??Flurd#ng1k g&}*-d"mc"pq' yRTMm uqO*ӈJbۂÉ1uRwٟUmj(\M䑷X0x}V. +4/-,QwOgsHUA!DFWbkC^^!c.4d$'EH2D*K! ǐ0`sҶ5Uj2΀N-[|7GG{O}FfcPQQP4}zEXhpI%P&f0=-rfbbl2=@mltKlX$#v6 z3r>0RQxvMIAU{{HA~%O2(CvV7U?GE=M|UcFw`yH$7bc9%KR_+@WR{CsW#tBR!;{2h2}N~NWMcm literal 0 HcmV?d00001 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/51/4eff03a3ead54a8a2cc950ace02f85baf24e35 b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/51/4eff03a3ead54a8a2cc950ace02f85baf24e35 new file mode 100644 index 0000000000000000000000000000000000000000..53727c398ad32f3568a9095b5cf545018fd7575a GIT binary patch literal 1552 zcmV+r2JiWJ0qt3BZ`(Ey-q++;s7Aj^iro$!0>xdIZfJpI4Vre?S6ZTNHIk^2QXHe$ zf8WD5nUZb!Wm(Yx`w+k+?@sqTJl-9dNyaALtI=rqL-hI~&%AreMaqhc!7w-*c(jOF zk`}Xz!RJrE`9BR_k58kLvoAERJV+PfVlc0&@;nT4a!-qZlq8B)%}K7SBtqp(;kg2f9ZIyyTWhJRjP-9k4fep-l%6fxC`B0U#s{))w2 zXhk4Rc$H2`TtPt#`%1=-St05y3Y~RG8`{UiUUj)M*{3j8o8N%S6-jHe@D#xDrzLzm}SC^i4*PC*ddz_X`q!r^!&-djf zgDee3;^M5N*dZ#EiPjEHY7tn*hrx>t`>|DA^3+<4S)OAL9DAGgw^wC@&0?C)9Fsd; zM9jGwYZePyO|$gj5R+Y%HJb@7Gq$AMF?t3vyP@5JzNWKgRaBgkys>#XrR5u!Q(kny;is z!K)}-pH`9Uge%4(&Q;jfJR3`21QPHpt>*P4K){7Ar>#Mge59gu0)bH=m&9oo|kC`=Cwk%SVF~?CzZJD zK!076Saa1YX^)UFSj}UK?gAOc{8rNPmsFAUGc?EDrc(N{!q_6n>g_;W zQPINtEurbE?d#0uYfpN%um!JO@waT}cL1&l6jgN|3EhT}+#bQ-az{}S_CJ!X{d79= zwaxr);hNU}NXVUw!&8DS%f`{D-HXc80c~zWN22cBrPg5o%kuLK_hU}~s#8uAZ?g0d zS^$VT@`&(=hhpY6dC6RzQAk!(of;;s%@~_y6y_2d$ZJ$jhohH! zQk{DZ>oBpNtR%E4Lu;d6eDr0_K4Ixwf1m44gQjkDXuDW}eg*BH?csElcidfF{d(H6 z=U-Q1TT1LYmaPmQ?WVe)IKFq=9u0bRU)@RfRu`LFYY%gdOpi~E)SkRKJnF{MnP|13 zZf|N@&~8w-I(J=wRt@NcG4w)iT)2(9DOXZRcAu-p*+*{~Qy~~`XC2rPQx9<@8&|x> zb*vd;pIj6;aL&-6gxM+X2>SWT40N}d+6Tud#81_cHcw#&IP5o5x<|!Kqvwl)lw!{0 zIWQKm>^?5ut^~}>B6`h}$bF8G_RTA4kg_mKC!(=yyH)cFAyu1C>g<9UT98Rb6T^)i zsSpMoU3vK|NQuyVC}*t3l;DLZ3hmGuXv;@omyce8a>;y!T(Om*Ye(V`iWvTb_Wejq4oDm9=63$kz6aZRdu?wP{yz%xD4I)tmz6Gy z8^~&c_lX?~{i<;U;730qDoq-z|49be2z71C%?ZK0t}?0uttyV1m;VDCpZ)_#XHp&+ Ccl^-+ literal 0 HcmV?d00001 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/7e/a3be063a4f6503fe63c3a1db5b653cf774ab97 b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/7e/a3be063a4f6503fe63c3a1db5b653cf774ab97 new file mode 100644 index 0000000000000000000000000000000000000000..8fe54262311d82b29e1e7dd4647c3a1b7fc84510 GIT binary patch literal 52 zcmV-40L%Y)0V^p=O;s>9WiT`_Ff%bxD9F#%tH{k^uz$vN!&YJEpChdozbvR}`61<@ K@Dl(&ZxM|hZx(I< literal 0 HcmV?d00001 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/8d/b262c5ba9b96d3a26a5e2b133f131194e4f915 b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/objects/8d/b262c5ba9b96d3a26a5e2b133f131194e4f915 new file mode 100644 index 0000000000000000000000000000000000000000..107086caa8602a68435c07be3b99ca1bfe6ebf83 GIT binary patch literal 115 zcmV-(0F3{50UeAn4#F@DMVWmHq;4J@b?E`P2y%ldK_RhhBh;m5C$PN#q%Xa-_Vql^ z%Lxyd5O4w-L%FiMay)?4`crZMxkQw>}J8f^CyXaP<;0zH$==r1GjissY_O VN4Nc-L-LP8%Dwr!egQQICwL=lGtdA4 literal 0 HcmV?d00001 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/refs/heads/master b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/refs/heads/master new file mode 100644 index 00000000..36b256ea --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/git/refs/heads/master @@ -0,0 +1 @@ +2e289de071592d4d361957e59cc0485c5e1941a0 diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/pom.xml b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/pom.xml new file mode 100644 index 00000000..514eff03 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/pom.xml @@ -0,0 +1,222 @@ + + + 4.0.0 + + org.springframework.cloud + spring-cloud-consul + 1.2.0.BUILD-SNAPSHOT + pom + Spring Cloud Consul + Spring Cloud Consul + + + org.springframework.cloud + spring-cloud-build + 1.3.1.BUILD-SNAPSHOT + + + + + + 1.3.0.BUILD-SNAPSHOT + 1.2.0.BUILD-SNAPSHOT + 1.3.0.BUILD-SNAPSHOT + 1.3.0.BUILD-SNAPSHOT + 1.0.3.BUILD-SNAPSHOT + Chelsea.BUILD-SNAPSHOT + 2.3.1 + 4.5.2 + 4.4.5 + 2.7 + + + + https://github.com/spring-cloud/spring-cloud-consul + scm:git:git://github.com/spring-cloud/spring-cloud-consul.git + scm:git:ssh://git@github.com/spring-cloud/spring-cloud-consul.git + HEAD + + + + spring-cloud-consul-dependencies + spring-cloud-consul-core + spring-cloud-consul-config + spring-cloud-consul-discovery + spring-cloud-consul-binder + spring-cloud-consul-sample + spring-cloud-starter-consul + spring-cloud-starter-consul-bus + spring-cloud-starter-consul-config + spring-cloud-starter-consul-discovery + spring-cloud-starter-consul-all + docs + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + + + + + + + + org.springframework.cloud + spring-cloud-consul-dependencies + ${project.version} + import + pom + + + org.springframework.cloud + spring-cloud-deployer-local + ${spring-cloud-deployer.version} + test + + + org.springframework.cloud + spring-cloud-stream-binder-test + ${spring-cloud-stream.version} + test + + + org.springframework.cloud + spring-cloud-stream-dependencies + ${spring-cloud-stream.version} + pom + import + + + org.springframework.cloud + spring-cloud-bus-dependencies + ${spring-cloud-bus.version} + pom + import + + + org.springframework.cloud + spring-cloud-commons-dependencies + ${spring-cloud-commons.version} + pom + import + + + org.springframework.cloud + spring-cloud-config-dependencies + ${spring-cloud-config.version} + pom + import + + + org.springframework.cloud + spring-cloud-netflix-dependencies + ${spring-cloud-netflix.version} + import + pom + + + + com.google.code.gson + gson + ${gson.version} + + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + org.apache.httpcomponents + httpcore + ${httpcore.version} + + + joda-time + joda-time + ${joda-time.version} + + + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + spring + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/libs-release-local + + false + + + + + + diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/spring-cloud-starter-consul/pom.xml b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/spring-cloud-starter-consul/pom.xml new file mode 100644 index 00000000..3fe60ad8 --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/spring-cloud-consul/spring-cloud-starter-consul/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.springframework.cloud + spring-cloud-consul + 1.2.0.BUILD-SNAPSHOT + .. + + spring-cloud-starter-consul + Spring Cloud Starter Consul + Spring Cloud Starter Consul + https://projects.spring.io/spring-cloud + + Pivotal Software, Inc. + https://www.spring.io + + + ${basedir}/../.. + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-commons + + + org.springframework.cloud + spring-cloud-context + + + org.springframework.cloud + spring-cloud-consul-core + + + com.ecwid.consul + consul-api + + + + com.google.code.gson + gson + + + org.apache.httpcomponents + httpclient + + + org.apache.httpcomponents + httpcore + + +