From c30d987bfc901d5c773bf1bc9de222826cb2f173 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 23 Oct 2018 22:11:34 +0200 Subject: [PATCH] Fixed blog post parsing and not failing the build on templates --- .../cloud/release/internal/Releaser.java | 8 +++---- .../template/BlogTemplateGenerator.java | 8 +++---- .../template/EmailTemplateGenerator.java | 6 ++--- .../internal/template/TemplateGenerator.java | 24 +++++++++---------- .../template/TwitterTemplateGenerator.java | 15 ++++++++---- .../cloud/release/internal/ReleaserTests.java | 20 +++++++++------- .../template/TemplateGeneratorTests.java | 10 ++++---- .../cloud/release/internal/spring/Tasks.java | 4 ++-- 8 files changed, 52 insertions(+), 43 deletions(-) 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 a69ad66d..2cb12b37 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 @@ -131,14 +131,14 @@ public class Releaser { log.info("\nSuccessfully closed milestone"); } - public void createEmail(ProjectVersion releaseVersion) { + public void createEmail(ProjectVersion releaseVersion, Projects projects) { 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; } - File email = this.templateGenerator.email(); + File email = this.templateGenerator.email(projects); if (email != null) { log.info("\nSuccessfully created email template at location [{}]", email); } else { @@ -169,12 +169,12 @@ public class Releaser { log.info("\nSuccessfully updated Spring Guides issues"); } - public void createTweet(ProjectVersion releaseVersion) { + public void createTweet(ProjectVersion releaseVersion, Projects projects) { if (releaseVersion.isSnapshot()) { log.info("\nWon't create tweet template for a SNAPSHOT version"); return; } - File tweet = this.templateGenerator.tweet(); + File tweet = this.templateGenerator.tweet(projects); if (tweet != null) { log.info("\nSuccessfully created tweet template at location [{}]", tweet); } else { diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/BlogTemplateGenerator.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/BlogTemplateGenerator.java index ac202da4..1a1057b3 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/BlogTemplateGenerator.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/BlogTemplateGenerator.java @@ -1,7 +1,6 @@ package org.springframework.cloud.release.internal.template; import java.io.File; -import java.io.IOException; import java.nio.file.Files; import java.util.Arrays; import java.util.Map; @@ -10,13 +9,14 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import com.github.jknack.handlebars.Template; -import com.google.common.collect.ImmutableMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.release.internal.pom.Projects; import org.springframework.util.StringUtils; +import com.github.jknack.handlebars.Template; +import com.google.common.collect.ImmutableMap; + /** * @author Marcin Grzejszczak */ @@ -66,7 +66,7 @@ class BlogTemplateGenerator { Files.write(this.blogOutput.toPath(), blog.getBytes()); return this.blogOutput; } - catch (IOException e) { + catch (Exception e) { log.warn("Exception occurred while trying to create a blog entry", e); return null; } diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/EmailTemplateGenerator.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/EmailTemplateGenerator.java index ef15b899..87188fe8 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/EmailTemplateGenerator.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/template/EmailTemplateGenerator.java @@ -1,13 +1,13 @@ package org.springframework.cloud.release.internal.template; import java.io.File; -import java.io.IOException; import java.nio.file.Files; -import com.github.jknack.handlebars.Template; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.jknack.handlebars.Template; + /** * @author Marcin Grzejszczak */ @@ -31,7 +31,7 @@ class EmailTemplateGenerator { Files.write(this.emailOutput.toPath(), email.getBytes()); return this.emailOutput; } - catch (IOException e) { + catch (Exception e) { log.warn("Exception occurred while trying to generate an email template", e); return null; } 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 29c8e6ea..ac3e4ea3 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,10 +1,5 @@ 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; @@ -14,6 +9,8 @@ import org.springframework.cloud.release.internal.git.ProjectGitHandler; import org.springframework.cloud.release.internal.pom.Projects; import org.springframework.cloud.release.internal.tech.HandlebarsHelper; +import com.github.jknack.handlebars.Template; + /** * @author Marcin Grzejszczak */ @@ -48,9 +45,9 @@ public class TemplateGenerator implements ReleaserPropertiesAware { this.handler = handler; } - public File email() { + public File email(Projects projects) { File emailOutput = file(this.emailOutput); - String releaseVersion = parsedVersion(); + String releaseVersion = parsedVersion(projects); Template template = template(EMAIL_TEMPLATE); return new EmailTemplateGenerator(template, releaseVersion, emailOutput).email(); } @@ -73,27 +70,30 @@ public class TemplateGenerator implements ReleaserPropertiesAware { public File blog(Projects projects) { File blogOutput = file(this.blogOutput); - String releaseVersion = parsedVersion(); + String releaseVersion = parsedVersion(projects); Template template = template(BLOG_TEMPLATE); return new BlogTemplateGenerator(template, releaseVersion, blogOutput, projects).blog(); } - public File tweet() { + public File tweet(Projects projects) { File output = file(this.tweetOutput); - String releaseVersion = parsedVersion(); + String releaseVersion = parsedVersion(projects); Template template = template(TWITTER_TEMPLATE); return new TwitterTemplateGenerator(template, releaseVersion, output).tweet(); } public File releaseNotes(Projects projects) { File output = file(this.releaseNotesOutput); - String releaseVersion = parsedVersion(); + String releaseVersion = parsedVersion(projects); Template template = template(RELEASE_NOTES_TEMPLATE); return new ReleaseNotesTemplateGenerator(template, releaseVersion, output, projects, this.handler).releseNotes(); } - private String parsedVersion() { + private String parsedVersion(Projects projects) { + if (this.props.getMetaRelease().isEnabled()) { + return projects.forName(this.props.getMetaRelease().getReleaseTrainProjectName()).version; + } String version = this.props.getPom().getBranch(); if (version.startsWith("v")) { return version.substring(1); 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 index 909f5221..993de65b 100644 --- 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 @@ -1,15 +1,19 @@ 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; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.jknack.handlebars.Template; + /** * @author Marcin Grzejszczak */ class TwitterTemplateGenerator { + private static final Logger log = LoggerFactory.getLogger(TwitterTemplateGenerator.class); + private final Template template; private final String releaseVersion; private final File output; @@ -26,8 +30,9 @@ class TwitterTemplateGenerator { Files.write(this.output.toPath(), tweet.getBytes()); return this.output; } - catch (IOException e) { - throw new IllegalStateException(e); + catch (Exception e) { + log.warn("Exception occurred while trying to generate a twitter template", e); + return null; } } } diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/ReleaserTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/ReleaserTests.java index f4bb2566..b086d65b 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/ReleaserTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/ReleaserTests.java @@ -1,9 +1,5 @@ package org.springframework.cloud.release.internal; -import static org.mockito.BDDMockito.then; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.never; - import java.io.File; import java.net.URI; import java.net.URISyntaxException; @@ -28,6 +24,10 @@ import org.springframework.cloud.release.internal.project.ProjectBuilder; import org.springframework.cloud.release.internal.sagan.SaganUpdater; import org.springframework.cloud.release.internal.template.TemplateGenerator; +import static org.mockito.BDDMockito.then; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.never; + /** * @author Marcin Grzejszczak */ @@ -106,16 +106,16 @@ public class ReleaserTests { @Test public void should_not_generate_email_for_snapshot_version() throws Exception { - releaser().createEmail(new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT")); + releaser().createEmail(new ProjectVersion("original", "1.0.0.BUILD-SNAPSHOT"), projects()); - then(this.templateGenerator).should(never()).email(); + then(this.templateGenerator).should(never()).email(any(Projects.class)); } @Test public void should_generate_email_for_release_version() throws Exception { - releaser().createEmail(new ProjectVersion("original", "1.0.0.RELEASE")); + releaser().createEmail(new ProjectVersion("original", "1.0.0.RELEASE"), projects()); - then(this.templateGenerator).should().email(); + then(this.templateGenerator).should().email(any(Projects.class)); } @Test @@ -135,4 +135,8 @@ public class ReleaserTests { then(this.projectGitHandler).should(never()).revertChangesIfApplicable(any(File.class), any(ProjectVersion.class)); } + Projects projects() { + return new Projects(new ProjectVersion("foo", "1.0.0.RELEASE")); + } + } \ 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 843c04bb..a38cdc7b 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 @@ -25,7 +25,7 @@ public class TemplateGeneratorTests { public void should_generate_email_from_template_for_tag_with_v_prefix() { this.props.getPom().setBranch("vDalston.RELEASE"); - File generatedMail = new TemplateGenerator(this.props, this.handler).email(); + File generatedMail = new TemplateGenerator(this.props, this.handler).email(new Projects()); then(generatedMail).hasContent(expectedEmail()); } @@ -35,7 +35,7 @@ public class TemplateGeneratorTests { this.props.getPom().setBranch("vDalston.RELEASE"); File generatedMail = new TemplateGenerator(this.props, new File("target/foo/bar/baz/template.txt"), - handler).email(); + handler).email(new Projects()); then(generatedMail).hasContent(expectedEmail()); } @@ -44,7 +44,7 @@ public class TemplateGeneratorTests { public void should_generate_email_from_template_for_tag_without_v_prefix() { this.props.getPom().setBranch("Dalston.RELEASE"); - File generatedMail = new TemplateGenerator(this.props, this.handler).email(); + File generatedMail = new TemplateGenerator(this.props, this.handler).email(new Projects()); then(generatedMail).hasContent(expectedEmail()); } @@ -53,7 +53,7 @@ public class TemplateGeneratorTests { public void should_generate_tweet_from_template_for_tag_with_v_prefix() { this.props.getPom().setBranch("vDalston.RELEASE"); - File generatedTweet = new TemplateGenerator(this.props, this.handler).tweet(); + File generatedTweet = new TemplateGenerator(this.props, this.handler).tweet(new Projects()); then(generatedTweet).hasContent(expectedTweet()); } @@ -62,7 +62,7 @@ public class TemplateGeneratorTests { public void should_generate_tweet_from_template_for_tag_without_v_prefix() { this.props.getPom().setBranch("Dalston.RELEASE"); - File generatedTweet = new TemplateGenerator(this.props, this.handler).tweet(); + File generatedTweet = new TemplateGenerator(this.props, this.handler).tweet(new Projects()); then(generatedTweet).hasContent(expectedTweet()); } diff --git a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Tasks.java b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Tasks.java index e32cb48c..048ef44d 100644 --- a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Tasks.java +++ b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/Tasks.java @@ -48,9 +48,9 @@ class Tasks { "CREATING TEMPLATES", "Create email / blog / tweet etc. templates", args -> { - args.releaser.createEmail(args.versionFromScRelease); + args.releaser.createEmail(args.versionFromScRelease, args.projects); args.releaser.createBlog(args.versionFromScRelease, args.projects); - args.releaser.createTweet(args.versionFromScRelease); + args.releaser.createTweet(args.versionFromScRelease, args.projects); args.releaser.createReleaseNotes(args.versionFromScRelease, args.projects); },TaskType.POST_RELEASE); static Task UPDATE_GUIDES = task("updateGuides", "ug",