From 9980bb0c6b2bd0ade801982a4c5100ffd1ec723e Mon Sep 17 00:00:00 2001 From: Paul Erickson Date: Fri, 17 Aug 2018 09:00:15 -0500 Subject: [PATCH] Migrate to v4 API --- .travis.yml | 4 +- pom.xml | 75 ++++++++++--------- .../GitLabSCMBranchBuildStrategy.java | 12 ++- .../gitlab_branch_source/GitLabSCMIcons.java | 4 - .../gitlab_branch_source/SourceHeads.java | 22 ++---- .../GitLabSCMAcceptMergeRequestAction.java | 2 +- .../actions/GitLabSCMPublishAction.java | 28 +++---- .../gitlab_branch_source/api/GitLabAPI.java | 26 +++---- .../events/CauseDataHelper.java | 5 +- .../events/GitLabSCMMergeRequestEvent.java | 2 +- .../heads/GitLabSCMHead.java | 4 +- .../hooks/HookHandler.java | 12 +-- .../META-INF/hudson.remoting.ClassFilter | 2 + 13 files changed, 91 insertions(+), 107 deletions(-) diff --git a/.travis.yml b/.travis.yml index 069bb7f..b690460 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ -dist: precise +dist: trusty language: java jdk: - - oraclejdk7 + - oraclejdk8 install: true script: ./travis.sh diff --git a/pom.xml b/pom.xml index 73e18b7..764cacb 100644 --- a/pom.xml +++ b/pom.xml @@ -11,9 +11,10 @@ - 2.7.1 - 1.7 - 1.7 + 2.7.1 + 1.8 + 1.8 + 8 argelbargel.jenkins.plugins @@ -36,27 +37,27 @@ org.jenkins-ci.plugins branch-api - 2.0.9 + 2.0.20 org.jenkins-ci.plugins cloudbees-folder - 6.0.4 + 6.4 org.jenkins-ci.plugins credentials - 2.1.13 + 2.1.16 org.jenkins-ci.plugins git - 3.3.0 + 3.9.1 org.jenkins-ci.plugins git-client - 2.4.5 + 2.7.2 org.jenkins-ci.plugins @@ -66,17 +67,17 @@ org.jenkins-ci.plugins scm-api - 2.1.1 + 2.2.7 org.jenkins-ci.plugins.workflow workflow-api - 2.13 + 2.27 org.jenkins-ci.plugins.workflow workflow-cps - 2.30 + 2.53 org.jenkins-ci.plugins.workflow @@ -86,30 +87,30 @@ org.jenkins-ci.plugins.workflow workflow-multibranch - 2.14 + 2.19 org.gitlab java-gitlab-api - 1.2.7 + 4.0.0 org.jenkins-ci.plugins pipeline-stage-step - 2.2 + 2.3 test org.jenkins-ci.plugins.workflow workflow-basic-steps - 2.4 + 2.7 test org.jenkins-ci.plugins.workflow workflow-durable-task-step - 2.11 + 2.19 test @@ -117,31 +118,31 @@ org.jenkins-ci.plugins.workflow workflow-scm-step - 2.4 + 2.6 org.jenkins-ci.plugins structs - 1.6 + 1.14 test org.jenkins-ci.plugins github-branch-source - 2.0.5 + 2.3.6 test - - org.jenkins-ci.plugins.workflow + + org.jenkins-ci.plugins.workflow workflow-step-api 2.15 test - - +--> @@ -283,7 +284,7 @@ - org.eclipse.m2e diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMBranchBuildStrategy.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMBranchBuildStrategy.java index 1daeb4e..c055d67 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMBranchBuildStrategy.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMBranchBuildStrategy.java @@ -10,6 +10,7 @@ import jenkins.scm.api.SCMHead; import jenkins.scm.api.SCMSource; import jenkins.scm.api.SCMSourceDescriptor; +import jenkins.scm.api.SCMRevision; import jenkins.scm.api.mixin.TagSCMHead; import net.sf.json.JSONObject; import org.kohsuke.stapler.StaplerRequest; @@ -26,7 +27,6 @@ public boolean isAutomaticBuild(SCMSource source, SCMHead head) { if (source instanceof GitLabSCMSource) { return isAutomaticBuild((GitLabSCMSource) source, head); } - return !TagSCMHead.class.isInstance(head); } @@ -47,6 +47,14 @@ private boolean isAutomaticBuild(GitLabSCMSource source, SCMHead head) { return true; } + @Override + public boolean isAutomaticBuild(SCMSource source, SCMHead head, SCMRevision var3, SCMRevision var4) { + if (source instanceof GitLabSCMSource) { + return isAutomaticBuild((GitLabSCMSource) source, head); + } + return !TagSCMHead.class.isInstance(head); + } + private boolean isAutomaticBuild(GitLabSCMSource source, GitLabSCMMergeRequestHead head) { if (!head.isMerged()) { return true; @@ -66,7 +74,7 @@ boolean isApplicable(BranchSource branchSource) { private GitLabSCMBranchBuildStrategy() { /* singleton */ } - + @Extension public static class DescriptorImpl extends BranchBuildStrategyDescriptor { @Nonnull diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMIcons.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMIcons.java index 6cd948c..2d2622f 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMIcons.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/GitLabSCMIcons.java @@ -101,10 +101,6 @@ static String iconFilePathPattern(String name) { private static String groupAvatarUrl(GitlabProject project, String connectionName) throws GitLabAPIException { GitlabNamespace namespace = project.getNamespace(); - if (namespace.getOwnerId() != null) { - return null; - } - GitLabGroup group = gitLabAPI(connectionName).getGroup(namespace.getId()); return group.getAvatarUrl(); } diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/SourceHeads.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/SourceHeads.java index af1b793..93a4372 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/SourceHeads.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/SourceHeads.java @@ -1,6 +1,5 @@ package argelbargel.jenkins.plugins.gitlab_branch_source; - import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabAPI; import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabAPIException; import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabMergeRequest; @@ -13,12 +12,10 @@ import argelbargel.jenkins.plugins.gitlab_branch_source.heads.GitLabSCMTagHead; import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestObjectAttributes; import hudson.model.TaskListener; +import jenkins.branch.MultiBranchProject; +import jenkins.model.ParameterizedJobMixIn; import jenkins.plugins.git.AbstractGitSCMSource.SCMRevisionImpl; -import jenkins.scm.api.SCMHead; -import jenkins.scm.api.SCMHeadEvent; -import jenkins.scm.api.SCMHeadObserver; -import jenkins.scm.api.SCMRevision; -import jenkins.scm.api.SCMSourceCriteria; +import jenkins.scm.api.*; import org.gitlab.api.models.GitlabBranch; import org.gitlab.api.models.GitlabTag; @@ -116,7 +113,7 @@ private void retrieveMergeRequest(SCMSourceCriteria criteria, @Nonnull SCMHeadOb String targetBranch = attributes.getTargetBranch(); if (!source.isExcluded(targetBranch)) { - int mrId = attributes.getId(); + int mrId = attributes.getIid(); log(listener, Messages.GitLabSCMSource_retrievingMergeRequest(mrId)); try { GitLabMergeRequest mr = api().getMergeRequest(source.getProjectId(), mrId); @@ -230,10 +227,9 @@ private void observe(SCMSourceCriteria criteria, @Nonnull SCMHeadObserver observ private void observe(SCMSourceCriteria criteria, @Nonnull SCMHeadObserver observer, GitLabMergeRequest mergeRequest, @Nonnull TaskListener listener) throws IOException, InterruptedException { log(listener, Messages.GitLabSCMSource_monitoringMergeRequest(mergeRequest.getIid())); - String targetBranch = mergeRequest.getTargetBranch(); GitLabSCMMergeRequestHead head = createMergeRequest( - mergeRequest.getId(), + mergeRequest.getIid(), mergeRequest.getTitle(), mergeRequest.getIid(), createBranch(mergeRequest.getSourceProjectId(), mergeRequest.getSourceBranch(), mergeRequest.getSha()), @@ -241,16 +237,14 @@ private void observe(SCMSourceCriteria criteria, @Nonnull SCMHeadObserver observ if (source.getSourceSettings().buildUnmerged(head)) { observe(criteria, observer, head, listener); } - if (source.getSourceSettings().buildMerged(head)) { if (!head.isMergeable() && buildOnlyMergeableRequests(head)) { log(listener, Messages.GitLabSCMSource_willNotBuildUnmergeableRequest(mergeRequest.getIid(), mergeRequest.getTargetBranch(), mergeRequest.getMergeStatus())); } observe(criteria, observer, head.merged(), listener); } - if (!source.getSourceSettings().getBranchMonitorStrategy().getBuildBranchesWithMergeRequests() && head.fromOrigin()) { - branchesWithMergeRequests(listener).put(mergeRequest.getId(), mergeRequest.getSourceBranch()); + branchesWithMergeRequests(listener).put(mergeRequest.getIid(), mergeRequest.getSourceBranch()); } } @@ -272,7 +266,6 @@ private boolean matches(SCMSourceCriteria criteria, GitLabSCMHead head, TaskList } catch (IOException e) { log(listener, "error checking criteria: " + e.getMessage()); } - return false; } @@ -288,11 +281,9 @@ private Map branchesWithMergeRequests(TaskListener listener) th if (source.getSourceSettings().getBranchMonitorStrategy().getBuildBranchesWithMergeRequests()) { return emptyMap(); } - if (branchesWithMergeRequestsCache == null) { retrieveMergeRequests(ALL_CRITERIA, NOOP_OBSERVER, listener); } - return branchesWithMergeRequestsCache; } @@ -304,7 +295,6 @@ private boolean buildOnlyMergeableRequests(SCMHead head) { source.getSourceSettings().getOriginMonitorStrategy().getBuildOnlyMergeableMerged(), source.getSourceSettings().getForksMonitorStrategy().getBuildOnlyMergeableMerged()); } - return true; } diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMAcceptMergeRequestAction.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMAcceptMergeRequestAction.java index fb9655e..1737440 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMAcceptMergeRequestAction.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMAcceptMergeRequestAction.java @@ -27,7 +27,7 @@ public final class GitLabSCMAcceptMergeRequestAction extends InvisibleAction imp public GitLabSCMAcceptMergeRequestAction(GitLabMergeRequest MR, int mergeRequestScopedId, String commitMessage, boolean removeSourceBranch) { this.mergeRequestPID = MR.getProjectId(); - this.mergeRequestID = MR.getId(); + this.mergeRequestID = MR.getIid(); this.mergeRequestScopedId = mergeRequestScopedId; this.commitMessage = commitMessage; this.removeSourceBranch = removeSourceBranch; diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMPublishAction.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMPublishAction.java index 656a9e7..b3e7f94 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMPublishAction.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/actions/GitLabSCMPublishAction.java @@ -84,19 +84,20 @@ public void publishStarted(Run build, GitLabSCMHeadMetadataAction metadata private void attachGraphListener(final WorkflowRun build, final GraphListener listener) { build.getExecutionPromise().addListener( - new Runnable() { - @Override - public void run() { - build.addAction(new RunningContextsAction()); - FlowExecution execution = build.getExecution(); - if (execution != null) { - execution.addListener(listener); - } else { - LOGGER.log(SEVERE, "could not get flow-execution for build " + build.getFullDisplayName()); - } + new Runnable() { + @Override + public void run() { + build.addAction(new RunningContextsAction()); + FlowExecution execution = build.getExecution(); + if (execution != null) { + execution.addListener(listener); + } else { + LOGGER.log(SEVERE, "could not get flow-execution for build " + build.getFullDisplayName()); } - }, - Executors.newSingleThreadExecutor()); + } + }, + Executors.newSingleThreadExecutor() + ); } public void publishResult(Run build, GitLabSCMHeadMetadataAction metadata) { @@ -142,7 +143,7 @@ public void onNewHead(FlowNode node) { } else if (isStageEndNode(node, getRunningContexts().peekNodeId())) { - // If this or a prior stage failed then build.result is set to 'FAILED' + // If this or a prior stage failed then build.result is set to 'FAILED' // otherwise build.result is still null and we assume success. BuildState state = success; if(build.getResult() != null) { @@ -196,7 +197,6 @@ private String push(String id, String name) { String context = "#" + (++stageCount) + " " + name; contexts.put(id, context); return context; - } String peekNodeId() { diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/api/GitLabAPI.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/api/GitLabAPI.java index 69611b7..3c7eae5 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/api/GitLabAPI.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/api/GitLabAPI.java @@ -188,10 +188,11 @@ public List getTree(int id, String ref, String path) throw try { Query query = new Query() .appendIf("path", path) - .appendIf("ref_name", ref); - + .appendIf("ref", ref); + query.append("per_page","10000"); String tailUrl = GitlabProject.URL + "/" + id + "/repository" + GitlabRepositoryTree.URL + query.toString(); + LOGGER.fine("tailurl: " + tailUrl); GitlabRepositoryTree[] tree = delegate.retrieve().to(tailUrl, GitlabRepositoryTree[].class); return Arrays.asList(tree); } catch (Exception e) { @@ -278,41 +279,35 @@ private boolean unregisterProjectHook(String url, int projectId) throws IOExcept return true; } } - return false; } private String projectUrl(String group, GitLabProjectSelector selector, GitLabProjectVisibility visibility, String searchPattern) { StringBuilder urlBuilder = new StringBuilder(GitlabGroup.URL).append(PATH_SEP).append(group).append(GitLabProject.URL).append("?membership=true"); - if (!VISIBLE.equals(selector)) { urlBuilder.append("&").append(selector.id()).append("=true"); } - if (!ALL.equals(visibility)) { - urlBuilder.append("&").append("visibility=").append(visibility.id()); + urlBuilder.append("&visibility=").append(visibility.id()); } - if (!StringUtils.isEmpty(searchPattern)) { - urlBuilder.append("&").append("search=").append(searchPattern); + urlBuilder.append("&search=").append(searchPattern); } - return urlBuilder.toString(); } private String projectUrl(GitLabProjectSelector selector, GitLabProjectVisibility visibility, String searchPattern) { - StringBuilder urlBuilder = new StringBuilder(GitlabProject.URL) - .append(PATH_SEP).append(selector.id()).append("?membership=true"); - + StringBuilder urlBuilder = new StringBuilder(GitlabProject.URL).append("?membership=true"); + if (!VISIBLE.equals(selector)) { + urlBuilder.append("&").append(selector.id()).append("=true"); + } if (!ALL.equals(visibility)) { urlBuilder.append("&visibility=").append(visibility.id()); } - if (!StringUtils.isEmpty(searchPattern)) { - urlBuilder.append("&").append("search=").append(searchPattern); + urlBuilder.append("&search=").append(searchPattern); } - return urlBuilder.toString(); } @@ -323,4 +318,5 @@ private String encode(String in) throws GitLabAPIException { throw new GitLabAPIException(e); } } + } diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/CauseDataHelper.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/CauseDataHelper.java index a55a306..9fde5ae 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/CauseDataHelper.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/CauseDataHelper.java @@ -1,10 +1,7 @@ package argelbargel.jenkins.plugins.gitlab_branch_source.events; import com.dabsquared.gitlabjenkins.cause.CauseData; -import com.dabsquared.gitlabjenkins.gitlab.hook.model.Commit; -import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestHook; -import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestObjectAttributes; -import com.dabsquared.gitlabjenkins.gitlab.hook.model.PushHook; +import com.dabsquared.gitlabjenkins.gitlab.hook.model.*; import org.eclipse.jgit.util.StringUtils; import java.util.List; diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/GitLabSCMMergeRequestEvent.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/GitLabSCMMergeRequestEvent.java index 181a2c7..0c41f35 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/GitLabSCMMergeRequestEvent.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/events/GitLabSCMMergeRequestEvent.java @@ -82,7 +82,7 @@ Collection heads(@Nonnull GitLabSCMSource source) throw String sourceBranch = attributes.getSourceBranch(); String hash = attributes.getLastCommit().getId(); GitLabSCMMergeRequestHead head = createMergeRequest( - attributes.getId(), attributes.getTitle(), attributes.getIid(), + attributes.getIid(), attributes.getTitle(), attributes.getIid(), createBranch(sourceProjectId, sourceBranch, hash), createBranch(attributes.getTargetProjectId(), attributes.getTargetBranch(), REVISION_HEAD)); diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/heads/GitLabSCMHead.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/heads/GitLabSCMHead.java index b12d752..f30ab62 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/heads/GitLabSCMHead.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/heads/GitLabSCMHead.java @@ -14,11 +14,11 @@ public abstract class GitLabSCMHead extends SCMHead implements SCMHeadMixin { public static final String REVISION_HEAD = "HEAD"; public static GitLabSCMBranchHead createBranch(int projectId, String name, String hash) { - return createBranch(projectId, name+"t2", hash, false); + return createBranch(projectId, name, hash, false); } public static GitLabSCMTagHead createTag(int projectId, String name, String hash, long timestamp) { - return new GitLabSCMTagHead(projectId, name+"t3", hash, timestamp); + return new GitLabSCMTagHead(projectId, name, hash, timestamp); } public static GitLabSCMMergeRequestHead createMergeRequest(int id, String name, int iid, GitLabSCMHead source, GitLabSCMBranchHead target) { diff --git a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/hooks/HookHandler.java b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/hooks/HookHandler.java index 7150041..d299f9d 100644 --- a/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/hooks/HookHandler.java +++ b/src/main/java/argelbargel/jenkins/plugins/gitlab_branch_source/hooks/HookHandler.java @@ -1,12 +1,8 @@ package argelbargel.jenkins.plugins.gitlab_branch_source.hooks; - import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabHookEventType; import argelbargel.jenkins.plugins.gitlab_branch_source.api.SystemHook; -import argelbargel.jenkins.plugins.gitlab_branch_source.events.GitLabSCMMergeRequestEvent; -import argelbargel.jenkins.plugins.gitlab_branch_source.events.GitLabSCMPushEvent; -import argelbargel.jenkins.plugins.gitlab_branch_source.events.GitLabSCMSourceEvent; -import argelbargel.jenkins.plugins.gitlab_branch_source.events.GitLabSCMTagPushEvent; +import argelbargel.jenkins.plugins.gitlab_branch_source.events.*; import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.gitlab.hook.model.PushHook; import com.dabsquared.gitlabjenkins.gitlab.hook.model.WebHook; @@ -37,9 +33,7 @@ void handle(String id, HttpServletRequest request) throws IOException { private void handle(String id, GitLabHookEventType eventType, HttpServletRequest request) throws IOException { LOGGER.fine("handling hook for " + id + " for eventType " + eventType); - try - { - + try { String requestBody = getRequestBody(request); switch (eventType) { case PUSH: @@ -60,7 +54,7 @@ private void handle(String id, GitLabHookEventType eventType, HttpServletRequest throw new IllegalArgumentException("cannot handle hook-event of type " + eventType); } } catch (Exception e) { - LOGGER.log(Level.WARNING, "GitLabHookEventType", e); + LOGGER.log(Level.WARNING, "GitLabHookEventType", e); } } diff --git a/src/main/resources/META-INF/hudson.remoting.ClassFilter b/src/main/resources/META-INF/hudson.remoting.ClassFilter index 3b3c18a..135965e 100644 --- a/src/main/resources/META-INF/hudson.remoting.ClassFilter +++ b/src/main/resources/META-INF/hudson.remoting.ClassFilter @@ -2,3 +2,5 @@ org.gitlab.api.models.GitlabNamespace org.gitlab.api.models.GitlabPermission org.gitlab.api.models.GitlabProjectAccessLevel org.gitlab.api.models.GitlabUser +org.gitlab.api.models.GitlabProjectSharedGroup +org.gitlab.api.models.GitlabProject