-
Notifications
You must be signed in to change notification settings - Fork 615
Expand file tree
/
Copy pathGitLabApproveMergeRequestPublisher.java
More file actions
81 lines (69 loc) · 3.4 KB
/
Copy pathGitLabApproveMergeRequestPublisher.java
File metadata and controls
81 lines (69 loc) · 3.4 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
package com.dabsquared.gitlabjenkins.publisher;
import com.dabsquared.gitlabjenkins.gitlab.api.GitLabClient;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequest;
import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Publisher;
import org.kohsuke.stapler.DataBoundConstructor;
import javax.ws.rs.NotAuthorizedException;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.WebApplicationException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class GitLabApproveMergeRequestPublisher extends MergeRequestNotifier {
private static final Logger LOGGER = Logger.getLogger(GitLabApproveMergeRequestPublisher.class.getName());
private final boolean approveUnstableBuilds;
@DataBoundConstructor
public GitLabApproveMergeRequestPublisher(boolean approveUnstableBuilds) {
this.approveUnstableBuilds = approveUnstableBuilds;
}
@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Publisher> {
@Override
public boolean isApplicable(Class<? extends AbstractProject> aClass) {
return true;
}
@Override
public String getHelpFile() {
return "/plugin/gitlab-plugin/help/help-approve-gitlab-mergerequest.html";
}
@Override
public String getDisplayName() {
return Messages.GitLabApproveMergeRequestPublisher_DisplayName();
}
}
public boolean isApproveUnstableBuilds() {
return approveUnstableBuilds;
}
@Override
protected void perform(Run<?, ?> build, TaskListener listener, GitLabClient client, MergeRequest mergeRequest) {
try {
Result buildResult = build.getResult();
if (build.getResult() == Result.SUCCESS || (buildResult == Result.UNSTABLE && isApproveUnstableBuilds())) {
client.approveMergeRequest(mergeRequest);
} else {
client.unapproveMergeRequest(mergeRequest);
}
} catch (NotFoundException e) {
String message = String.format(
"Failed to approve/unapprove merge request '%s' for project '%s'.\n"
+ "Got unexpected 404. Does your GitLab edition or GitLab.com tier really support approvals, and are you are an eligible approver for this merge request?", mergeRequest.getIid(), mergeRequest.getProjectId());
listener.getLogger().printf(message);
LOGGER.log(Level.WARNING, message, e);
} catch (NotAuthorizedException e) {
String message = String.format(
"Failed to approve/unapprove merge request '%s' for project '%s'.\n"
+ "Got unexpected 401, are you using the wrong credentials?", mergeRequest.getIid(), mergeRequest.getProjectId());
listener.getLogger().printf(message);
LOGGER.log(Level.WARNING, message, e);
} catch (WebApplicationException | ProcessingException e) {
listener.getLogger().printf("Failed to approve/unapprove merge request for project '%s': %s%n", mergeRequest.getProjectId(), e.getMessage());
LOGGER.log(Level.SEVERE, String.format("Failed to approve/unapprove merge request for project '%s'", mergeRequest.getProjectId()), e);
}
}
}