diff --git a/README.md b/README.md index a192170..311db6b 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,14 @@ pipeline { ### `PT_PULL_REQUEST` type -The `PT_PULL_REQUEST` type lists pull requests in the remote repository. +The `PT_PULL_REQUEST` type lists pull requests or merge requests in the remote repository. + +Supports: +- GitHub Pull Requests +- Bitbucket Pull Requests +- GitLab Merge Requests + +#### GitHub Example ```groovy pipeline { @@ -137,7 +144,7 @@ pipeline { parameters { gitParameter type: 'PT_PULL_REQUEST', name: 'A_PULL_REQUEST', - defaultValue: '', + defaultValue: '1818', description: 'Choose a pull request to checkout', selectedValue: 'TOP', sortMode: 'DESCENDING_SMART' @@ -146,7 +153,7 @@ pipeline { stage('Example') { steps { checkout scmGit(branches: [[name: "pr/${params.A_PULL_REQUEST}/head"]], - userRemoteConfigs: [[refspec: '+refs/pull/*:refs/remotes/origin/pr/*', + userRemoteConfigs: [[refspec: "+refs/pull/${params.A_PULL_REQUEST}/head:refs/pull/${params.A_PULL_REQUEST}/head", url: 'https://github.com/jenkinsci/git-plugin.git']]) } } @@ -154,6 +161,31 @@ pipeline { } ``` +#### GitLab Example + +```groovy +pipeline { + agent any + parameters { + gitParameter type: 'PT_PULL_REQUEST', + name: 'MERGE_REQUEST', + defaultValue: '', + description: 'Choose a merge request to checkout', + selectedValue: 'TOP', + sortMode: 'DESCENDING_SMART' + } + stages { + stage('Example') { + steps { + checkout scmGit(branches: [[name: "refs/remotes/origin/merge-requests/${params.MERGE_REQUEST}/head"]], + userRemoteConfigs: [[refspec: '+refs/merge-requests/*:refs/remotes/origin/merge-requests/*', + url: 'https://gitlab.com/your-group/your-project.git']]) + } + } + } +} +``` + ### `PT_REVISION` type The `PT_REVISION` type lists all the revisions in the repository that are part of the `branch`. diff --git a/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/Consts.java b/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/Consts.java index e360c5d..1b5007e 100644 --- a/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/Consts.java +++ b/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/Consts.java @@ -13,7 +13,8 @@ public class Consts { public static final String PARAMETER_TYPE_TAG_BRANCH = "PT_BRANCH_TAG"; public static final String PARAMETER_TYPE_PULL_REQUEST = "PT_PULL_REQUEST"; - public static final Pattern PULL_REQUEST_REFS_PATTERN = Pattern.compile("refs/pull.*/(\\d+)/[from|head]"); + public static final Pattern PULL_REQUEST_REFS_PATTERN = + Pattern.compile("refs/(pull.*|merge-requests)/(\\d+)/(from|head)"); public static final String TEMPORARY_DIRECTORY_PREFIX = "git_parameter_"; public static final String EMPTY_JOB_NAME = "EMPTY_JOB_NAME"; diff --git a/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/GitParameterDefinition.java b/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/GitParameterDefinition.java index 95bd930..dc4fd88 100644 --- a/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/GitParameterDefinition.java +++ b/src/main/java/net/uaznia/lukanus/hudson/plugins/gitparameter/GitParameterDefinition.java @@ -457,7 +457,7 @@ private Set getPullRequest(GitClient gitClient, String gitUrl) throws Ex for (String remoteReference : remoteReferences.keySet()) { Matcher matcher = PULL_REQUEST_REFS_PATTERN.matcher(remoteReference); if (matcher.find()) { - pullRequestSet.add(matcher.group(1)); + pullRequestSet.add(matcher.group(2)); } } return pullRequestSet; diff --git a/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicSafeTests.java b/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicSafeTests.java index a2306cf..ee742bb 100644 --- a/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicSafeTests.java +++ b/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicSafeTests.java @@ -51,14 +51,21 @@ void testCreateValue_StaplerRequest2() { void matchesWithBitbucketPullRequestRefs() { Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/pull-requests/186/from"); assertTrue(matcher.find()); - assertEquals("186", matcher.group(1)); + assertEquals("186", matcher.group(2)); } @Test void matchesWithGithubPullRequestRefs() { Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/pull/45/head"); assertTrue(matcher.find()); - assertEquals("45", matcher.group(1)); + assertEquals("45", matcher.group(2)); + } + + @Test + void matchesWithGitLabMergeRequestRefs() { + Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/merge-requests/42/head"); + assertTrue(matcher.find()); + assertEquals("42", matcher.group(2)); } @Test diff --git a/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicTests.java b/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicTests.java index 25340bc..ed66950 100644 --- a/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicTests.java +++ b/src/test/java/net/uaznia/lukanus/hudson/plugins/gitparameter/BasicTests.java @@ -61,14 +61,21 @@ void testCreateValue_StaplerRequest2() { void matchesWithBitbucketPullRequestRefs() { Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/pull-requests/186/from"); assertTrue(matcher.find()); - assertEquals("186", matcher.group(1)); + assertEquals("186", matcher.group(2)); } @Test void matchesWithGithubPullRequestRefs() { Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/pull/45/head"); assertTrue(matcher.find()); - assertEquals("45", matcher.group(1)); + assertEquals("45", matcher.group(2)); + } + + @Test + void matchesWithGitLabMergeRequestRefs() { + Matcher matcher = Consts.PULL_REQUEST_REFS_PATTERN.matcher("refs/merge-requests/42/head"); + assertTrue(matcher.find()); + assertEquals("42", matcher.group(2)); } @Test