From 83fd005ee3084742fa9392eb05d965676526e14b Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Thu, 22 Mar 2018 22:54:21 +0100 Subject: [PATCH 1/6] [SHIPKIT-513] Initial solution using Travis ENV --- .../internal/gradle/release/TravisPlugin.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java index 5c06b309..18c728fa 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java @@ -5,10 +5,12 @@ import org.gradle.api.Project; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; +import org.shipkit.gradle.configuration.ShipkitConfiguration; import org.shipkit.gradle.git.IdentifyGitBranchTask; import org.shipkit.gradle.release.ReleaseNeededTask; import org.shipkit.internal.gradle.configuration.BasicValidator; import org.shipkit.internal.gradle.configuration.LazyConfiguration; +import org.shipkit.internal.gradle.configuration.ShipkitConfigurationPlugin; import org.shipkit.internal.gradle.git.GitBranchPlugin; import org.shipkit.internal.gradle.git.GitSetupPlugin; import org.shipkit.internal.gradle.git.tasks.GitCheckOutTask; @@ -42,7 +44,7 @@ public void apply(final Project project) { final String branch = System.getenv("TRAVIS_BRANCH"); LOG.info("Branch from 'TRAVIS_BRANCH' env variable: {}", branch); - + ShipkitConfiguration conf = project.getPlugins().apply(ShipkitConfigurationPlugin.class).getConfiguration(); //configure branch based on Travis' env variable IdentifyGitBranchTask identifyBranch = (IdentifyGitBranchTask) project.getTasks().getByName(GitBranchPlugin.IDENTIFY_GIT_BRANCH); if (!StringUtil.isEmpty(branch)) { @@ -52,15 +54,11 @@ public void apply(final Project project) { //set the branch to be checked out on ci build final GitCheckOutTask checkout = (GitCheckOutTask) project.getTasks().getByName(GitSetupPlugin.CHECKOUT_TASK); checkout.setRev(branch); - LazyConfiguration.lazyConfiguration(checkout, new Runnable() { - public void run() { - BasicValidator.notNull(checkout.getRev(), - "Task " + checkout.getPath() + " does not know the target revision to check out.\n" + - "In Travis CI builds, it is automatically configured from 'TRAVIS_BRANCH' environment variable.\n" + - "If you are trying to run this task outside Travis, you can export the environment variable.\n" + - "Alternatively, you can set the task's 'rev' property explicitly."); - } - }); + LazyConfiguration.lazyConfiguration(checkout, () -> BasicValidator.notNull(checkout.getRev(), + "Task " + checkout.getPath() + " does not know the target revision to check out.\n" + + "In Travis CI builds, it is automatically configured from 'TRAVIS_BRANCH' environment variable.\n" + + "If you are trying to run this task outside Travis, you can export the environment variable.\n" + + "Alternatively, you can set the task's 'rev' property explicitly.")); //update release needed task based on Travis' env variables String pr = System.getenv("TRAVIS_PULL_REQUEST"); @@ -68,11 +66,15 @@ public void run() { final boolean isPullRequest = pr != null && !pr.trim().isEmpty() && !pr.equals("false"); LOG.info("Pull request build: {}", isPullRequest); - project.getTasks().withType(ReleaseNeededTask.class, new Action() { - public void execute(ReleaseNeededTask t) { - t.setCommitMessage(System.getenv("TRAVIS_COMMIT_MESSAGE")); - t.setPullRequest(isPullRequest); - } + String travisJobUrl = generateTravisBuildUrl(conf); + String commitMessage = System.getenv("TRAVIS_COMMIT_MESSAGE") + ". CI job: " + travisJobUrl; + project.getTasks().withType(ReleaseNeededTask.class, t -> { + t.setCommitMessage(commitMessage); + t.setPullRequest(isPullRequest); }); } + + private String generateTravisBuildUrl(ShipkitConfiguration conf) { + return "https://travis-ci.org/" + conf.getGitHub().getRepository()+ "/builds/" + System.getenv("TRAVIS_BUILD_NUMBER"); + } } From ca359de1cf54dfff40afd853584ae95f2da63a14 Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Mon, 26 Mar 2018 23:07:00 +0200 Subject: [PATCH 2/6] [SHIPKIT-513] Exposing Travis URL to external class --- .../internal/gradle/release/TravisPlugin.java | 15 ++++----- .../internal/gradle/travis/TravisUtils.java | 22 +++++++++++++ .../gradle/travis/TravisUtilsTest.groovy | 33 +++++++++++++++++++ 3 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java create mode 100644 subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java index 18c728fa..925be9ac 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java @@ -1,6 +1,5 @@ package org.shipkit.internal.gradle.release; -import org.gradle.api.Action; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.logging.Logger; @@ -16,6 +15,8 @@ import org.shipkit.internal.gradle.git.tasks.GitCheckOutTask; import org.shipkit.internal.gradle.util.StringUtil; +import static org.shipkit.internal.gradle.travis.TravisUtils.generateCommitMessage; + /** * Configures the release automation to be used with Travis CI. * Intended for root project. @@ -43,6 +44,10 @@ public void apply(final Project project) { project.getPlugins().apply(CiReleasePlugin.class); final String branch = System.getenv("TRAVIS_BRANCH"); + final String travisCommitMessage = System.getenv("TRAVIS_COMMIT_MESSAGE"); + final String travisBuildNumber = System.getenv("TRAVIS_BUILD_NUMBER"); + final String pr = System.getenv("TRAVIS_PULL_REQUEST"); + LOG.info("Branch from 'TRAVIS_BRANCH' env variable: {}", branch); ShipkitConfiguration conf = project.getPlugins().apply(ShipkitConfigurationPlugin.class).getConfiguration(); //configure branch based on Travis' env variable @@ -61,20 +66,14 @@ public void apply(final Project project) { "Alternatively, you can set the task's 'rev' property explicitly.")); //update release needed task based on Travis' env variables - String pr = System.getenv("TRAVIS_PULL_REQUEST"); LOG.info("Pull request from 'TRAVIS_PULL_REQUEST' env variable: {}", pr); final boolean isPullRequest = pr != null && !pr.trim().isEmpty() && !pr.equals("false"); LOG.info("Pull request build: {}", isPullRequest); - String travisJobUrl = generateTravisBuildUrl(conf); - String commitMessage = System.getenv("TRAVIS_COMMIT_MESSAGE") + ". CI job: " + travisJobUrl; project.getTasks().withType(ReleaseNeededTask.class, t -> { - t.setCommitMessage(commitMessage); + t.setCommitMessage(generateCommitMessage(conf, travisCommitMessage, travisBuildNumber)); t.setPullRequest(isPullRequest); }); } - private String generateTravisBuildUrl(ShipkitConfiguration conf) { - return "https://travis-ci.org/" + conf.getGitHub().getRepository()+ "/builds/" + System.getenv("TRAVIS_BUILD_NUMBER"); - } } diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java new file mode 100644 index 00000000..2ecbe0e5 --- /dev/null +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java @@ -0,0 +1,22 @@ +package org.shipkit.internal.gradle.travis; + +import org.shipkit.gradle.configuration.ShipkitConfiguration; + +public class TravisUtils { + + private static final String URL_PATTERN = "https://travis-ci.org/%s/builds/%s"; + + public static String generateCommitMessage(ShipkitConfiguration conf, String travisCommitMessage, String travisBuildNumber) { + String travisJobUrl = generateTravisBuildUrl(conf, travisBuildNumber); + + if (travisCommitMessage.contains("[ci skip]")) { + return travisCommitMessage.replace(" [ci skip]", ". CI job: " + travisJobUrl + " [ci skip]"); + } else { + return travisCommitMessage + ". CI job: " + travisJobUrl; + } + } + + private static String generateTravisBuildUrl(ShipkitConfiguration conf, String travisBuildNumber) { + return String.format(URL_PATTERN, conf.getGitHub().getRepository(), travisBuildNumber); + } +} diff --git a/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy b/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy new file mode 100644 index 00000000..86af39c1 --- /dev/null +++ b/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy @@ -0,0 +1,33 @@ +package org.shipkit.internal.gradle.travis + +import org.shipkit.gradle.configuration.ShipkitConfiguration +import spock.lang.Specification + +class TravisUtilsTest extends Specification { + + def "should build travis url with [ci skip]"() { + given: + ShipkitConfiguration shipkitConfiguration = Mock(ShipkitConfiguration) + ShipkitConfiguration.GitHub gitHub = Mock(ShipkitConfiguration.GitHub) + shipkitConfiguration.getGitHub() >> gitHub + 1 * gitHub.getRepository() >> "mockito/shipkit" + 0 * _ + when: + def url = TravisUtils.generateCommitMessage(shipkitConfiguration, "original [ci skip]", "123") + then: + url == "original. CI job: https://travis-ci.org/mockito/shipkit/builds/123 [ci skip]" + } + + def "should build travis url without [ci skip]"() { + given: + ShipkitConfiguration shipkitConfiguration = Mock(ShipkitConfiguration) + ShipkitConfiguration.GitHub gitHub = Mock(ShipkitConfiguration.GitHub) + shipkitConfiguration.getGitHub() >> gitHub + 1 * gitHub.getRepository() >> "mockito/shipkit" + 0 * _ + when: + def url = TravisUtils.generateCommitMessage(shipkitConfiguration, "original", "123") + then: + url == "original. CI job: https://travis-ci.org/mockito/shipkit/builds/123" + } +} From 7cc4e74254a94f62460def438dbd3a9932cf5ab4 Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Mon, 26 Mar 2018 23:16:44 +0200 Subject: [PATCH 3/6] [SHIPKIT-513] Quick exit if commit message is null --- .../groovy/org/shipkit/internal/gradle/travis/TravisUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java index 2ecbe0e5..9e64c57e 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java @@ -7,6 +7,9 @@ public class TravisUtils { private static final String URL_PATTERN = "https://travis-ci.org/%s/builds/%s"; public static String generateCommitMessage(ShipkitConfiguration conf, String travisCommitMessage, String travisBuildNumber) { + if (travisCommitMessage == null) { + return null; + } String travisJobUrl = generateTravisBuildUrl(conf, travisBuildNumber); if (travisCommitMessage.contains("[ci skip]")) { From bbbd06b94c6ae4347bead75812d5ba44ba0e8ed3 Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Thu, 29 Mar 2018 21:55:50 +0200 Subject: [PATCH 4/6] [SHIPKIT-513] Setting new message --- .../shipkit/internal/gradle/release/TravisPlugin.java | 6 ++++++ .../shipkit/internal/gradle/travis/TravisUtils.java | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java index 925be9ac..8b3e51bf 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/release/TravisPlugin.java @@ -5,6 +5,7 @@ import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; import org.shipkit.gradle.configuration.ShipkitConfiguration; +import org.shipkit.gradle.git.GitCommitTask; import org.shipkit.gradle.git.IdentifyGitBranchTask; import org.shipkit.gradle.release.ReleaseNeededTask; import org.shipkit.internal.gradle.configuration.BasicValidator; @@ -16,6 +17,7 @@ import org.shipkit.internal.gradle.util.StringUtil; import static org.shipkit.internal.gradle.travis.TravisUtils.generateCommitMessage; +import static org.shipkit.internal.gradle.travis.TravisUtils.generateCommitMessagePostfix; /** * Configures the release automation to be used with Travis CI. @@ -74,6 +76,10 @@ public void apply(final Project project) { t.setCommitMessage(generateCommitMessage(conf, travisCommitMessage, travisBuildNumber)); t.setPullRequest(isPullRequest); }); + + project.getTasks().withType(GitCommitTask.class, t -> { + t.setCommitMessagePostfix(generateCommitMessagePostfix(conf, travisCommitMessage, travisBuildNumber)); + }); } } diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java index 9e64c57e..863edc08 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java @@ -19,6 +19,16 @@ public static String generateCommitMessage(ShipkitConfiguration conf, String tra } } + public static String generateCommitMessagePostfix(ShipkitConfiguration conf, String travisCommitMessage, String travisBuildNumber) { + if (travisCommitMessage == null) { + return null; + } + String travisJobUrl = generateTravisBuildUrl(conf, travisBuildNumber); + + return "CI job: " + travisJobUrl + " [ci skip]"; + + } + private static String generateTravisBuildUrl(ShipkitConfiguration conf, String travisBuildNumber) { return String.format(URL_PATTERN, conf.getGitHub().getRepository(), travisBuildNumber); } From 0abad2043f76467cd9c3554d87f32e1eac065607 Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Thu, 29 Mar 2018 22:23:08 +0200 Subject: [PATCH 5/6] [SHIPKIT-513] Generate Prefix in GitPlugin --- .../internal/gradle/git/GitPlugin.java | 6 ++++- .../internal/gradle/travis/TravisUtils.java | 22 ++++--------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/git/GitPlugin.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/git/GitPlugin.java index 37bcd691..78aa8fe5 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/git/GitPlugin.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/git/GitPlugin.java @@ -16,7 +16,9 @@ import java.io.File; import java.util.List; +import static java.lang.System.getenv; import static org.shipkit.internal.gradle.exec.ExecCommandFactory.execCommand; +import static org.shipkit.internal.gradle.travis.TravisUtils.generateCommitMessagePostfix; import static org.shipkit.internal.gradle.util.GitUtil.getTag; /** @@ -56,12 +58,14 @@ public class GitPlugin implements Plugin { public void apply(final Project project) { final ShipkitConfiguration conf = project.getPlugins().apply(ShipkitConfigurationPlugin.class).getConfiguration(); + String commitMessage = generateCommitMessagePostfix(conf, getenv("TRAVIS_BUILD_NUMBER")); + TaskMaker.task(project, GIT_COMMIT_TASK, GitCommitTask.class, new Action() { public void execute(final GitCommitTask t) { t.setDescription("Commits all changed files using generic --author and aggregated commit message"); t.setGitUserName(conf.getGit().getUser()); t.setGitUserEmail(conf.getGit().getEmail()); - t.setCommitMessagePostfix(conf.getGit().getCommitMessagePostfix()); + t.setCommitMessagePostfix(commitMessage); } }); diff --git a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java index 863edc08..864b6def 100644 --- a/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java +++ b/subprojects/shipkit/src/main/groovy/org/shipkit/internal/gradle/travis/TravisUtils.java @@ -6,27 +6,13 @@ public class TravisUtils { private static final String URL_PATTERN = "https://travis-ci.org/%s/builds/%s"; - public static String generateCommitMessage(ShipkitConfiguration conf, String travisCommitMessage, String travisBuildNumber) { - if (travisCommitMessage == null) { - return null; + public static String generateCommitMessagePostfix(ShipkitConfiguration conf, String travisBuildNumber) { + if (travisBuildNumber == null) { + return conf.getGit().getCommitMessagePostfix(); } String travisJobUrl = generateTravisBuildUrl(conf, travisBuildNumber); - if (travisCommitMessage.contains("[ci skip]")) { - return travisCommitMessage.replace(" [ci skip]", ". CI job: " + travisJobUrl + " [ci skip]"); - } else { - return travisCommitMessage + ". CI job: " + travisJobUrl; - } - } - - public static String generateCommitMessagePostfix(ShipkitConfiguration conf, String travisCommitMessage, String travisBuildNumber) { - if (travisCommitMessage == null) { - return null; - } - String travisJobUrl = generateTravisBuildUrl(conf, travisBuildNumber); - - return "CI job: " + travisJobUrl + " [ci skip]"; - + return String.format("CI job: %s %s", travisJobUrl, conf.getGit().getCommitMessagePostfix()); } private static String generateTravisBuildUrl(ShipkitConfiguration conf, String travisBuildNumber) { From 23619f560a304ea055595c6df08c218a231cb484 Mon Sep 17 00:00:00 2001 From: arturskowronski Date: Thu, 29 Mar 2018 23:28:02 +0200 Subject: [PATCH 6/6] [SHIPKIT-513] Restoring Travis Plugin --- .../gradle/travis/TravisUtilsTest.groovy | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy b/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy index 86af39c1..71a5a9d2 100644 --- a/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy +++ b/subprojects/shipkit/src/test/groovy/org/shipkit/internal/gradle/travis/TravisUtilsTest.groovy @@ -9,25 +9,30 @@ class TravisUtilsTest extends Specification { given: ShipkitConfiguration shipkitConfiguration = Mock(ShipkitConfiguration) ShipkitConfiguration.GitHub gitHub = Mock(ShipkitConfiguration.GitHub) + ShipkitConfiguration.Git git = Mock(ShipkitConfiguration.Git) shipkitConfiguration.getGitHub() >> gitHub + shipkitConfiguration.getGit() >> git + 1 * git.commitMessagePostfix >> "[ci skip]" 1 * gitHub.getRepository() >> "mockito/shipkit" 0 * _ when: - def url = TravisUtils.generateCommitMessage(shipkitConfiguration, "original [ci skip]", "123") + def url = TravisUtils.generateCommitMessagePostfix(shipkitConfiguration, "123") then: - url == "original. CI job: https://travis-ci.org/mockito/shipkit/builds/123 [ci skip]" + url == "CI job: https://travis-ci.org/mockito/shipkit/builds/123 [ci skip]" } - def "should build travis url without [ci skip]"() { + def "should build postfix without travis url if blank build number"() { given: ShipkitConfiguration shipkitConfiguration = Mock(ShipkitConfiguration) ShipkitConfiguration.GitHub gitHub = Mock(ShipkitConfiguration.GitHub) + ShipkitConfiguration.Git git = Mock(ShipkitConfiguration.Git) shipkitConfiguration.getGitHub() >> gitHub - 1 * gitHub.getRepository() >> "mockito/shipkit" + shipkitConfiguration.getGit() >> git + 1 * git.commitMessagePostfix >> "[ci skip]" 0 * _ when: - def url = TravisUtils.generateCommitMessage(shipkitConfiguration, "original", "123") + def url = TravisUtils.generateCommitMessagePostfix(shipkitConfiguration, "") then: - url == "original. CI job: https://travis-ci.org/mockito/shipkit/builds/123" + url == "[ci skip]" } }