use of com.uber.jenkins.phabricator.tasks.ApplyPatchTask 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);
}
};
}
Aggregations