package hudson.plugins.emailext.plugins.trigger;
import hudson.Extension;
import hudson.model.AbstractBuild;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.emailext.ExtendedEmailPublisher;
import hudson.plugins.emailext.plugins.EmailTrigger;
import hudson.plugins.emailext.plugins.EmailTriggerDescriptor;
import hudson.plugins.emailext.plugins.RecipientProvider;
import hudson.plugins.emailext.plugins.recipients.DevelopersRecipientProvider;
import hudson.plugins.emailext.plugins.recipients.ListRecipientProvider;
import hudson.tasks.junit.CaseResult;
import hudson.tasks.test.AbstractTestResultAction;
import org.kohsuke.stapler.DataBoundConstructor;
import java.util.List;
public class RegressionTrigger extends EmailTrigger {
public static final String TRIGGER_NAME = "Test Regression";
@DataBoundConstructor
public RegressionTrigger(List<RecipientProvider> recipientProviders, String recipientList, String replyTo, String subject, String body, String attachmentsPattern, int attachBuildLog, String contentType) {
super(recipientProviders, recipientList, replyTo, subject, body, attachmentsPattern, attachBuildLog, contentType);
}
@Deprecated
public RegressionTrigger(boolean sendToList, boolean sendToDevs, boolean sendToRequester, boolean sendToCulprits, String recipientList, String replyTo, String subject, String body, String attachmentsPattern, int attachBuildLog, String contentType) {
super(sendToList, sendToDevs, sendToRequester, sendToCulprits,recipientList, replyTo, subject, body, attachmentsPattern, attachBuildLog, contentType);
}
@Override
public boolean trigger(AbstractBuild<?, ?> build, TaskListener listener) {
Run<?,?> previousBuild = ExtendedEmailPublisher.getPreviousRun(build, listener);
if (previousBuild == null)
return build.getResult() == Result.FAILURE;
if (build.getAction(AbstractTestResultAction.class) == null)
return false;
// if previous run didn't have test results and this one does (with failures)
if (previousBuild.getAction(AbstractTestResultAction.class) == null)
return build.getAction(AbstractTestResultAction.class).getFailCount() > 0;
// if more tests failed during this run
if(build.getAction(AbstractTestResultAction.class).getFailCount() >
previousBuild.getAction(AbstractTestResultAction.class).getFailCount())
return true;
// if any test failed this time, but not last time
for (Object result : build.getAction(AbstractTestResultAction.class).getFailedTests()){
CaseResult res = (CaseResult)result;
if (res.getAge() == 1)
return true;
}
return false;
}
@Extension
public static final class DescriptorImpl extends EmailTriggerDescriptor {
public DescriptorImpl() {
addTriggerNameToReplace(UnstableTrigger.TRIGGER_NAME);
addTriggerNameToReplace(StillUnstableTrigger.TRIGGER_NAME);
addDefaultRecipientProvider(new DevelopersRecipientProvider());
addDefaultRecipientProvider(new ListRecipientProvider());
}
@Override
public String getDisplayName() {
return TRIGGER_NAME;
}
@Override
public EmailTrigger createDefault() {
return _createDefault();
}
}
}