Updates guides as a post action
fixes gh-147
This commit is contained in:
@@ -17,12 +17,15 @@
|
||||
package org.springframework.cloud.release.internal.spring;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.springframework.cloud.release.internal.Releaser;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.pom.ProcessedProject;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.Projects;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
@@ -47,6 +50,8 @@ class Args {
|
||||
|
||||
final ReleaserProperties properties;
|
||||
|
||||
final List<ProcessedProject> processedProjects;
|
||||
|
||||
final boolean interactive;
|
||||
|
||||
final TaskType taskType;
|
||||
@@ -63,6 +68,8 @@ class Args {
|
||||
this.originalVersion = originalVersion;
|
||||
this.versionFromScRelease = versionFromScRelease;
|
||||
this.properties = properties;
|
||||
this.processedProjects = Collections
|
||||
.singletonList(new ProcessedProject(properties, versionFromScRelease));
|
||||
this.interactive = interactive;
|
||||
this.taskType = taskType;
|
||||
this.applicationEventPublisher = applicationEventPublisher;
|
||||
@@ -70,14 +77,15 @@ class Args {
|
||||
|
||||
// Used by meta-release task
|
||||
Args(Releaser releaser, Projects projects, ProjectVersion versionFromScRelease,
|
||||
ReleaserProperties properties, boolean interactive,
|
||||
ApplicationEventPublisher applicationEventPublisher) {
|
||||
ReleaserProperties properties, List<ProcessedProject> processedProjects,
|
||||
boolean interactive, ApplicationEventPublisher applicationEventPublisher) {
|
||||
this.releaser = releaser;
|
||||
this.project = null;
|
||||
this.projects = projects;
|
||||
this.originalVersion = null;
|
||||
this.versionFromScRelease = versionFromScRelease;
|
||||
this.properties = properties;
|
||||
this.processedProjects = processedProjects;
|
||||
this.interactive = interactive;
|
||||
this.taskType = TaskType.POST_RELEASE;
|
||||
this.applicationEventPublisher = applicationEventPublisher;
|
||||
@@ -91,6 +99,7 @@ class Args {
|
||||
this.originalVersion = null;
|
||||
this.versionFromScRelease = null;
|
||||
this.properties = null;
|
||||
this.processedProjects = Collections.emptyList();
|
||||
this.interactive = false;
|
||||
this.taskType = taskType;
|
||||
this.applicationEventPublisher = null;
|
||||
@@ -112,10 +121,9 @@ class Args {
|
||||
public String toString() {
|
||||
return "Args{" + "releaser=" + this.releaser + ", project=" + this.project
|
||||
+ ", projects=" + this.projects + ", originalVersion="
|
||||
+ this.originalVersion + ", versionFromScRelease="
|
||||
+ this.versionFromScRelease + ", properties=" + this.properties
|
||||
+ ", interactive=" + this.interactive + ", taskType=" + this.taskType
|
||||
+ '}';
|
||||
+ this.originalVersion + ", versionFromBom=" + this.versionFromScRelease
|
||||
+ ", properties=" + this.properties + ", interactive=" + this.interactive
|
||||
+ ", taskType=" + this.taskType + '}';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -56,8 +56,8 @@ class ReleaserConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
ProjectBuilder projectBuilder(VersionsFetcher versionsFetcher) {
|
||||
return new ProjectBuilder(this.properties, versionsFetcher);
|
||||
ProjectBuilder projectBuilder() {
|
||||
return new ProjectBuilder(this.properties);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -94,9 +94,10 @@ class ReleaserConfiguration {
|
||||
@Bean
|
||||
PostReleaseActions postReleaseActions(ProjectGitHandler handler,
|
||||
ProjectPomUpdater pomUpdater, GradleUpdater gradleUpdater,
|
||||
ProjectBuilder projectBuilder, ReleaserProperties releaserProperties) {
|
||||
ProjectBuilder projectBuilder, ReleaserProperties releaserProperties,
|
||||
VersionsFetcher versionsFetcher) {
|
||||
return new PostReleaseActions(handler, pomUpdater, gradleUpdater, projectBuilder,
|
||||
releaserProperties);
|
||||
releaserProperties, versionsFetcher);
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
@@ -50,6 +50,7 @@ class ReleaserPropertiesUpdater {
|
||||
File clonedProjectFromOrg) {
|
||||
ReleaserProperties props = updatePropertiesFromFile(properties,
|
||||
clonedProjectFromOrg);
|
||||
props.setWorkingDir(clonedProjectFromOrg.getAbsolutePath());
|
||||
log.info("Updated properties [\n\n{}\n\n]", props);
|
||||
updateProperties(props);
|
||||
return props;
|
||||
|
||||
@@ -19,6 +19,8 @@ package org.springframework.cloud.release.internal.spring;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@@ -28,6 +30,7 @@ import org.springframework.cloud.release.internal.Releaser;
|
||||
import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.options.Options;
|
||||
import org.springframework.cloud.release.internal.options.OptionsBuilder;
|
||||
import org.springframework.cloud.release.internal.pom.ProcessedProject;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.Projects;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
@@ -40,6 +43,8 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
public class SpringReleaser {
|
||||
|
||||
private static final Map<File, ProjectsAndVersion> CACHE = new ConcurrentHashMap<>();
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SpringReleaser.class);
|
||||
|
||||
private final Releaser releaser;
|
||||
@@ -81,33 +86,46 @@ public class SpringReleaser {
|
||||
}
|
||||
|
||||
public void release(Options options) {
|
||||
ProjectsAndVersion projectsAndVersion = null;
|
||||
if (options.metaRelease) {
|
||||
prepareForMetaRelease(options);
|
||||
}
|
||||
if (this.properties.isPostReleaseTasksOnly()) {
|
||||
log.info("Skipping release process and moving only to post release");
|
||||
this.optionsProcessor.postReleaseOptions(options,
|
||||
postReleaseOptionsAgs(options, projectsAndVersion));
|
||||
this.optionsProcessor.postReleaseOptions(options, postReleaseOptionsAgs(
|
||||
options, null, postReleaseTaskOnlyProcessedProjects(options)));
|
||||
buildCompleted();
|
||||
return;
|
||||
}
|
||||
performReleaseAndPostRelease(options, projectsAndVersion);
|
||||
performReleaseAndPostRelease(options, null);
|
||||
buildCompleted();
|
||||
}
|
||||
|
||||
private List<ProcessedProject> postReleaseTaskOnlyProcessedProjects(Options options) {
|
||||
return metaReleaseProjects(options).stream().map(project -> {
|
||||
File clonedProjectFromOrg = this.releaser.clonedProjectFromOrg(project);
|
||||
ReleaserProperties properties = updatePropertiesIfCustomConfigPresent(
|
||||
this.properties.copy(), clonedProjectFromOrg);
|
||||
log.info("Successfully cloned the project [{}] to [{}]", project,
|
||||
clonedProjectFromOrg);
|
||||
ProjectsAndVersion projects = projects(clonedProjectFromOrg);
|
||||
return new ProcessedProject(properties, projects.versionFromBom);
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private void buildCompleted() {
|
||||
this.applicationEventPublisher.publishEvent(new BuildCompleted(this));
|
||||
}
|
||||
|
||||
private void performReleaseAndPostRelease(Options options,
|
||||
ProjectsAndVersion projectsAndVersion) {
|
||||
List<ProcessedProject> processedProjects = new ArrayList<>();
|
||||
if (options.metaRelease) {
|
||||
ReleaserProperties original = this.properties.copy();
|
||||
log.debug("The following properties were found [{}]", original);
|
||||
metaReleaseProjects(options)
|
||||
.forEach(project -> processProjectForMetaRelease(original.copy(),
|
||||
options, project));
|
||||
processedProjects = metaReleaseProjects(options).stream()
|
||||
.map(project -> processProjectForMetaRelease(original.copy(), options,
|
||||
project))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
else {
|
||||
log.info(
|
||||
@@ -116,7 +134,7 @@ public class SpringReleaser {
|
||||
projectsAndVersion = processProject(options, projectFolder, TaskType.RELEASE);
|
||||
}
|
||||
this.optionsProcessor.postReleaseOptions(options,
|
||||
postReleaseOptionsAgs(options, projectsAndVersion));
|
||||
postReleaseOptionsAgs(options, projectsAndVersion, processedProjects));
|
||||
}
|
||||
|
||||
private void prepareForMetaRelease(Options options) {
|
||||
@@ -126,15 +144,18 @@ public class SpringReleaser {
|
||||
this.properties.getMetaRelease().setEnabled(options.metaRelease);
|
||||
}
|
||||
|
||||
void processProjectForMetaRelease(ReleaserProperties copy, Options options,
|
||||
String project) {
|
||||
ProcessedProject processProjectForMetaRelease(ReleaserProperties copy,
|
||||
Options options, String project) {
|
||||
log.info("Original properties [\n\n{}\n\n]", copy);
|
||||
File clonedProjectFromOrg = this.releaser.clonedProjectFromOrg(project);
|
||||
updatePropertiesIfCustomConfigPresent(copy, clonedProjectFromOrg);
|
||||
copy = updatePropertiesIfCustomConfigPresent(copy, clonedProjectFromOrg);
|
||||
log.info("Successfully cloned the project [{}] to [{}]", project,
|
||||
clonedProjectFromOrg);
|
||||
ProjectsAndVersion projectsAndVersion;
|
||||
try {
|
||||
processProject(options, clonedProjectFromOrg, TaskType.RELEASE);
|
||||
projectsAndVersion = processProject(options, clonedProjectFromOrg,
|
||||
TaskType.RELEASE);
|
||||
return new ProcessedProject(copy, projectsAndVersion.versionFromBom);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("\n\n\nBUILD FAILED!!!\n\nException occurred for project <"
|
||||
@@ -196,7 +217,8 @@ public class SpringReleaser {
|
||||
return new File(workingDir);
|
||||
}
|
||||
|
||||
Args postReleaseOptionsAgs(Options options, ProjectsAndVersion projectsAndVersion) {
|
||||
Args postReleaseOptionsAgs(Options options, ProjectsAndVersion projectsAndVersion,
|
||||
List<ProcessedProject> processedProjects) {
|
||||
Projects projects = projectsAndVersion == null
|
||||
? projectsToUpdateForFixedVersions() : projectsAndVersion.projectVersions;
|
||||
ProjectVersion version = projects.containsProject(
|
||||
@@ -206,7 +228,7 @@ public class SpringReleaser {
|
||||
this.properties.getPom().setBranch(version.version);
|
||||
}
|
||||
return new Args(this.releaser, projects, version, this.properties,
|
||||
options.interactive, this.applicationEventPublisher);
|
||||
processedProjects, options.interactive, this.applicationEventPublisher);
|
||||
}
|
||||
|
||||
private ProjectVersion versionFromBranch() {
|
||||
@@ -216,7 +238,13 @@ public class SpringReleaser {
|
||||
}
|
||||
|
||||
private ProjectsAndVersion projects(File project) {
|
||||
ProjectVersion versionFromScRelease;
|
||||
ProjectsAndVersion projectsAndVersion = CACHE.get(project);
|
||||
if (projectsAndVersion != null) {
|
||||
log.info("Found cached version of projects and version [{}]",
|
||||
projectsAndVersion);
|
||||
return projectsAndVersion;
|
||||
}
|
||||
ProjectVersion versionFromBom;
|
||||
Projects projectsToUpdate;
|
||||
log.info("Fetch from git [{}], meta release [{}]",
|
||||
this.properties.getGit().isFetchVersionsFromGit(),
|
||||
@@ -225,25 +253,34 @@ public class SpringReleaser {
|
||||
&& !this.properties.getMetaRelease().isEnabled()) {
|
||||
printVersionRetrieval();
|
||||
projectsToUpdate = this.releaser.retrieveVersionsFromSCRelease();
|
||||
versionFromScRelease = projectsToUpdate.forFile(project);
|
||||
assertNoSnapshotsForANonSnapshotProject(projectsToUpdate,
|
||||
versionFromScRelease);
|
||||
versionFromBom = assertNoSnapshotsForANonSnapshotProject(project,
|
||||
projectsToUpdate);
|
||||
}
|
||||
else {
|
||||
ProjectVersion originalVersion = new ProjectVersion(project);
|
||||
String fixedVersionForProject = this.properties.getFixedVersions()
|
||||
.get(project.getName());
|
||||
versionFromScRelease = StringUtils.hasText(fixedVersionForProject)
|
||||
versionFromBom = StringUtils.hasText(fixedVersionForProject)
|
||||
? new ProjectVersion(originalVersion.projectName,
|
||||
fixedVersionForProject)
|
||||
: new ProjectVersion(project);
|
||||
projectsToUpdate = this.properties.getFixedVersions().entrySet().stream()
|
||||
.map(entry -> new ProjectVersion(entry.getKey(), entry.getValue()))
|
||||
.collect(Collectors.toCollection(Projects::new));
|
||||
projectsToUpdate.add(versionFromScRelease);
|
||||
projectsToUpdate.add(versionFromBom);
|
||||
printSettingVersionFromFixedVersions(projectsToUpdate);
|
||||
}
|
||||
return new ProjectsAndVersion(projectsToUpdate, versionFromScRelease);
|
||||
projectsAndVersion = new ProjectsAndVersion(projectsToUpdate, versionFromBom);
|
||||
CACHE.put(project, projectsAndVersion);
|
||||
return projectsAndVersion;
|
||||
}
|
||||
|
||||
ProjectVersion assertNoSnapshotsForANonSnapshotProject(File project,
|
||||
Projects projectsToUpdate) {
|
||||
ProjectVersion versionFromBom;
|
||||
versionFromBom = projectsToUpdate.forFile(project);
|
||||
assertNoSnapshotsForANonSnapshotProject(projectsToUpdate, versionFromBom);
|
||||
return versionFromBom;
|
||||
}
|
||||
|
||||
ProjectsAndVersion processProject(Options options, File project, TaskType taskType) {
|
||||
@@ -251,8 +288,8 @@ public class SpringReleaser {
|
||||
ProjectVersion originalVersion = new ProjectVersion(project);
|
||||
final Args defaultArgs = new Args(this.releaser, project,
|
||||
projectsAndVersion.projectVersions, originalVersion,
|
||||
projectsAndVersion.versionFromScRelease, this.properties,
|
||||
options.interactive, taskType, this.applicationEventPublisher);
|
||||
projectsAndVersion.versionFromBom, this.properties, options.interactive,
|
||||
taskType, this.applicationEventPublisher);
|
||||
log.debug("Processing project [{}] with args [{}]", project, defaultArgs);
|
||||
this.optionsProcessor.processOptions(options, defaultArgs);
|
||||
return projectsAndVersion;
|
||||
@@ -293,12 +330,11 @@ public class SpringReleaser {
|
||||
|
||||
final Projects projectVersions;
|
||||
|
||||
final ProjectVersion versionFromScRelease;
|
||||
final ProjectVersion versionFromBom;
|
||||
|
||||
ProjectsAndVersion(Projects projectVersions,
|
||||
ProjectVersion versionFromScRelease) {
|
||||
ProjectsAndVersion(Projects projectVersions, ProjectVersion versionFromBom) {
|
||||
this.projectVersions = projectVersions;
|
||||
this.versionFromScRelease = versionFromScRelease;
|
||||
this.versionFromBom = versionFromBom;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -68,8 +68,8 @@ final class Tasks {
|
||||
}, TaskType.POST_RELEASE);
|
||||
static Task UPDATE_GUIDES = task("updateGuides", "ug", "UPDATE GUIDES",
|
||||
"Updating Spring Guides", args -> {
|
||||
args.releaser.updateSpringGuides(args.versionFromScRelease,
|
||||
args.projects);
|
||||
args.releaser.updateSpringGuides(args.versionFromScRelease, args.projects,
|
||||
args.processedProjects);
|
||||
}, TaskType.POST_RELEASE);
|
||||
static Task UPDATE_SAGAN = task("updateSagan", "g", "UPDATE SAGAN",
|
||||
"Updating Sagan with release info", args -> {
|
||||
|
||||
@@ -65,7 +65,6 @@ import org.springframework.cloud.release.internal.sagan.Release;
|
||||
import org.springframework.cloud.release.internal.sagan.SaganClient;
|
||||
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
|
||||
import org.springframework.cloud.release.internal.template.TemplateGenerator;
|
||||
import org.springframework.cloud.release.internal.versions.VersionsFetcher;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
@@ -696,8 +695,7 @@ public class AcceptanceTests {
|
||||
private Releaser defaultReleaser(String expectedVersion, String projectName,
|
||||
ReleaserProperties properties) {
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
VersionsFetcher versionsFetcher = new VersionsFetcher(properties, pomUpdater);
|
||||
ProjectBuilder projectBuilder = new ProjectBuilder(properties, versionsFetcher);
|
||||
ProjectBuilder projectBuilder = new ProjectBuilder(properties);
|
||||
TestProjectGitHandler handler = new TestProjectGitHandler(properties,
|
||||
expectedVersion, projectName);
|
||||
TemplateGenerator templateGenerator = new TemplateGenerator(properties, handler);
|
||||
@@ -727,8 +725,7 @@ public class AcceptanceTests {
|
||||
|
||||
private Releaser defaultMetaReleaser(ReleaserProperties properties) {
|
||||
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
|
||||
VersionsFetcher versionsFetcher = new VersionsFetcher(properties, pomUpdater);
|
||||
ProjectBuilder projectBuilder = new ProjectBuilder(properties, versionsFetcher);
|
||||
ProjectBuilder projectBuilder = new ProjectBuilder(properties);
|
||||
NonAssertingTestProjectGitHandler handler = new NonAssertingTestProjectGitHandler(
|
||||
properties);
|
||||
TemplateGenerator templateGenerator = Mockito
|
||||
|
||||
@@ -40,6 +40,9 @@ import org.springframework.cloud.release.internal.ReleaserProperties;
|
||||
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
|
||||
import org.springframework.cloud.release.internal.options.Options;
|
||||
import org.springframework.cloud.release.internal.options.OptionsBuilder;
|
||||
import org.springframework.cloud.release.internal.pom.ProcessedProject;
|
||||
import org.springframework.cloud.release.internal.pom.ProjectVersion;
|
||||
import org.springframework.cloud.release.internal.pom.Projects;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
|
||||
@@ -147,7 +150,8 @@ public class SpringReleaserTests {
|
||||
|
||||
@Override
|
||||
Args postReleaseOptionsAgs(Options options,
|
||||
ProjectsAndVersion projectsAndVersion) {
|
||||
ProjectsAndVersion projectsAndVersion,
|
||||
List<ProcessedProject> processedProjects) {
|
||||
return new Args(TaskType.RELEASE);
|
||||
}
|
||||
|
||||
@@ -159,11 +163,26 @@ public class SpringReleaserTests {
|
||||
@Override
|
||||
ProjectsAndVersion processProject(Options options, File project,
|
||||
TaskType taskType) {
|
||||
return null;
|
||||
return new ProjectsAndVersion(sampleProjects(),
|
||||
new ProjectVersion("spring-cloud-foo", "1.0.0.BUILD-SNAPSHOT"));
|
||||
}
|
||||
|
||||
@Override
|
||||
ProjectVersion assertNoSnapshotsForANonSnapshotProject(File project,
|
||||
Projects projectsToUpdate) {
|
||||
return sampleVersion();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Projects sampleProjects() {
|
||||
return new Projects(sampleVersion());
|
||||
}
|
||||
|
||||
private ProjectVersion sampleVersion() {
|
||||
return new ProjectVersion("spring-cloud-foo", "1.0.0.RELEASE");
|
||||
}
|
||||
|
||||
private ReleaserProperties properties() {
|
||||
ReleaserProperties properties = new ReleaserProperties();
|
||||
properties.getMaven().setBuildCommand("build");
|
||||
|
||||
Reference in New Issue
Block a user