Skip to content

Commit 953506c

Browse files
author
Antonio Mansilla
committed
Add functionality for override latest build
1 parent a54108b commit 953506c

File tree

3 files changed

+34
-16
lines changed

3 files changed

+34
-16
lines changed

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusHelper.java

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,13 @@ public static List<BitbucketBuildStatusResource> createBuildStatusResources(fina
133133
Job<?, ?> project = build.getParent();
134134
List<BitbucketBuildStatusResource> buildStatusResources = new ArrayList<BitbucketBuildStatusResource>();
135135

136-
if(project instanceof WorkflowJob) {
136+
if (project instanceof WorkflowJob) {
137137
Collection<? extends SCM> scms = ((WorkflowJob)project).getSCMs();
138138

139139
for (SCM scm : scms) {
140140
buildStatusResources.addAll(createBuildStatusResources(scm, build));
141141
}
142-
}
143-
else if(project instanceof AbstractProject) {
142+
} else if (project instanceof AbstractProject) {
144143
SCM scm = ((AbstractProject)project).getScm();
145144
buildStatusResources = createBuildStatusResources(scm, build);
146145
}
@@ -153,11 +152,21 @@ public static String defaultBitbucketBuildKeyFromBuild(Run<?, ?> build) {
153152
return DigestUtils.md5Hex(project.getFullDisplayName() + "#" + build.getNumber());
154153
}
155154

155+
public static String uniqueBitbucketBuildKeyFromBuild(Run<?, ?> build) {
156+
Job<?, ?> project = build.getParent();
157+
return DigestUtils.md5Hex(project.getFullDisplayName());
158+
}
159+
156160
public static String defaultBitbucketBuildNameFromBuild(Run<?, ?> build) {
157161
Job<?, ?> project = build.getParent();
158162
return project.getFullDisplayName() + " #" + build.getNumber();
159163
}
160164

165+
public static String uniqueBitbucketBuildNameFromBuild(Run<?, ?> build) {
166+
Job<?, ?> project = build.getParent();
167+
return project.getFullDisplayName();
168+
}
169+
161170
public static String defaultBitbucketBuildDescriptionFromBuild(Run<?, ?> build) {
162171
AbstractTestResultAction testResult = build.getAction(AbstractTestResultAction.class);
163172
String description = "";
@@ -173,12 +182,19 @@ public static String buildUrlFromBuild(Run<?, ?> build) {
173182
return project.getAbsoluteUrl() + build.getNumber() + '/';
174183
}
175184

176-
private static BitbucketBuildStatus createBitbucketBuildStatusFromBuild(Run<?, ?> build) throws Exception {
185+
private static BitbucketBuildStatus createBitbucketBuildStatusFromBuild(Run<?, ?> build, boolean overrideLatestBuild) throws Exception {
186+
String buildKey = "";
187+
String buildName = "";
177188
String buildState = guessBitbucketBuildState(build.getResult());
178189
// bitbucket requires the key to be shorter than 40 chars
179-
String buildKey = defaultBitbucketBuildKeyFromBuild(build);
190+
if (overrideLatestBuild) {
191+
buildKey = uniqueBitbucketBuildKeyFromBuild(build);
192+
buildName = uniqueBitbucketBuildNameFromBuild(build);
193+
} else {
194+
buildKey = defaultBitbucketBuildKeyFromBuild(build);
195+
buildName = defaultBitbucketBuildNameFromBuild(build);
196+
}
180197
String buildUrl = buildUrlFromBuild(build);
181-
String buildName = defaultBitbucketBuildNameFromBuild(build);
182198
String description = defaultBitbucketBuildDescriptionFromBuild(build);
183199

184200
return new BitbucketBuildStatus(buildState, buildKey, buildUrl, buildName, description);
@@ -196,20 +212,21 @@ private static String guessBitbucketBuildState(final Result result) {
196212
} else if (Result.UNSTABLE == result || Result.FAILURE == result || Result.ABORTED == result) {
197213
state = BitbucketBuildStatus.FAILED;
198214
} else {
199-
// return empty status for every other result (NOT_BUILT, ABORTED)
215+
// return empty status for every other result (NOT_BUILT)
200216
state = null;
201217
}
202218

203219
return state;
204220
}
205221

206-
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, final Run<?, ?> build,
207-
final TaskListener listener) throws Exception {
208-
notifyBuildStatus(credentials, build, listener, createBitbucketBuildStatusFromBuild(build));
222+
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, boolean overrideLatestBuild,
223+
final Run<?, ?> build, final TaskListener listener) throws Exception {
224+
notifyBuildStatus(credentials, overrideLatestBuild, build, listener, createBitbucketBuildStatusFromBuild(build, overrideLatestBuild));
209225
}
210226

211-
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, final Run<?, ?> build,
212-
final TaskListener listener, BitbucketBuildStatus buildStatus) throws Exception {
227+
public static void notifyBuildStatus(UsernamePasswordCredentials credentials, boolean overrideLatestBuild,
228+
final Run<?, ?> build, final TaskListener listener,
229+
BitbucketBuildStatus buildStatus) throws Exception {
213230

214231
List<BitbucketBuildStatusResource> buildStatusResources = createBuildStatusResources(build);
215232

@@ -225,8 +242,9 @@ public static void notifyBuildStatus(UsernamePasswordCredentials credentials, fi
225242
// then update the bitbucket build status resource with current status and current build number
226243
for (BitbucketBuildStatusResource prevBuildStatusResource : prevBuildStatusResources) {
227244
if (prevBuildStatusResource.getCommitId().equals(buildStatusResource.getCommitId())) {
228-
BitbucketBuildStatus prevBuildStatus = createBitbucketBuildStatusFromBuild(prevBuild);
245+
BitbucketBuildStatus prevBuildStatus = createBitbucketBuildStatusFromBuild(prevBuild, overrideLatestBuild);
229246
buildStatus.setKey(prevBuildStatus.getKey());
247+
230248
break;
231249
}
232250
}

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusNotifier.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public boolean prebuild(AbstractBuild<?, ?> build, BuildListener listener) {
106106
logger.info("Bitbucket notify on start");
107107

108108
try {
109-
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), build, listener);
109+
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), this.getOverrideLatestBuild(), build, listener);
110110
} catch (Exception e) {
111111
listener.getLogger().println("Bitbucket notify on start failed: " + e.getMessage());
112112
e.printStackTrace(listener.getLogger());
@@ -126,7 +126,7 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListen
126126
logger.info("Bitbucket notify on finish");
127127

128128
try {
129-
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), build, listener);
129+
BitbucketBuildStatusHelper.notifyBuildStatus(this.getCredentials(build), this.getOverrideLatestBuild(), build, listener);
130130
} catch (Exception e) {
131131
logger.log(Level.INFO, "Bitbucket notify on finish failed: " + e.getMessage(), e);
132132
listener.getLogger().println("Bitbucket notify on finish failed: " + e.getMessage());

src/main/java/org/jenkinsci/plugins/bitbucket/BitbucketBuildStatusNotifierStep.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public Void run() throws Exception {
186186
BitbucketBuildStatus buildStatus = new BitbucketBuildStatus(buildState, buildKey, buildUrl, buildName,
187187
buildDescription);
188188

189-
BitbucketBuildStatusHelper.notifyBuildStatus(step.getCredentials(build), build, taskListener, buildStatus);
189+
BitbucketBuildStatusHelper.notifyBuildStatus(step.getCredentials(build), false, build, taskListener, buildStatus);
190190

191191
if(buildState.equals(BitbucketBuildStatus.FAILED)) {
192192
throw new Exception(buildDescription);

0 commit comments

Comments
 (0)