Skip to content

Commit 5a44bd8

Browse files
author
Kelly Johnson
committed
Feature option to report success on build that are not triggered.
Refactored out a create commit status function. Added option to report success if not pertinent.
1 parent c15d510 commit 5a44bd8

File tree

13 files changed

+183
-123
lines changed

13 files changed

+183
-123
lines changed

src/main/java/org/jenkinsci/plugins/ghprb/Ghprb.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,10 @@ public List<Pattern> getExcludedRegionPatterns() {
326326
return patterns;
327327
}
328328

329+
public boolean getReportSuccessIfNotRegion() {
330+
return trigger.getReportSuccessIfNotRegion();
331+
}
332+
329333
public static String replaceMacros(Run<?, ?> build, TaskListener listener, String inputString) {
330334
String returnString = inputString;
331335
if (build != null && inputString != null) {

src/main/java/org/jenkinsci/plugins/ghprb/GhprbBuilds.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.apache.commons.lang.StringUtils;
1212
import org.jenkinsci.plugins.ghprb.extensions.GhprbBuildStep;
1313
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommentAppender;
14-
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatus;
14+
import org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus;
1515
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatusException;
1616
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtension;
1717
import org.kohsuke.github.GHCommitState;
@@ -76,10 +76,10 @@ public void build(GhprbPullRequest pr, GHUser triggerSender, String commentBody)
7676
repo.getName(),
7777
trigger.getGitHubApiAuth().getCredentialsId());
7878

79-
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbCommitStatus.class)) {
80-
if (ext instanceof GhprbCommitStatus) {
79+
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbSimpleStatus.class)) {
80+
if (ext instanceof GhprbSimpleStatus) {
8181
try {
82-
((GhprbCommitStatus) ext).onBuildTriggered(
82+
((GhprbSimpleStatus) ext).onBuildTriggered(
8383
trigger.getActualProject(),
8484
pr.getHead(),
8585
pr.isMergeable(),
@@ -138,10 +138,10 @@ public void onStarted(Run<?, ?> build, TaskListener listener) {
138138
e.printStackTrace(logger);
139139
}
140140

141-
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbCommitStatus.class)) {
142-
if (ext instanceof GhprbCommitStatus) {
141+
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbSimpleStatus.class)) {
142+
if (ext instanceof GhprbSimpleStatus) {
143143
try {
144-
((GhprbCommitStatus) ext).onBuildStart(build, listener, repo.getGitHubRepo());
144+
((GhprbSimpleStatus) ext).onBuildStart(build, listener, repo.getGitHubRepo());
145145
} catch (GhprbCommitStatusException e) {
146146
repo.commentOnFailure(build, listener, e);
147147
}
@@ -199,10 +199,10 @@ public void onCompleted(Run<?, ?> build, TaskListener listener) {
199199
}
200200
}
201201

202-
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbCommitStatus.class)) {
203-
if (ext instanceof GhprbCommitStatus) {
202+
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbSimpleStatus.class)) {
203+
if (ext instanceof GhprbSimpleStatus) {
204204
try {
205-
((GhprbCommitStatus) ext).onBuildComplete(build, listener, repo.getGitHubRepo());
205+
((GhprbSimpleStatus) ext).onBuildComplete(build, listener, repo.getGitHubRepo());
206206
} catch (GhprbCommitStatusException e) {
207207
repo.commentOnFailure(build, listener, e);
208208
}
@@ -260,10 +260,10 @@ public void onEnvironmentSetup(@SuppressWarnings("rawtypes") Run build, Launcher
260260

261261
LOGGER.log(Level.FINE, "Job: " + build.getFullDisplayName() + " Attempting to send GitHub commit status");
262262

263-
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbCommitStatus.class)) {
264-
if (ext instanceof GhprbCommitStatus) {
263+
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbSimpleStatus.class)) {
264+
if (ext instanceof GhprbSimpleStatus) {
265265
try {
266-
((GhprbCommitStatus) ext).onEnvironmentSetup(build, listener, repo.getGitHubRepo());
266+
((GhprbSimpleStatus) ext).onEnvironmentSetup(build, listener, repo.getGitHubRepo());
267267
} catch (GhprbCommitStatusException e) {
268268
repo.commentOnFailure(build, listener, e);
269269
}

src/main/java/org/jenkinsci/plugins/ghprb/GhprbPullRequest.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package org.jenkinsci.plugins.ghprb;
22

33
import com.google.common.base.Joiner;
4+
import hudson.model.Job;
45
import hudson.model.Run;
56
import org.apache.commons.lang.StringUtils;
7+
import org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus;
8+
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatusException;
9+
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtension;
610
import org.kohsuke.github.GHCommitPointer;
11+
import org.kohsuke.github.GHCommitState;
712
import org.kohsuke.github.GHIssue;
813
import org.kohsuke.github.GHIssueComment;
914
import org.kohsuke.github.GHLabel;
1015
import org.kohsuke.github.GHPullRequest;
1116
import org.kohsuke.github.GHPullRequestCommitDetail;
1217
import org.kohsuke.github.GHPullRequestFileDetail;
18+
import org.kohsuke.github.GHRepository;
1319
import org.kohsuke.github.GHUser;
1420
import org.kohsuke.github.GitUser;
1521

@@ -511,7 +517,7 @@ boolean containsWatchedPaths(GHPullRequest pr) {
511517
}
512518
}
513519

514-
private void tryBuild() {
520+
void tryBuild() {
515521
synchronized (this) {
516522
if (helper.isProjectDisabled()) {
517523
LOGGER.log(Level.FINEST, "Project is disabled, not trying to build");
@@ -530,7 +536,7 @@ private void tryBuild() {
530536
}
531537

532538
if (shouldRun && !containsWatchedPaths(pr)) {
533-
LOGGER.log(Level.FINEST, "Pull request contains no watched paths, skipping the build");
539+
skipBuildForWatchedPaths();
534540
shouldRun = false;
535541
}
536542

@@ -690,6 +696,31 @@ public boolean checkMergeable() {
690696
return mergeable;
691697
}
692698

699+
void skipBuildForWatchedPaths() {
700+
if (helper.getReportSuccessIfNotRegion()) {
701+
LOGGER.log(Level.FINEST, "Pull request contains no watched paths, skipping the build and reporting success.");
702+
createCommitStatus(GHCommitState.SUCCESS, "Skipped, no pertinent files changed.");
703+
} else {
704+
LOGGER.log(Level.FINEST,
705+
"Pull request contains no watched paths, skipping the build");
706+
}
707+
}
708+
709+
public void createCommitStatus(GHCommitState state, String message) {
710+
GHRepository ghRepository = repo.getGitHubRepo();
711+
GhprbTrigger trigger = helper.getTrigger();
712+
Job<?, ?> actualProject = trigger.getActualProject();
713+
for (GhprbExtension ext : Ghprb.getJobExtensions(trigger, GhprbSimpleStatus.class)) {
714+
if (ext instanceof GhprbSimpleStatus) {
715+
try {
716+
((GhprbSimpleStatus) ext).createCommitStatus(actualProject, id, head, state, ghRepository, message);
717+
} catch (GhprbCommitStatusException e) {
718+
repo.commentOnFailure(null, null, e);
719+
}
720+
}
721+
}
722+
}
723+
693724
@Override
694725
public boolean equals(Object obj) {
695726
if (!(obj instanceof GhprbPullRequest)) {

src/main/java/org/jenkinsci/plugins/ghprb/GhprbTrigger.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import net.sf.json.JSONObject;
2929
import org.apache.commons.lang.StringUtils;
3030
import org.jenkinsci.plugins.ghprb.extensions.GhprbBuildStep;
31-
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatus;
3231
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtension;
3332
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtensionDescriptor;
3433
import org.jenkinsci.plugins.ghprb.extensions.GhprbGlobalDefault;
@@ -135,6 +134,8 @@ public class GhprbTrigger extends GhprbTriggerBackwardsCompatible {
135134

136135
private String excludedRegions;
137136

137+
private Boolean reportSuccessIfNotRegion;
138+
138139

139140
private transient Ghprb helper;
140141

@@ -161,7 +162,7 @@ private void setExtensions(List<GhprbExtension> extensions) {
161162

162163
// Filter out items that we only want one of, like the status updater.
163164
this.extensions = Ghprb.onlyOneEntry(rawList,
164-
GhprbCommitStatus.class
165+
GhprbSimpleStatus.class
165166
);
166167

167168
// Make sure we have at least one of the types we need one of.
@@ -198,7 +199,8 @@ public GhprbTrigger(String adminlist,
198199
String whiteListLabels,
199200
List<GhprbExtension> extensions,
200201
String includedRegions,
201-
String excludedRegions
202+
String excludedRegions,
203+
Boolean reportSuccessIfNotRegion
202204
) throws ANTLRException {
203205
super(cron);
204206
this.adminlist = adminlist;
@@ -222,6 +224,7 @@ public GhprbTrigger(String adminlist,
222224
this.whiteListLabels = whiteListLabels;
223225
this.includedRegions = includedRegions;
224226
this.excludedRegions = excludedRegions;
227+
this.reportSuccessIfNotRegion = reportSuccessIfNotRegion;
225228
setExtensions(extensions);
226229
configVersion = LATEST_VERSION;
227230
}
@@ -661,6 +664,13 @@ public String getExcludedRegions() {
661664
return excludedRegions;
662665
}
663666

667+
public Boolean getReportSuccessIfNotRegion() {
668+
if (reportSuccessIfNotRegion == null) {
669+
return false;
670+
}
671+
return reportSuccessIfNotRegion;
672+
}
673+
664674
@Override
665675
public DescriptorImpl getDescriptor() {
666676
return DESCRIPTOR;
@@ -920,8 +930,7 @@ public boolean configure(StaplerRequest req, JSONObject formData) throws FormExc
920930

921931
try {
922932
extensions.rebuildHetero(req, formData, getGlobalExtensionDescriptors(), "extensions");
923-
// Now make sure we have at least one of the types we need one of.
924-
Ghprb.addIfMissing(this.extensions, new GhprbSimpleStatus(), GhprbCommitStatus.class);
933+
Ghprb.addIfMissing(this.extensions, new GhprbSimpleStatus(), GhprbSimpleStatus.class);
925934
} catch (IOException e) {
926935
e.printStackTrace();
927936
}

src/main/java/org/jenkinsci/plugins/ghprb/extensions/GhprbCommitStatus.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/main/java/org/jenkinsci/plugins/ghprb/extensions/status/GhprbNoCommitStatus.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/main/java/org/jenkinsci/plugins/ghprb/extensions/status/GhprbSimpleStatus.java

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.jenkinsci.plugins.ghprb.Ghprb;
1212
import org.jenkinsci.plugins.ghprb.GhprbCause;
1313
import org.jenkinsci.plugins.ghprb.GhprbTrigger;
14-
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatus;
1514
import org.jenkinsci.plugins.ghprb.extensions.GhprbCommitStatusException;
1615
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtension;
1716
import org.jenkinsci.plugins.ghprb.extensions.GhprbExtensionDescriptor;
@@ -32,7 +31,7 @@
3231
import java.util.Map;
3332

3433
public class GhprbSimpleStatus extends GhprbExtension implements
35-
GhprbCommitStatus, GhprbGlobalExtension, GhprbProjectExtension, GhprbGlobalDefault {
34+
GhprbGlobalExtension, GhprbProjectExtension, GhprbGlobalDefault {
3635

3736
@Extension
3837
public static final DescriptorImpl /*GhprbSimpleStatusDescriptor*/ DESCRIPTOR = new DescriptorImpl();
@@ -108,7 +107,6 @@ public boolean addIfMissing() {
108107
return true;
109108
}
110109

111-
@Override
112110
public void onBuildTriggered(Job<?, ?> project,
113111
String commitSha,
114112
boolean isMergeable,
@@ -123,14 +121,6 @@ public void onBuildTriggered(Job<?, ?> project,
123121
return;
124122
}
125123

126-
String statusUrl = getDescriptor().getStatusUrlDefault(this);
127-
if (commitStatusContext == "") {
128-
commitStatusContext = getDescriptor().getCommitStatusContextDefault(this);
129-
}
130-
131-
String context = Util.fixEmpty(commitStatusContext);
132-
context = Ghprb.replaceMacros(project, context);
133-
134124
if (!StringUtils.isEmpty(triggeredStatus)) {
135125
sb.append(Ghprb.replaceMacros(project, triggeredStatus));
136126
} else {
@@ -142,28 +132,17 @@ public void onBuildTriggered(Job<?, ?> project,
142132
}
143133
}
144134

145-
String url = Ghprb.replaceMacros(project, statusUrl);
146-
if (StringUtils.equals(statusUrl, "--none--")) {
147-
url = "";
148-
}
149-
150135
String message = sb.toString();
151-
try {
152-
ghRepository.createCommitStatus(commitSha, state, url, message, context);
153-
} catch (IOException e) {
154-
throw new GhprbCommitStatusException(e, state, message, prId);
155-
}
136+
createCommitStatus(project, prId, commitSha, state, ghRepository, message);
156137
}
157138

158-
@Override
159139
public void onEnvironmentSetup(Run<?, ?> build,
160140
TaskListener listener,
161141
GHRepository repo) throws GhprbCommitStatusException {
162142
// no need to create a commit here -- the onBuildStart() event will fire
163143
// soon and will respect's the user's settings for startedStatus.
164144
}
165145

166-
@Override
167146
public void onBuildStart(Run<?, ?> build,
168147
TaskListener listener,
169148
GHRepository repo) throws GhprbCommitStatusException {
@@ -286,6 +265,33 @@ private void createCommitStatus(Run<?, ?> build,
286265
}
287266
}
288267

268+
public void createCommitStatus(Job<?, ?> project,
269+
int prId,
270+
String commitSha,
271+
GHCommitState state,
272+
GHRepository ghRepository,
273+
String message) throws GhprbCommitStatusException {
274+
String statusUrl = getDescriptor().getStatusUrlDefault(this);
275+
if (commitStatusContext == "") {
276+
commitStatusContext = getDescriptor().getCommitStatusContextDefault(this);
277+
}
278+
279+
String context = Util.fixEmpty(commitStatusContext);
280+
context = Ghprb.replaceMacros(project, context);
281+
282+
String url = Ghprb.replaceMacros(project, statusUrl);
283+
// "--none--" means the user does not want a message, "Jenkins" is the default when we don't have a URL.
284+
if (StringUtils.equals(statusUrl, "--none--") || StringUtils.equals(statusUrl, "Jenkins")) {
285+
url = "";
286+
}
287+
288+
try {
289+
ghRepository.createCommitStatus(commitSha, state, url, message, context);
290+
} catch (IOException e) {
291+
throw new GhprbCommitStatusException(e, state, message, prId);
292+
}
293+
}
294+
289295
@Override
290296
public DescriptorImpl /*GhprbSimpleStatusDescriptor*/ getDescriptor() {
291297
return DESCRIPTOR;

0 commit comments

Comments
 (0)