package org.jenkinsci.plugins.github.status.err; import hudson.Extension; import hudson.model.Descriptor; import hudson.model.Result; import hudson.model.Run; import hudson.model.TaskListener; import hudson.util.ListBoxModel; import org.jenkinsci.plugins.github.extension.status.StatusErrorHandler; import org.kohsuke.stapler.DataBoundConstructor; import javax.annotation.Nonnull; import static hudson.model.Result.FAILURE; import static hudson.model.Result.UNSTABLE; import static org.apache.commons.lang3.StringUtils.trimToEmpty; /** * Can change build status in case of errors * * @author lanwen (Merkushev Kirill) * @since 1.19.0 */ public class ChangingBuildStatusErrorHandler extends StatusErrorHandler { private String result; @DataBoundConstructor public ChangingBuildStatusErrorHandler(String result) { this.result = result; } public String getResult() { return result; } /** * Logs error to build console and changes build result * * @return true as of it terminating handler */ @Override public boolean handle(Exception e, @Nonnull Run<?, ?> run, @Nonnull TaskListener listener) { Result toSet = Result.fromString(trimToEmpty(result)); listener.error("[GitHub Commit Status Setter] - %s, setting build result to %s", e.getMessage(), toSet); run.setResult(toSet); return true; } @Extension public static class ChangingBuildStatusErrorHandlerDescriptor extends Descriptor<StatusErrorHandler> { private static final Result[] SUPPORTED_RESULTS = {FAILURE, UNSTABLE}; @Override public String getDisplayName() { return "Change build status"; } @SuppressWarnings("unused") public ListBoxModel doFillResultItems() { ListBoxModel items = new ListBoxModel(); for (Result supported : SUPPORTED_RESULTS) { items.add(supported.toString()); } return items; } } }