From fce0ff8e3ae04b991ce5b647b602f9db18ce1217 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 5 Jun 2017 15:49:37 +0200 Subject: [PATCH] Added a tweet template fixes #25 --- .../cloud/release/internal/Releaser.java | 9 +++++ .../internal/template/TemplateGenerator.java | 19 ++++++++--- .../template/TwitterTemplateGenerator.java | 33 +++++++++++++++++++ .../src/main/resources/templates/tweet.hbs | 1 + .../template/TemplateGeneratorTests.java | 24 ++++++++++++++ .../internal/spring/SpringReleaser.java | 3 +- .../internal/spring/AcceptanceTests.java | 14 ++++++++ 7 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TwitterTemplateGenerator.java create mode 100644 spring-cloud-release-tools-core/src/main/resources/templates/tweet.hbs 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 27020c47..aea5a685 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 @@ -107,4 +107,13 @@ public class Releaser { File blog = this.templateGenerator.blog(projects); log.info("\nSuccessfully created blog template at location [{}]", blog); } + + public void createTweet(ProjectVersion releaseVersion) { + if (releaseVersion.isSnapshot()) { + log.info("\nWon't create tweet template for a SNAPSHOT version"); + return; + } + File blog = this.templateGenerator.tweet(); + log.info("\nSuccessfully created tweet template at location [{}]", blog); + } } diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TemplateGenerator.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TemplateGenerator.java index e3b3c32e..a32ec579 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TemplateGenerator.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TemplateGenerator.java @@ -1,16 +1,16 @@ package org.springframework.cloud.release.internal.template; +import com.github.jknack.handlebars.Handlebars; +import com.github.jknack.handlebars.Template; +import com.github.jknack.handlebars.helper.StringHelpers; +import com.github.jknack.handlebars.io.ClassPathTemplateLoader; + import java.io.File; import java.io.IOException; import org.springframework.cloud.release.internal.ReleaserProperties; import org.springframework.cloud.release.internal.pom.Projects; -import com.github.jknack.handlebars.Handlebars; -import com.github.jknack.handlebars.Template; -import com.github.jknack.handlebars.helper.StringHelpers; -import com.github.jknack.handlebars.io.ClassPathTemplateLoader; - /** * @author Marcin Grzejszczak */ @@ -18,8 +18,10 @@ public class TemplateGenerator { private static final String EMAIL_TEMPLATE = "email"; private static final String BLOG_TEMPLATE = "blog"; + private static final String TWITTER_TEMPLATE = "tweet"; private final File emailOutput = new File("target/email.txt"); private final File blogOutput = new File("target/blog.md"); + private final File tweetOutput = new File("target/tweet.txt"); private final ReleaserProperties props; public TemplateGenerator(ReleaserProperties props) { @@ -54,6 +56,13 @@ public class TemplateGenerator { return new BlogTemplateGenerator(template, releaseVersion, blogOutput, projects).blog(); } + public File tweet() { + File output = file(this.tweetOutput); + String releaseVersion = parsedVersion(); + Template template = template(TWITTER_TEMPLATE); + return new TwitterTemplateGenerator(template, releaseVersion, output).tweet(); + } + private String parsedVersion() { String version = this.props.getPom().getBranch(); if (version.startsWith("v")) { diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TwitterTemplateGenerator.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TwitterTemplateGenerator.java new file mode 100644 index 00000000..909f5221 --- /dev/null +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/TwitterTemplateGenerator.java @@ -0,0 +1,33 @@ +package org.springframework.cloud.release.internal.template; + +import com.github.jknack.handlebars.Template; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +/** + * @author Marcin Grzejszczak + */ +class TwitterTemplateGenerator { + private final Template template; + private final String releaseVersion; + private final File output; + + TwitterTemplateGenerator(Template template, String releaseVersion, File output) { + this.template = template; + this.releaseVersion = releaseVersion; + this.output = output; + } + + File tweet() { + try { + String tweet = this.template.apply(this.releaseVersion); + Files.write(this.output.toPath(), tweet.getBytes()); + return this.output; + } + catch (IOException e) { + throw new IllegalStateException(e); + } + } +} diff --git a/spring-cloud-release-tools-core/src/main/resources/templates/tweet.hbs b/spring-cloud-release-tools-core/src/main/resources/templates/tweet.hbs new file mode 100644 index 00000000..3d1e1480 --- /dev/null +++ b/spring-cloud-release-tools-core/src/main/resources/templates/tweet.hbs @@ -0,0 +1 @@ +The {{ this }} version of @springcloud has been released! \ No newline at end of file diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/template/TemplateGeneratorTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/template/TemplateGeneratorTests.java index 19392ec0..ef930d99 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/template/TemplateGeneratorTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/template/TemplateGeneratorTests.java @@ -37,6 +37,26 @@ public class TemplateGeneratorTests { then(generatedMail).hasContent(expectedEmail()); } + @Test + public void should_generate_tweet_from_template_for_tag_with_v_prefix() { + ReleaserProperties props = new ReleaserProperties(); + props.getPom().setBranch("vDalston.RELEASE"); + + File generatedTweet = new TemplateGenerator(props).tweet(); + + then(generatedTweet).hasContent(expectedTweet()); + } + + @Test + public void should_generate_tweet_from_template_for_tag_without_v_prefix() { + ReleaserProperties props = new ReleaserProperties(); + props.getPom().setBranch("Dalston.RELEASE"); + + File generatedTweet = new TemplateGenerator(props).tweet(); + + then(generatedTweet).hasContent(expectedTweet()); + } + @Test public void should_generate_blog_from_template_for_tag_with_v_prefix_release() throws IOException { @@ -244,4 +264,8 @@ public class TemplateGeneratorTests { + "link to twitter\n\n" + "Cheers,\n"; } + + private String expectedTweet() { + return "The Dalston.RELEASE version of @springcloud has been released!"; + } } diff --git a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/SpringReleaser.java b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/SpringReleaser.java index 327c0453..2e43d4b2 100644 --- a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/SpringReleaser.java +++ b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/SpringReleaser.java @@ -58,10 +58,11 @@ public class SpringReleaser { "Close the milestone at Github", args -> args.releaser.closeMilestone(args.versionFromScRelease)), task("CREATING TEMPLATES", - "Create email / tweet etc. templates", + "Create email / blog / tweet etc. templates", args -> { args.releaser.createEmail(args.versionFromScRelease); args.releaser.createBlog(args.versionFromScRelease, args.projects); + args.releaser.createTweet(args.versionFromScRelease); }) ).collect(Collectors.toList()); diff --git a/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java index 6daea1ac..25e3ab44 100644 --- a/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java +++ b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java @@ -102,6 +102,9 @@ public class AcceptanceTests { then(blogTemplate()).exists(); then(blogTemplateContents()) .contains("I am pleased to announce that the Release Candidate 1 (RC1)"); + then(tweetTemplate()).exists(); + then(tweetTemplateContents()) + .contains("The Dalston.RC1 version of @springcloud has been released!"); } @Test @@ -123,6 +126,9 @@ public class AcceptanceTests { then(blogTemplate()).exists(); then(blogTemplateContents()) .contains("I am pleased to announce that the Release Candidate 1 (RC1)"); + then(tweetTemplate()).exists(); + then(tweetTemplateContents()) + .contains("The Dalston.RC1 version of @springcloud has been released!"); } private Iterable listOfCommits(File project) throws GitAPIException { @@ -172,10 +178,18 @@ public class AcceptanceTests { return new File("target/blog.md"); } + private File tweetTemplate() throws URISyntaxException { + return new File("target/tweet.txt"); + } + private String blogTemplateContents() throws URISyntaxException, IOException { return new String(Files.readAllBytes(blogTemplate().toPath())); } + private String tweetTemplateContents() throws URISyntaxException, IOException { + return new String(Files.readAllBytes(tweetTemplate().toPath())); + } + private SpringReleaser releaser(File projectFile, String branch, String expectedVersion) throws Exception { ReleaserProperties properties = releaserProperties(projectFile, branch); Releaser releaser = defaultReleaser(expectedVersion, properties);