Added updating of release notes

with this change a template with links to closed milestones will be created

fixes #10
This commit is contained in:
Marcin Grzejszczak
2017-09-06 13:13:19 +02:00
parent f9ca023ca4
commit d16d3dee49
19 changed files with 560 additions and 206 deletions

View File

@@ -21,7 +21,7 @@ import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.gradle.GradleUpdater;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
import org.springframework.cloud.release.internal.project.ProjectBuilder;
import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -32,8 +32,9 @@ class ReleaserConfiguration {
@Bean SpringReleaser releaser(ReleaserProperties properties) {
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
ProjectGitHandler handler = new ProjectGitHandler(properties);
return new SpringReleaser(new Releaser(pomUpdater, new ProjectBuilder(properties, pomUpdater),
new ProjectGitUpdater(properties), new TemplateGenerator(properties),
handler, new TemplateGenerator(properties, handler),
new GradleUpdater(properties)), properties);
}
}

View File

@@ -63,6 +63,7 @@ public class SpringReleaser {
args.releaser.createEmail(args.versionFromScRelease);
args.releaser.createBlog(args.versionFromScRelease, args.projects);
args.releaser.createTweet(args.versionFromScRelease);
args.releaser.createReleaseNotes(args.versionFromScRelease, args.projects);
})
).collect(Collectors.toList());

View File

@@ -17,7 +17,7 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.Releaser;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.git.GitTestUtils;
import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
import org.springframework.cloud.release.internal.git.ProjectGitHandler;
import org.springframework.cloud.release.internal.gradle.GradleUpdater;
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.cloud.release.internal.pom.ProjectVersion;
@@ -38,7 +38,7 @@ public class AcceptanceTests {
TestPomReader testPomReader = new TestPomReader();
File springCloudConsulProject;
File temporaryFolder;
TestProjectGitUpdater gitUpdater;
TestProjectGitHandler gitHandler;
@Before
public void setup() throws Exception {
@@ -80,7 +80,7 @@ public class AcceptanceTests {
commitIsPresent(iterator, "Update SNAPSHOT to 1.1.2.RELEASE");
pomVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
pomParentVersionIsEqualTo(project, "1.2.1.BUILD-SNAPSHOT");
then(this.gitUpdater.executed).isTrue();
then(this.gitHandler.closedMilestones).isTrue();
then(emailTemplate()).exists();
then(emailTemplateContents())
.contains("Spring Cloud Camden.SR5 available")
@@ -88,6 +88,11 @@ public class AcceptanceTests {
then(blogTemplate()).exists();
then(blogTemplateContents())
.contains("I am pleased to announce that the Service Release 5 (SR5)");
then(releaseNotesTemplate()).exists();
then(releaseNotesTemplateContents())
.contains("Camden.SR5")
.contains("- Spring Cloud Config `1.2.2.RELEASE` ([issues](http://foo.bar.com/1.2.2.RELEASE))")
.contains("- Spring Cloud Aws `1.1.3.RELEASE` ([issues](http://foo.bar.com/1.1.3.RELEASE))");
}
@Test
@@ -109,7 +114,7 @@ public class AcceptanceTests {
commitIsPresent(iterator, "Update SNAPSHOT to 1.2.0.RC1");
pomVersionIsEqualTo(project, "1.2.0.BUILD-SNAPSHOT");
pomParentVersionIsEqualTo(project, "1.2.0.BUILD-SNAPSHOT");
then(this.gitUpdater.executed).isTrue();
then(this.gitHandler.closedMilestones).isTrue();
then(emailTemplate()).exists();
then(emailTemplateContents())
.contains("Spring Cloud Dalston.RC1 available")
@@ -120,6 +125,11 @@ public class AcceptanceTests {
then(tweetTemplate()).exists();
then(tweetTemplateContents())
.contains("The Dalston.RC1 version of @springcloud has been released!");
then(releaseNotesTemplate()).exists();
then(releaseNotesTemplateContents())
.contains("Dalston.RC1")
.contains("- Spring Cloud Build `1.3.1.RELEASE` ([issues](http://foo.bar.com/1.3.1.RELEASE))")
.contains("- Spring Cloud Bus `1.3.0.M1` ([issues](http://foo.bar.com/1.3.0.M1))");
}
@Test
@@ -133,7 +143,7 @@ public class AcceptanceTests {
releaser.release();
then(this.gitUpdater.executed).isFalse();
then(this.gitHandler.closedMilestones).isFalse();
then(emailTemplate()).exists();
then(emailTemplateContents())
.contains("Spring Cloud Dalston.RC1 available")
@@ -144,6 +154,11 @@ public class AcceptanceTests {
then(tweetTemplate()).exists();
then(tweetTemplateContents())
.contains("The Dalston.RC1 version of @springcloud has been released!");
then(releaseNotesTemplate()).exists();
then(releaseNotesTemplateContents())
.contains("Dalston.RC1")
.contains("- Spring Cloud Build `1.3.1.RELEASE` ([issues](http://foo.bar.com/1.3.1.RELEASE))")
.contains("- Spring Cloud Bus `1.3.0.M1` ([issues](http://foo.bar.com/1.3.0.M1)");
}
private Iterable<RevCommit> listOfCommits(File project) throws GitAPIException {
@@ -197,6 +212,10 @@ public class AcceptanceTests {
return new File("target/tweet.txt");
}
private File releaseNotesTemplate() throws URISyntaxException {
return new File("target/notes.md");
}
private String blogTemplateContents() throws URISyntaxException, IOException {
return new String(Files.readAllBytes(blogTemplate().toPath()));
}
@@ -205,6 +224,10 @@ public class AcceptanceTests {
return new String(Files.readAllBytes(tweetTemplate().toPath()));
}
private String releaseNotesTemplateContents() throws URISyntaxException, IOException {
return new String(Files.readAllBytes(releaseNotesTemplate().toPath()));
}
private SpringReleaser releaser(File projectFile, String branch, String expectedVersion) throws Exception {
ReleaserProperties properties = releaserProperties(projectFile, branch);
return releaserWithFullDeployment(expectedVersion, properties);
@@ -238,13 +261,13 @@ public class AcceptanceTests {
private Releaser defaultReleaser(String expectedVersion, ReleaserProperties properties) throws Exception {
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
ProjectBuilder projectBuilder = new ProjectBuilder(properties, pomUpdater);
TestProjectGitUpdater gitUpdater = new TestProjectGitUpdater(properties,
TestProjectGitHandler handler = new TestProjectGitHandler(properties,
expectedVersion);
TemplateGenerator templateGenerator = new TemplateGenerator(properties);
TemplateGenerator templateGenerator = new TemplateGenerator(properties, handler);
GradleUpdater gradleUpdater = new GradleUpdater(properties);
Releaser releaser = new Releaser(pomUpdater, projectBuilder, gitUpdater,
Releaser releaser = new Releaser(pomUpdater, projectBuilder, handler,
templateGenerator, gradleUpdater);
this.gitUpdater = gitUpdater;
this.gitHandler = handler;
return releaser;
}
@@ -265,12 +288,12 @@ public class AcceptanceTests {
return releaserProperties;
}
class TestProjectGitUpdater extends ProjectGitUpdater {
class TestProjectGitHandler extends ProjectGitHandler {
boolean executed = false;
boolean closedMilestones = false;
final String expectedVersion;
public TestProjectGitUpdater(ReleaserProperties properties,
public TestProjectGitHandler(ReleaserProperties properties,
String expectedVersion) {
super(properties);
this.expectedVersion = expectedVersion;
@@ -279,7 +302,11 @@ public class AcceptanceTests {
@Override public void closeMilestone(ProjectVersion releaseVersion) {
then(releaseVersion.projectName).isEqualTo("spring-cloud-consul");
then(releaseVersion.version).isEqualTo(this.expectedVersion);
this.executed = true;
this.closedMilestones = true;
}
@Override public String milestoneUrl(ProjectVersion releaseVersion) {
return "http://foo.bar.com/" + releaseVersion.toString();
}
}