Added an option not to clone sc-release; fixes gh-82

This commit is contained in:
Marcin Grzejszczak
2018-05-10 16:29:44 +02:00
parent b39070f428
commit 311e28b33e
5 changed files with 63 additions and 5 deletions

View File

@@ -214,6 +214,7 @@ $ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/
- `releaser.fixed-versions` - A String to String mapping of manually set versions. E.g. `"spring-cloud-cli" -> "1.0.0.RELEASE"` will set
the `spring-cloud-cli.version` to `1.0.0.RELEASE` regardless of what was set in `spring-cloud-release` project. Example `--releaser.fixed-versions[spring-cloud-cli]=1.0.0.RELEASE`.
- `releaser.git.fetch-versions-from-git` - If `true` then should fill the map of versions from Git. If `false` then picks fixed versions
- `releaser.git.clone-destination-dir` - Where should the Spring Cloud Release repo get cloned to. If null defaults to a temporary directory
- `releaser.git.spring-cloud-release-git-url` - URL to Spring Cloud Release Git repository. Defaults to `https://github.com/spring-cloud/spring-cloud-release`
- `releaser.git.oauth-token` - GitHub OAuth token to be used to interact with GitHub repo.

View File

@@ -15,6 +15,7 @@ import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.cloud.release.internal.pom.ProjectVersion;
import org.springframework.cloud.release.internal.pom.Projects;
import org.springframework.cloud.release.internal.project.ProjectBuilder;
import org.springframework.util.Assert;
/**
* @author Marcin Grzejszczak
@@ -119,6 +120,8 @@ public class Releaser {
}
public void createEmail(ProjectVersion releaseVersion) {
Assert.notNull(releaseVersion, "You must provide a release version for your project");
Assert.notNull(releaseVersion.version, "You must provide a release version for your project");
if (releaseVersion.isSnapshot()) {
log.info("\nWon't create email template for a SNAPSHOT version");
return;

View File

@@ -59,6 +59,11 @@ public class ReleaserProperties {
*/
private String cloneDestinationDir;
/**
* If {@code true} then should fill the map of versions from Git. If {@code false} then picks fixed versions
*/
private boolean fetchVersionsFromGit = true;
/**
* GitHub OAuth token to be used to interact with GitHub repo
*/
@@ -127,6 +132,14 @@ public class ReleaserProperties {
public void setNumberOfCheckedMilestones(Integer numberOfCheckedMilestones) {
this.numberOfCheckedMilestones = numberOfCheckedMilestones;
}
public boolean isFetchVersionsFromGit() {
return this.fetchVersionsFromGit;
}
public void setFetchVersionsFromGit(boolean fetchVersionsFromGit) {
this.fetchVersionsFromGit = fetchVersionsFromGit;
}
}
public static class Pom {

View File

@@ -3,6 +3,7 @@ package org.springframework.cloud.release.internal.spring;
import java.io.File;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,6 +14,7 @@ import org.springframework.cloud.release.internal.options.Options;
import org.springframework.cloud.release.internal.options.OptionsBuilder;
import org.springframework.cloud.release.internal.pom.ProjectVersion;
import org.springframework.cloud.release.internal.pom.Projects;
import org.springframework.cloud.release.internal.sagan.Project;
/**
* Releaser that gets input from console
@@ -48,14 +50,25 @@ public class SpringReleaser {
}
public void release(Options options) {
printVersionRetrieval();
String workingDir = this.properties.getWorkingDir();
File project = new File(workingDir);
ProjectVersion originalVersion = new ProjectVersion(project);
Projects projectsFromScRelease = this.releaser.retrieveVersionsFromSCRelease();
ProjectVersion versionFromScRelease = projectsFromScRelease.forFile(project);
assertNoSnapshotsForANonSnapshotProject(projectsFromScRelease, versionFromScRelease);
final Args defaultArgs = new Args(this.releaser, project, projectsFromScRelease,
ProjectVersion versionFromScRelease;
Projects projectsToUpdate;
if (this.properties.getGit().isFetchVersionsFromGit()) {
printVersionRetrieval();
projectsToUpdate = this.releaser.retrieveVersionsFromSCRelease();
versionFromScRelease = projectsToUpdate.forFile(project);
assertNoSnapshotsForANonSnapshotProject(projectsToUpdate, versionFromScRelease);
} else {
String fixedVersionForProject = this.properties.getFixedVersions().get(originalVersion.projectName);
versionFromScRelease = new ProjectVersion(originalVersion.projectName, fixedVersionForProject);
projectsToUpdate = this.properties.getFixedVersions().entrySet().stream()
.map(entry -> new ProjectVersion(entry.getKey(), entry.getValue()))
.distinct().collect(Collectors.toCollection(Projects::new));
printSettingVersionFromFixedVersions(projectsToUpdate);
}
final Args defaultArgs = new Args(this.releaser, project, projectsToUpdate,
originalVersion, versionFromScRelease, this.properties, options.interactive);
this.optionsProcessor.processOptions(options, defaultArgs);
}
@@ -65,6 +78,11 @@ public class SpringReleaser {
+ " to retrieve all versions for the branch [{}]", this.properties.getPom().getBranch());
}
private void printSettingVersionFromFixedVersions(Projects projectsToUpdate) {
log.info("\n\n\n=== RETRIEVED VERSIONS ===\n\nWill use the fixed versions"
+ " of projects [{}]", projectsToUpdate);
}
private void assertNoSnapshotsForANonSnapshotProject(Projects projects,
ProjectVersion versionFromScRelease) {
if (!versionFromScRelease.isSnapshot() && projects.containsSnapshots()) {

View File

@@ -20,6 +20,7 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.BDDMockito;
import org.mockito.Mockito;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.Releaser;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.git.GitTestUtils;
@@ -49,6 +50,7 @@ public class AcceptanceTests {
File temporaryFolder;
TestProjectGitHandler gitHandler;
SaganClient saganClient = Mockito.mock(SaganClient.class);
ReleaserProperties releaserProperties;
@Before
public void setup() throws Exception {
@@ -92,6 +94,25 @@ public class AcceptanceTests {
.hasMessageContaining("there is at least one SNAPSHOT library version in the Spring Cloud Release project");
}
@Test
public void should_not_clone_when_option_not_to_clone_was_switched_on() throws Exception {
File origin = GitTestUtils.clonedProject(this.tmp.newFolder(), this.springCloudConsulProject);
pomVersionIsEqualTo(origin, "1.2.0.BUILD-SNAPSHOT");
consulPomParentVersionIsEqualTo(origin, "1.2.0.BUILD-SNAPSHOT");
File project = GitTestUtils.clonedProject(this.tmp.newFolder(), tmpFile("spring-cloud-consul"));
GitTestUtils.setOriginOnProjectToTmp(origin, project);
SpringReleaser releaser = templateOnlyReleaser(project, "spring-cloud-consul",
"vCamden.SR5", "1.1.2.RELEASE");
this.releaserProperties.getGit().setFetchVersionsFromGit(false);
this.releaserProperties.getFixedVersions().put("spring-cloud-consul", "2.3.4.RELEASE");
File temporaryDestination = tmp.newFolder();
this.releaserProperties.getGit().setCloneDestinationDir(temporaryDestination.getAbsolutePath());
releaser.release();
then(temporaryDestination.list()).isEmpty();
}
@Test
public void should_perform_a_release_of_consul() throws Exception {
File origin = GitTestUtils.clonedProject(this.tmp.newFolder(), this.springCloudConsulProject);
@@ -384,12 +405,14 @@ public class AcceptanceTests {
releaserProperties.getMaven().setBuildCommand("echo build");
releaserProperties.getMaven().setDeployCommand("echo deploy");
releaserProperties.getMaven().setPublishDocsCommands(new String[] { "echo docs"} );
this.releaserProperties = releaserProperties;
return releaserProperties;
}
private ReleaserProperties snapshotScReleaseReleaserProperties(File project, String branch) throws URISyntaxException {
ReleaserProperties releaserProperties = releaserProperties(project, branch);
releaserProperties.getGit().setSpringCloudReleaseGitUrl(file("/projects/spring-cloud-release-with-snapshot/").toURI().getPath());
this.releaserProperties = releaserProperties;
return releaserProperties;
}