package hudson.plugins.promoted_builds;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Notifier;
import hudson.tasks.Publisher;
import org.kohsuke.stapler.DataBoundConstructor;
import java.io.IOException;
import java.io.PrintStream;
public class KeepBuildForeverAction extends Notifier {
@DataBoundConstructor
public KeepBuildForeverAction() { }
private static final Result PROMOTION_RESULT_MUST_BE_AT_LEAST = Result.UNSTABLE;
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.BUILD;
}
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
PrintStream console = listener.getLogger();
// only applicable to promotions, so should be impossible not to be one, but check anyway
if (!(build instanceof Promotion)) {
console.println(Messages.KeepBuildForEverAction_console_notPromotion());
build.setResult(Result.FAILURE);
return false;
}
final Result buildResult = build.getResult();
if (buildResult != null && buildResult.isWorseThan(PROMOTION_RESULT_MUST_BE_AT_LEAST)) {
console.println(Messages.KeepBuildForEverAction_console_promotionNotGoodEnough(build.getResult()));
return true;
}
AbstractBuild promoted = ((Promotion) build).getTarget();
console.println(Messages.KeepBuildForEverAction_console_keepingBuild());
promoted.keepLog();
return true;
}
@Extension
public static class KeepBuildForeverDescriptor extends BuildStepDescriptor<Publisher> {
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return jobType == PromotionProcess.class;
}
@Override
public String getDisplayName() {
return Messages.KeepBuildForEverAction_descriptor_displayName();
}
}
}