Search in sources :

Example 1 with ApplyPatchTask

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);
        }
    };
}
Also used : FilePath(hudson.FilePath) SendHarbormasterUriTask(com.uber.jenkins.phabricator.tasks.SendHarbormasterUriTask) ApplyPatchTask(com.uber.jenkins.phabricator.tasks.ApplyPatchTask) SendHarbormasterResultTask(com.uber.jenkins.phabricator.tasks.SendHarbormasterResultTask) Task(com.uber.jenkins.phabricator.tasks.Task) SendHarbormasterResultTask(com.uber.jenkins.phabricator.tasks.SendHarbormasterResultTask) Differential(com.uber.jenkins.phabricator.conduit.Differential) HashMap(java.util.HashMap) ConduitAPIException(com.uber.jenkins.phabricator.conduit.ConduitAPIException) DifferentialClient(com.uber.jenkins.phabricator.conduit.DifferentialClient) ConduitAPIClient(com.uber.jenkins.phabricator.conduit.ConduitAPIClient) Logger(com.uber.jenkins.phabricator.utils.Logger) SendHarbormasterUriTask(com.uber.jenkins.phabricator.tasks.SendHarbormasterUriTask) EnvVars(hudson.EnvVars) ApplyPatchTask(com.uber.jenkins.phabricator.tasks.ApplyPatchTask) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

ConduitAPIClient (com.uber.jenkins.phabricator.conduit.ConduitAPIClient)1 ConduitAPIException (com.uber.jenkins.phabricator.conduit.ConduitAPIException)1 Differential (com.uber.jenkins.phabricator.conduit.Differential)1 DifferentialClient (com.uber.jenkins.phabricator.conduit.DifferentialClient)1 ApplyPatchTask (com.uber.jenkins.phabricator.tasks.ApplyPatchTask)1 SendHarbormasterResultTask (com.uber.jenkins.phabricator.tasks.SendHarbormasterResultTask)1 SendHarbormasterUriTask (com.uber.jenkins.phabricator.tasks.SendHarbormasterUriTask)1 Task (com.uber.jenkins.phabricator.tasks.Task)1 Logger (com.uber.jenkins.phabricator.utils.Logger)1 EnvVars (hudson.EnvVars)1 FilePath (hudson.FilePath)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1