diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-agent/pom.xml b/Teamcity-Phabricator-Plugin/phabricator-plugin-agent/pom.xml index 9707c2e..a87aecb 100644 --- a/Teamcity-Phabricator-Plugin/phabricator-plugin-agent/pom.xml +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-agent/pom.xml @@ -39,8 +39,8 @@ org.apache.maven.plugins maven-compiler-plugin - 1.6 - 1.6 + 1.8 + 1.8 diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/pom.xml b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/pom.xml index e384158..5b1ac97 100644 --- a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/pom.xml +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/pom.xml @@ -24,8 +24,8 @@ org.apache.maven.plugins maven-compiler-plugin - 1.6 - 1.6 + 1.8 + 1.8 diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/CommonUtils.java b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/CommonUtils.java new file mode 100644 index 0000000..3e331a6 --- /dev/null +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/CommonUtils.java @@ -0,0 +1,12 @@ +package uk.xlab.teamcity.phabricator; + +public final class CommonUtils { + + public static Boolean isNullOrEmpty(String str) { + return str == null || str.equals(""); + } + + public static Boolean isNull(Object obj) { + return obj == null; + } +} diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/Constants.java b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/Constants.java index 98b41fa..aab23e8 100644 --- a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/Constants.java +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/Constants.java @@ -1,8 +1,18 @@ package uk.xlab.teamcity.phabricator; public class Constants { - public static final String BUILD_FEATURE_TYPE = "phabricator-build-feature"; + public static final String PLUGIN_NAME = "phabricator"; public static final String PLUGIN_DISPLAY_NAME = "Phabricator Plugin"; + + // Build Feature + public static final String BUILD_FEATURE_TYPE = "phabricator-build-feature"; public static final String PHABRICATOR_URL_SETTING = "phabricator_url_setting"; + + // Build Config + public static final String BRANCH_NAME = "env.PHAB_BRANCH_NAME"; + public static final String BUILD_ID = "env.PHAB_BUILD_ID"; + public static final String DIFF_ID = "env.PHAB_DIFF_ID"; + public static final String HARBORMASTER_PHID = "env.PHAB_HARBORMASTER_TARGET_PHID"; + public static final String REVISION_ID = "env.PHAB_REVISION_ID"; } diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/PhabricatorPluginConfig.java b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/PhabricatorPluginConfig.java index 76fbdf8..be8750b 100644 --- a/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/PhabricatorPluginConfig.java +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-common/src/main/java/uk/xlab/teamcity/phabricator/PhabricatorPluginConfig.java @@ -1,6 +1,9 @@ package uk.xlab.teamcity.phabricator; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Map; +import static uk.xlab.teamcity.phabricator.CommonUtils.*; /** * Holds all the parameters set on the build applied by the harbormaster trigger @@ -15,6 +18,16 @@ public class PhabricatorPluginConfig { private IPhabricatorPluginLogger logger; private Map params; + // Build Feature Variables + private URL phabricatorUrl; + + // Harbormaster Variables + private String branchName; + private String buildId; + private String diffId; + private String harbormasterPHID; + private String revisionId; + /** * Set the appropriate logger depending if the class is called from the SERVER * or AGENT @@ -35,9 +48,62 @@ public class PhabricatorPluginConfig { logger.info(String.format("Looking for parameters")); for (String param : params.keySet()) { - if (param != null) { + if (!isNullOrEmpty(param)) { logger.info(String.format("Found %s", param)); + + switch (param) { + case Constants.PHABRICATOR_URL_SETTING: + logger.info( + String.format("Found Phabrictor URL: %s", params.get(Constants.PHABRICATOR_URL_SETTING))); + try { + phabricatorUrl = parsePhabricatorURL(params.get(Constants.PHABRICATOR_URL_SETTING)); + } catch (MalformedURLException e) { + logger.warn(String.format("Failed to parse phabricator URL: %s", + params.get(Constants.PHABRICATOR_URL_SETTING)), e); + } + case Constants.BRANCH_NAME: + logger.info(String.format("Found branch name: %s", params.get(Constants.BRANCH_NAME))); + branchName = params.get(Constants.BRANCH_NAME); + case Constants.BUILD_ID: + logger.info(String.format("Found build id: %s", params.get(Constants.BUILD_ID))); + buildId = params.get(Constants.BUILD_ID); + case Constants.DIFF_ID: + logger.info(String.format("Found diff ID: %s", params.get(Constants.DIFF_ID))); + diffId = params.get(Constants.DIFF_ID); + case Constants.HARBORMASTER_PHID: + logger.info(String.format("Found harbormaster target PHID: %s", + params.get(Constants.HARBORMASTER_PHID))); + harbormasterPHID = params.get(Constants.HARBORMASTER_PHID); + case Constants.REVISION_ID: + logger.info(String.format("Found revision ID: %s", params.get(Constants.REVISION_ID))); + revisionId = params.get(Constants.REVISION_ID); + } } } } + + public boolean isPluginSetup() { + if (!isNull(phabricatorUrl) && !isNullOrEmpty(branchName) && !isNullOrEmpty(buildId) && !isNullOrEmpty(diffId) + && !isNullOrEmpty(harbormasterPHID) && !isNullOrEmpty(revisionId)) { + return true; + } + + return false; + } + + private URL parsePhabricatorURL(String input) throws MalformedURLException { + URL inputURL = new URL(input); + String scheme = inputURL.getProtocol(); + if (scheme == null) + scheme = "http"; + int port = inputURL.getPort(); + if (port == -1) { + if (scheme == "https") + port = 443; + else + port = 80; + } + return inputURL; + } + } diff --git a/Teamcity-Phabricator-Plugin/phabricator-plugin-server/src/main/java/uk/xlab/teamcity/phabricator/BuildTracker.java b/Teamcity-Phabricator-Plugin/phabricator-plugin-server/src/main/java/uk/xlab/teamcity/phabricator/BuildTracker.java index 2700f6c..d7e297b 100644 --- a/Teamcity-Phabricator-Plugin/phabricator-plugin-server/src/main/java/uk/xlab/teamcity/phabricator/BuildTracker.java +++ b/Teamcity-Phabricator-Plugin/phabricator-plugin-server/src/main/java/uk/xlab/teamcity/phabricator/BuildTracker.java @@ -49,6 +49,14 @@ public class BuildTracker implements Runnable { // Setup plugin specific configuration // TODO: implement AppConfig as PluginConfig phabricatorConfig.setParameters(params); + + // Now we have set all the parameters we need to check if + // everything is present and correct for us to continue + if (!phabricatorConfig.isPluginSetup()) + { + logger.info("Plugin incorrectly configured"); + return; + } while (!build.isFinished()) { // Wait until the build finishes