From d566923021aa4fbcc389b901e729449c3d54d041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20M=C3=BCller?= Date: Sun, 4 Sep 2016 20:53:32 +0200 Subject: [PATCH] Add possibility to add build status only for failed builds to MR (Fixes #345) --- .../publisher/GitLabMessagePublisher.java | 24 ++++++--- .../GitLabMessagePublisher/config.jelly | 3 ++ .../publisher/GitLabMessagePublisherTest.java | 49 ++++++++++++++++--- 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher.java b/src/main/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher.java index 340f68e..73282f1 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher.java @@ -25,6 +25,7 @@ import java.util.logging.Logger; */ public class GitLabMessagePublisher extends MergeRequestNotifier { private static final Logger LOGGER = Logger.getLogger(GitLabMessagePublisher.class.getName()); + private boolean onlyForFailure = false; private boolean replaceSuccessNote = false; private boolean replaceFailureNote = false; private boolean replaceAbortNote = false; @@ -33,8 +34,9 @@ public class GitLabMessagePublisher extends MergeRequestNotifier { private String abortNoteText; @DataBoundConstructor - public GitLabMessagePublisher(boolean replaceSuccessNote, boolean replaceFailureNote, boolean replaceAbortNote, + public GitLabMessagePublisher(boolean onlyForFailure, boolean replaceSuccessNote, boolean replaceFailureNote, boolean replaceAbortNote, String successNoteText, String failureNoteText, String abortNoteText) { + this.onlyForFailure = onlyForFailure; this.replaceSuccessNote = replaceSuccessNote; this.replaceFailureNote = replaceFailureNote; this.replaceAbortNote = replaceAbortNote; @@ -45,15 +47,19 @@ public class GitLabMessagePublisher extends MergeRequestNotifier { public GitLabMessagePublisher() { } - public boolean getReplaceSuccessNote() { + public boolean isOnlyForFailure() { + return onlyForFailure; + } + + public boolean isReplaceSuccessNote() { return replaceSuccessNote; } - public boolean getReplaceFailureNote() { + public boolean isReplaceFailureNote() { return replaceFailureNote; } - public boolean getReplaceAbortNote() { + public boolean isReplaceAbortNote() { return replaceAbortNote; } @@ -91,7 +97,9 @@ public class GitLabMessagePublisher extends MergeRequestNotifier { @Override protected void perform(Run build, TaskListener listener, GitLabApi client, Integer projectId, Integer mergeRequestId) { try { - client.createMergeRequestNote(projectId, mergeRequestId, getNote(build, listener)); + if (!onlyForFailure || build.getResult() == Result.FAILURE) { + client.createMergeRequestNote(projectId, mergeRequestId, getNote(build, listener)); + } } catch (WebApplicationException | ProcessingException e) { listener.getLogger().printf("Failed to add comment on Merge Request for project '%s': %s%n", projectId, e.getMessage()); LOGGER.log(Level.SEVERE, String.format("Failed to add comment on Merge Request for project '%s'", projectId), e); @@ -139,11 +147,11 @@ public class GitLabMessagePublisher extends MergeRequestNotifier { private String getNote(Run build, TaskListener listener) { String message; - if (this.getReplaceSuccessNote() && build.getResult() == Result.SUCCESS) { + if (this.replaceSuccessNote && build.getResult() == Result.SUCCESS) { message = replaceMacros(build, listener, this.getSuccessNoteText()); - } else if (this.getReplaceAbortNote() && build.getResult() == Result.ABORTED) { + } else if (this.replaceAbortNote && build.getResult() == Result.ABORTED) { message = replaceMacros(build, listener, this.getAbortNoteText()); - } else if (this.getReplaceFailureNote() && build.getResult() == Result.FAILURE) { + } else if (this.replaceFailureNote && build.getResult() == Result.FAILURE) { message = replaceMacros(build, listener, this.getFailureNoteText()); } else { String icon = getResultIcon(build.getResult()); diff --git a/src/main/resources/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher/config.jelly b/src/main/resources/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher/config.jelly index e57f20e..23eead7 100644 --- a/src/main/resources/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher/config.jelly +++ b/src/main/resources/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisher/config.jelly @@ -2,6 +2,9 @@ + + + diff --git a/src/test/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisherTest.java b/src/test/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisherTest.java index ec02603..20e48f2 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisherTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/publisher/GitLabMessagePublisherTest.java @@ -104,7 +104,7 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, null, null, null)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, false, null, null, null)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener); @@ -126,7 +126,7 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, null, null, null)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, false, null, null, null)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener); @@ -134,6 +134,21 @@ public class GitLabMessagePublisherTest { mockServerClient.verify(requests); } + @Test + public void success_withOnlyForFailure() throws IOException, InterruptedException { + Integer buildNumber = 1; + Integer projectId = 3; + Integer mergeRequestId = 1; + AbstractBuild build = mockBuild("/build/123", GIT_LAB_CONNECTION, Result.SUCCESS, buildNumber); + + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(true, false, false, false, null, null, null)); + doReturn(projectId).when(publisher).getProjectId(build); + doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); + publisher.perform(build, null, listener); + + mockServerClient.verifyZeroInteractions(); + } + @Test public void failed() throws IOException, InterruptedException { Integer buildNumber = 1; @@ -148,7 +163,29 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, null, null, null)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, false, null, null, null)); + doReturn(projectId).when(publisher).getProjectId(build); + doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); + publisher.perform(build, null, listener); + + mockServerClient.verify(requests); + } + + @Test + public void failed_withOnlyForFailed() throws IOException, InterruptedException { + Integer buildNumber = 1; + Integer projectId = 3; + Integer mergeRequestId = 1; + AbstractBuild build = mockBuild("/build/123", GIT_LAB_CONNECTION, Result.FAILURE, buildNumber); + String buildUrl = Jenkins.getInstance().getRootUrl() + build.getUrl(); + String defaultNote = MessageFormat.format(":negative_squared_cross_mark: Jenkins Build {0}\n\nResults available at: [Jenkins [{1} #{2}]]({3})", + Result.FAILURE, build.getParent().getDisplayName(), buildNumber, buildUrl); + + HttpRequest[] requests = new HttpRequest[] { + prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) + }; + + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(true, false, false, false, null, null, null)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener); @@ -168,7 +205,7 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, true, null, null, defaultNote)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, false, true, null, null, defaultNote)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener); @@ -188,7 +225,7 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(true, false, false, defaultNote, null, null)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, true, false, false, defaultNote, null, null)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener); @@ -208,7 +245,7 @@ public class GitLabMessagePublisherTest { prepareSendMessageWithSuccessResponse(projectId, mergeRequestId, defaultNote) }; - GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, true, false, null, defaultNote, null)); + GitLabMessagePublisher publisher = spy(new GitLabMessagePublisher(false, false, true, false, null, defaultNote, null)); doReturn(projectId).when(publisher).getProjectId(build); doReturn(mergeRequestId).when(publisher).getMergeRequestId(build); publisher.perform(build, null, listener);