use of com.uber.jenkins.phabricator.tasks.SendHarbormasterUriTask in project phabricator-jenkins-plugin by uber.
the class PhabricatorBuildWrapper method setUp.
/**
* {@inheritDoc}
*/
@Override
public Environment setUp(AbstractBuild build, Launcher launcher, BuildListener listener) throws IOException, InterruptedException {
EnvVars environment = build.getEnvironment(listener);
Logger logger = new Logger(listener.getLogger());
if (environment == null) {
return this.ignoreBuild(logger, "No environment variables found?!");
}
final Map<String, String> envAdditions = new HashMap<String, String>();
String phid = environment.get(PhabricatorPlugin.PHID_FIELD);
String diffID = environment.get(PhabricatorPlugin.DIFFERENTIAL_ID_FIELD);
if (CommonUtils.isBlank(diffID)) {
this.addShortText(build);
this.ignoreBuild(logger, "No differential ID found.");
return new Environment() {
};
}
FilePath arcWorkPath;
if (this.workDir != null && this.workDir.length() > 0) {
arcWorkPath = build.getWorkspace().child(workDir);
} else {
arcWorkPath = build.getWorkspace();
}
LauncherFactory starter = new LauncherFactory(launcher, environment, listener.getLogger(), arcWorkPath);
ConduitAPIClient conduitClient;
try {
conduitClient = getConduitClient(build.getParent(), logger);
} catch (ConduitAPIException e) {
e.printStackTrace(logger.getStream());
logger.warn(CONDUIT_TAG, e.getMessage());
return null;
}
DifferentialClient diffClient = new DifferentialClient(diffID, conduitClient);
if (!CommonUtils.isBlank(phid)) {
logger.info("harbormaster", "Sending Harbormaster BUILD_URL via PHID: " + phid);
String buildUrl = environment.get("BUILD_URL");
Task.Result sendUriResult = new SendHarbormasterUriTask(logger, diffClient, phid, buildUrl).run();
if (sendUriResult != Task.Result.SUCCESS) {
logger.info("harbormaster", "Unable to send BUILD_URL to Harbormaster");
}
}
Differential diff;
try {
diff = new Differential(diffClient.fetchDiff());
diff.setCommitMessage(diffClient.getCommitMessage(diff.getRevisionID(false)));
diff.decorate(build, this.getPhabricatorURL(build.getParent()));
logger.info(CONDUIT_TAG, "Fetching differential from Conduit API");
envAdditions.put(DIFFERENTIAL_AUTHOR, diff.getAuthorEmail());
envAdditions.put(DIFFERENTIAL_BASE_COMMIT, diff.getBaseCommit());
envAdditions.put(DIFFERENTIAL_BRANCH, diff.getBranch());
envAdditions.put(DIFFERENTIAL_SUMMARY, diff.getCommitMessage());
} catch (ConduitAPIException e) {
e.printStackTrace(logger.getStream());
logger.warn(CONDUIT_TAG, "Unable to fetch differential from Conduit API");
logger.warn(CONDUIT_TAG, e.getMessage());
return null;
}
String baseCommit = "origin/master";
if (!applyToMaster) {
baseCommit = diff.getBaseCommit();
}
final String conduitToken = this.getConduitToken(build.getParent(), logger);
Task.Result result = new ApplyPatchTask(logger, starter, baseCommit, diffID, conduitToken, getArcPath(), DEFAULT_GIT_PATH, createCommit, skipForcedClean, createBranch, patchWithForceFlag, scmType).run();
if (result != Task.Result.SUCCESS) {
logger.warn("arcanist", "Error applying arc patch; got non-zero exit code " + result);
Task.Result failureResult = new SendHarbormasterResultTask(logger, diffClient, phid, false, null, null, null).run();
if (failureResult != Task.Result.SUCCESS) {
// such failure, very broke
logger.warn("arcanist", "Unable to notify harbormaster of patch failure");
}
// Indicate failure
return null;
}
return new Environment() {
@Override
public void buildEnvVars(Map<String, String> env) {
EnvVars envVars = new EnvVars(env);
envVars.putAll(envAdditions);
env.putAll(envVars);
}
};
}
use of com.uber.jenkins.phabricator.tasks.SendHarbormasterUriTask in project phabricator-jenkins-plugin by uber.
the class BuildResultProcessor method processHarbormaster.
/**
* Send Harbormaster result to Phabricator
*
* @return whether we were able to successfully send the result
*/
public boolean processHarbormaster() {
final boolean harbormasterSuccess = getBuildResult().isBetterOrEqualTo(Result.SUCCESS);
if (runHarbormaster) {
logger.info("harbormaster", "Sending Harbormaster BUILD_URL via PHID: " + phid);
Task.Result sendUriResult = new SendHarbormasterUriTask(logger, diffClient, phid, buildUrl).run();
if (sendUriResult != Task.Result.SUCCESS) {
logger.info(LOGGING_TAG, "Unable to send BUILD_URL to Harbormaster. " + "This can be safely ignored, and is usually because it's already set.");
}
if (unitResults != null) {
logger.info(LOGGING_TAG, String.format("Publishing unit results to Harbormaster for %d tests.", unitResults.getResults().size()));
}
if (harbormasterCoverage != null) {
logger.info(LOGGING_TAG, String.format("Publishing coverage data to Harbormaster for %d files.", harbormasterCoverage.size()));
}
if (lintResults != null) {
logger.info(LOGGING_TAG, String.format("Publishing lint results for %d violations", lintResults.getResults().size()));
}
logger.info(LOGGING_TAG, String.format("Sending build result to Harbormaster with PHID %s, success: %s", phid, harbormasterSuccess));
Task.Result result = new SendHarbormasterResultTask(logger, diffClient, phid, harbormasterSuccess, unitResults, harbormasterCoverage, lintResults).run();
if (result != Task.Result.SUCCESS) {
return false;
}
} else {
logger.info("uberalls", "Harbormaster integration not enabled for this build.");
if (getBuildResult().isBetterOrEqualTo(Result.SUCCESS)) {
commentAction = "resign";
} else if (getBuildResult().isWorseOrEqualTo(Result.UNSTABLE)) {
commentAction = "reject";
}
}
return true;
}
Aggregations