package hudson.plugins.tfs;
import hudson.Extension;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.AbstractProject;
import hudson.model.Descriptor;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.tfs.util.TeamStatus;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Builder;
import hudson.tasks.Notifier;
import hudson.tasks.Publisher;
import jenkins.tasks.SimpleBuildStep;
import org.kohsuke.stapler.DataBoundConstructor;
import javax.annotation.Nonnull;
import java.io.IOException;
/**
* A _Post-Build Action_ that reports the completion status of an associated build to TFS/Team Services.
*/
public class TeamCompletedStatusPostBuildAction extends Notifier implements SimpleBuildStep {
@DataBoundConstructor
public TeamCompletedStatusPostBuildAction() {
}
@Override
public void perform(
@Nonnull final Run<?, ?> run,
@Nonnull final FilePath workspace,
@Nonnull final Launcher launcher,
@Nonnull final TaskListener listener
) throws InterruptedException, IOException {
if (!TeamGlobalStatusAction.isApplicable(run)){
perform(run, listener);
}
}
public void perform(final @Nonnull Run<?, ?> run, final @Nonnull TaskListener listener) {
try {
TeamStatus.createFromRun(run, listener, getDisplayName());
}
catch (final IllegalArgumentException e) {
listener.error(e.getMessage());
}
catch (final Exception e) {
e.printStackTrace(listener.error("Error while trying to update completion status in TFS/Team Services"));
}
}
String getDisplayName() {
final Descriptor<Builder> descriptor = getDescriptor();
return descriptor.getDisplayName();
}
@Override
public BuildStepMonitor getRequiredMonitorService() {
// we don't need the outcome of any previous builds for this step
return BuildStepMonitor.NONE;
}
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
@Override
public boolean isApplicable(final Class<? extends AbstractProject> jobType) {
return true;
}
@Override
public String getDisplayName() {
return "Set build completion status in TFS/Team Services";
}
}
}