diff --git a/pom.xml b/pom.xml
index c609c15..9376b9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -140,7 +140,7 @@
org.gitlab
java-gitlab-api
- 1.1.9
+ 1.1.10-SNAPSHOT
diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java
index f46b311..bf21296 100644
--- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java
+++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java
@@ -5,6 +5,9 @@ import java.util.Date;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
+import org.gitlab.api.GitlabAPI;
+import org.gitlab.api.models.GitlabCommitStatus;
+import org.gitlab.api.models.GitlabMergeRequest;
import org.gitlab.api.models.GitlabProject;
/**
@@ -60,6 +63,19 @@ public class GitLabMergeRequest extends GitLabRequest {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
+ public GitlabCommitStatus createCommitStatus(GitlabAPI api, String status, String targetUrl) {
+ try {
+ GitlabMergeRequest mergeRequest = api.getMergeRequest(sourceProject, objectAttributes.getId());
+ if(objectAttributes.lastCommit!=null) {
+ return api.createCommitStatus(sourceProject, objectAttributes.getLastCommit().getId(), status, mergeRequest.getSourceBranch(), "Jenkins", targetUrl, null);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
public static class ObjectAttributes {
private Integer id;
diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushCause.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushCause.java
index cee5643..ddd310d 100644
--- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushCause.java
+++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushCause.java
@@ -10,24 +10,35 @@ import java.io.IOException;
*/
public class GitLabPushCause extends SCMTrigger.SCMTriggerCause {
- private final String pushedBy;
+ private final GitLabPushRequest pushRequest;
- public GitLabPushCause(String pushedBy) {
- this.pushedBy = pushedBy;
+ public GitLabPushCause(GitLabPushRequest pushRequest) {
+ this.pushRequest=pushRequest;
}
- public GitLabPushCause(String pushedBy, File logFile) throws IOException {
+ public GitLabPushCause(GitLabPushRequest pushRequest, File logFile) throws IOException{
super(logFile);
- this.pushedBy = pushedBy;
+ this.pushRequest=pushRequest;
}
- public GitLabPushCause(String pushedBy, String pollingLog) {
+ public GitLabPushCause(GitLabPushRequest pushRequest, String pollingLog) {
super(pollingLog);
- this.pushedBy = pushedBy;
+ this.pushRequest=pushRequest;
+ }
+
+ public GitLabPushRequest getPushRequest() {
+ return pushRequest;
}
@Override
public String getShortDescription() {
+ String pushedBy;
+ if (pushRequest.getCommits().size() > 0){
+ pushedBy = pushRequest.getCommits().get(0).getAuthor().getName();
+ } else {
+ pushedBy = pushRequest.getUser_name();
+ }
+
if (pushedBy == null) {
return "Started by GitLab push";
} else {
diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushRequest.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushRequest.java
index 50689af..4d02aba 100644
--- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushRequest.java
+++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushRequest.java
@@ -1,9 +1,13 @@
package com.dabsquared.gitlabjenkins;
+import java.io.IOException;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
+import org.gitlab.api.GitlabAPI;
+import org.gitlab.api.models.GitlabCommitStatus;
+import org.gitlab.api.models.GitlabProject;
/**
* Represents for WebHook payload
@@ -23,6 +27,25 @@ public class GitLabPushRequest extends GitLabRequest {
public GitLabPushRequest() {
}
+ private GitlabProject sourceProject = null;
+
+ public GitlabProject getSourceProject (GitLab api) throws IOException {
+ if (sourceProject == null) {
+ sourceProject = api.instance().getProject(project_id);
+ }
+ return sourceProject;
+ }
+
+ public GitlabCommitStatus createCommitStatus(GitlabAPI api, String status, String targetUrl) {
+ try {
+ if(getLastCommit()!=null) {
+ return api.createCommitStatus(sourceProject, getLastCommit().getId(), status, checkout_sha, "Jenkins", targetUrl, null);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
private String before;
private String after;
diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java
index 42e5c63..1fcdad7 100644
--- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java
+++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java
@@ -40,7 +40,6 @@ import jenkins.model.ParameterizedJobMixIn;
import jenkins.triggers.SCMTriggerItem;
import jenkins.triggers.SCMTriggerItem.SCMTriggerItems;
import net.sf.json.JSONObject;
-import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jgit.transport.RemoteConfig;
@@ -82,6 +81,7 @@ public class GitLabPushTrigger extends Trigger> {
private boolean ciSkip = true;
private boolean setBuildDescription = true;
private boolean addNoteOnMergeRequest = true;
+ private boolean addCiMessage = false;
private boolean addVoteOnMergeRequest = true;
private boolean allowAllBranches = false;
private final String includeBranchesSpec;
@@ -89,14 +89,15 @@ public class GitLabPushTrigger extends Trigger> {
private boolean acceptMergeRequestOnSuccess = false;
@DataBoundConstructor
- public GitLabPushTrigger(boolean triggerOnPush, boolean triggerOnMergeRequest, String triggerOpenMergeRequestOnPush, boolean ciSkip, boolean setBuildDescription, boolean addNoteOnMergeRequest, boolean addVoteOnMergeRequest, boolean acceptMergeRequestOnSuccess, boolean allowAllBranches,
+ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerOnMergeRequest, String triggerOpenMergeRequestOnPush, boolean ciSkip, boolean setBuildDescription, boolean addNoteOnMergeRequest, boolean addCiMessage, boolean addVoteOnMergeRequest, boolean acceptMergeRequestOnSuccess, boolean allowAllBranches,
String includeBranchesSpec, String excludeBranchesSpec) {
this.triggerOnPush = triggerOnPush;
this.triggerOnMergeRequest = triggerOnMergeRequest;
this.triggerOpenMergeRequestOnPush = triggerOpenMergeRequestOnPush;
this.ciSkip = ciSkip;
this.setBuildDescription = setBuildDescription;
- this.addNoteOnMergeRequest = addNoteOnMergeRequest;
+ this.addNoteOnMergeRequest = addNoteOnMergeRequest;
+ this.addCiMessage = addCiMessage;
this.addVoteOnMergeRequest = addVoteOnMergeRequest;
this.allowAllBranches = allowAllBranches;
this.includeBranchesSpec = includeBranchesSpec;
@@ -200,20 +201,18 @@ public class GitLabPushTrigger extends Trigger> {
} else {
LOGGER.log(Level.INFO, "GitLab Push Request detected in {0}. Job is already in the queue.", job.getName());
}
+
+ if(addCiMessage) {
+ req.createCommitStatus(getDescriptor().getGitlab().instance(), "pending", getDescriptor().gitlabHostUrl);
+ }
}
private GitLabPushCause createGitLabPushCause(GitLabPushRequest req) {
GitLabPushCause cause;
- String triggeredByUser;
- if (req.getCommits().size() > 0){
- triggeredByUser = req.getCommits().get(0).getAuthor().getName();
- } else {
- triggeredByUser = req.getUser_name();
- }
try {
- cause = new GitLabPushCause(triggeredByUser, getLogFile());
+ cause = new GitLabPushCause(req, getLogFile());
} catch (IOException ex) {
- cause = new GitLabPushCause(triggeredByUser);
+ cause = new GitLabPushCause(req);
}
return cause;
}
@@ -230,15 +229,25 @@ public class GitLabPushTrigger extends Trigger> {
values.put("gitlabTargetBranch", new StringParameterValue("gitlabTargetBranch", branch));
values.put("gitlabBranch", new StringParameterValue("gitlabBranch", branch));
- if (job instanceof AbstractProject,?>){
- LOGGER.log(Level.INFO, "Trying to get name and URL for job: {0} using project {1} (push)", new String[]{job.getName(), ((AbstractProject, ?>) job).getRootProject().getName()});
- }else{
- LOGGER.log(Level.INFO, "Trying to get name and URL for job: {0} (push)", new String[]{job.getName()});
- }
- values.put("gitlabSourceRepoName", new StringParameterValue("gitlabSourceRepoName", getDesc().getSourceRepoNameDefault(job)));
- values.put("gitlabSourceRepoURL", new StringParameterValue("gitlabSourceRepoURL", getDesc().getSourceRepoURLDefault(job).toString()));
values.put("gitlabActionType", new StringParameterValue("gitlabActionType", "PUSH"));
+ LOGGER.log(Level.INFO, "Trying to get name and URL for job: {0}", job.getName());
+ String sourceRepoName = getDesc().getSourceRepoNameDefault(job);
+ String sourceRepoURL = getDesc().getSourceRepoURLDefault(job).toString();
+
+ if (!getDescriptor().getGitlabHostUrl().isEmpty()) {
+ // Get source repository if communication to Gitlab is possible
+ try {
+ sourceRepoName = req.getSourceProject(getDesc().getGitlab()).getPathWithNamespace();
+ sourceRepoURL = req.getSourceProject(getDesc().getGitlab()).getSshUrl();
+ } catch (IOException ex) {
+ LOGGER.log(Level.WARNING, "Could not fetch source project''s data from Gitlab. '('{0}':' {1}')'", new String[]{ex.toString(), ex.getMessage()});
+ }
+ }
+
+ values.put("gitlabSourceRepoName", new StringParameterValue("gitlabSourceRepoName", sourceRepoName));
+ values.put("gitlabSourceRepoURL", new StringParameterValue("gitlabSourceRepoURL", sourceRepoURL));
+
List listValues = new ArrayList(values.values());
ParametersAction parametersAction = new ParametersAction(listValues);
@@ -296,6 +305,10 @@ public class GitLabPushTrigger extends Trigger> {
} else {
LOGGER.log(Level.INFO, "GitLab Merge Request detected in {0}. Job is already in the queue.", job.getName());
}
+
+ if(addCiMessage) {
+ req.createCommitStatus(getDescriptor().getGitlab().instance(), "pending", getDescriptor().gitlabHostUrl);
+ }
}
private GitLabMergeCause createGitLabMergeCause(GitLabMergeRequest req) {
@@ -379,12 +392,23 @@ public class GitLabPushTrigger extends Trigger> {
}
}
- public void onCompleted(Run build){
- Cause mCause= build.getCause(GitLabMergeCause.class);
+ public void onCompleted(Run run){
+ Cause mCause= run.getCause(GitLabMergeCause.class);
if (mCause != null && mCause instanceof GitLabMergeCause) {
- onCompleteMergeRequest(build,(GitLabMergeCause) mCause);
+ onCompleteMergeRequest(run, (GitLabMergeCause) mCause);
}
+ Cause pCause= run.getCause(GitLabPushCause.class);
+ if (pCause != null && pCause instanceof GitLabPushCause) {
+ onCompletedPushRequest(run, (GitLabPushCause) pCause);
+ }
+
+ }
+
+ private void onCompletedPushRequest(Run run, GitLabPushCause cause) {
+ if(addCiMessage) {
+ cause.getPushRequest().createCommitStatus(this.getDescriptor().getGitlab().instance(), run.getResult()==Result.SUCCESS?"success":"failure", this.getDescriptor().gitlabHostUrl);
+ }
}
private void onCompleteMergeRequest(Run run,GitLabMergeCause cause){
@@ -423,10 +447,35 @@ public class GitLabPushTrigger extends Trigger> {
}
}
+ if(addCiMessage) {
+ cause.getMergeRequest().createCommitStatus(this.getDescriptor().getGitlab().instance(), run.getResult()==Result.SUCCESS?"success":"failure", this.getDescriptor().gitlabHostUrl);
+ }
}
public void onStarted(Run run) {
setBuildCauseInJob(run);
+
+ Cause mCause= run.getCause(GitLabMergeCause.class);
+ if (mCause != null && mCause instanceof GitLabMergeCause) {
+ onStartedMergeRequest(run, (GitLabMergeCause) mCause);
+ }
+
+ Cause pCause= run.getCause(GitLabPushCause.class);
+ if (pCause != null && pCause instanceof GitLabPushCause) {
+ onStartedPushRequest(run, (GitLabPushCause) pCause);
+ }
+ }
+
+ private void onStartedPushRequest(Run run, GitLabPushCause cause) {
+ if(addCiMessage) {
+ cause.getPushRequest().createCommitStatus(this.getDescriptor().getGitlab().instance(), "running", this.getDescriptor().gitlabHostUrl);
+ }
+ }
+
+ private void onStartedMergeRequest(Run run, GitLabMergeCause cause) {
+ if(addCiMessage) {
+ cause.getMergeRequest().createCommitStatus(this.getDescriptor().getGitlab().instance(), "running", this.getDescriptor().gitlabHostUrl);
+ }
}
private String getSourceBranch(GitLabRequest req) {
diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabRequest.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabRequest.java
index 19eb166..8621f33 100644
--- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabRequest.java
+++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabRequest.java
@@ -14,8 +14,10 @@ import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
+import org.gitlab.api.GitlabAPI;
+import org.gitlab.api.models.GitlabCommitStatus;
-public class GitLabRequest {
+public abstract class GitLabRequest {
protected enum Builder {
INSTANCE;
private final Gson gson;
@@ -51,4 +53,6 @@ public class GitLabRequest {
}
}
+ public abstract GitlabCommitStatus createCommitStatus(GitlabAPI api, String status, String targetUrl);
+
}
diff --git a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly
index 3655f8f..53f4752 100644
--- a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly
+++ b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly
@@ -17,6 +17,9 @@
+
+
+