-
Notifications
You must be signed in to change notification settings - Fork 399
Expand file tree
/
Copy pathGitHubSetCommitStatusBuilder.java
More file actions
129 lines (109 loc) · 4.58 KB
/
GitHubSetCommitStatusBuilder.java
File metadata and controls
129 lines (109 loc) · 4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.cloudbees.jenkins;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.AbstractProject;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Builder;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.plugins.github.common.ExpandableMessage;
import org.jenkinsci.plugins.github.extension.status.GitHubStatusBackrefSource;
import org.jenkinsci.plugins.github.extension.status.GitHubStatusContextSource;
import org.jenkinsci.plugins.github.extension.status.StatusErrorHandler;
import org.jenkinsci.plugins.github.extension.status.misc.ConditionalResult;
import org.jenkinsci.plugins.github.status.GitHubCommitStatusSetter;
import org.jenkinsci.plugins.github.status.err.ShallowAnyErrorHandler;
import org.jenkinsci.plugins.github.status.sources.AnyDefinedRepositorySource;
import org.jenkinsci.plugins.github.status.sources.BuildDataRevisionShaSource;
import org.jenkinsci.plugins.github.status.sources.ConditionalStatusResultSource;
import org.jenkinsci.plugins.github.status.sources.DefaultCommitContextSource;
import org.kohsuke.github.GHCommitState;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import java.io.IOException;
import java.util.Collections;
import static com.google.common.base.Objects.firstNonNull;
import static org.apache.commons.lang3.StringUtils.defaultIfEmpty;
import static org.jenkinsci.plugins.github.status.sources.misc.AnyBuildResult.onAnyResult;
@Extension
public class GitHubSetCommitStatusBuilder extends Builder implements SimpleBuildStep {
private static final ExpandableMessage DEFAULT_MESSAGE = new ExpandableMessage("");
private ExpandableMessage statusMessage = DEFAULT_MESSAGE;
private GitHubStatusContextSource contextSource = new DefaultCommitContextSource();
private GitHubStatusBackrefSource statusBackrefSource;
@DataBoundConstructor
public GitHubSetCommitStatusBuilder() {
}
/**
* @since 1.14.1
*/
public ExpandableMessage getStatusMessage() {
return statusMessage;
}
/**
* @return Context provider
* @since 1.24.0
*/
public GitHubStatusContextSource getContextSource() {
return contextSource;
}
/**
* @since 1.14.1
*/
@DataBoundSetter
public void setStatusMessage(ExpandableMessage statusMessage) {
this.statusMessage = statusMessage;
}
/**
* @since 1.24.0
*/
@DataBoundSetter
public void setContextSource(GitHubStatusContextSource contextSource) {
this.contextSource = contextSource;
}
@DataBoundSetter
public void setStatusBackrefSource(GitHubStatusBackrefSource statusBackrefSource) {
this.statusBackrefSource = statusBackrefSource;
}
@Override
public void perform(@NonNull Run<?, ?> build,
@NonNull FilePath workspace,
@NonNull Launcher launcher,
@NonNull TaskListener listener) throws InterruptedException, IOException {
GitHubCommitStatusSetter setter = new GitHubCommitStatusSetter();
setter.setReposSource(new AnyDefinedRepositorySource());
setter.setCommitShaSource(new BuildDataRevisionShaSource());
setter.setContextSource(contextSource);
setter.setErrorHandlers(Collections.<StatusErrorHandler>singletonList(new ShallowAnyErrorHandler()));
setter.setStatusBackrefSource(statusBackrefSource);
setter.setStatusResultSource(new ConditionalStatusResultSource(
Collections.<ConditionalResult>singletonList(
onAnyResult(
GHCommitState.PENDING,
defaultIfEmpty(firstNonNull(statusMessage, DEFAULT_MESSAGE).getContent(),
Messages.CommitNotifier_Pending(build.getDisplayName()))
)
)));
setter.perform(build, workspace, launcher, listener);
}
public Object readResolve() {
if (getContextSource() == null) {
setContextSource(new DefaultCommitContextSource());
}
return this;
}
@Extension
public static class Descriptor extends BuildStepDescriptor<Builder> {
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
@Override
public String getDisplayName() {
return Messages.GitHubSetCommitStatusBuilder_DisplayName();
}
}
}