From 6619583daf717a81b81375dce25c1fea32ec13d2 Mon Sep 17 00:00:00 2001 From: Bart Vercoulen Date: Fri, 10 Oct 2025 13:44:24 +0200 Subject: [PATCH 1/5] Add gitlab Merge Request compatibility. --- .../lukanus/hudson/plugins/gitparameter/Consts.java | 2 +- .../plugins/gitparameter/GitParameterDefinition.java | 2 +- .../hudson/plugins/gitparameter/BasicSafeTests.java | 11 +++++++++-- .../hudson/plugins/gitparameter/BasicTests.java | 11 +++++++++-- 4 files changed, 20 insertions(+), 6 deletions(-) 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 e360c5df..0e8f0921 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,7 @@ 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 95bd9300..dc4fd887 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 a2306cf2..ee742bb3 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 25340bce..ed669508 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 From 7ec876ba5f399e03ea942d7b64f8cb24343569f9 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 10 Oct 2025 06:14:53 -0600 Subject: [PATCH 2/5] Format with spotless --- .../net/uaznia/lukanus/hudson/plugins/gitparameter/Consts.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 0e8f0921..1b5007e7 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.*|merge-requests)/(\\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"; From 6ecbb2ccf04552be4cfc6473a28ed287b6da45cd Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 10 Oct 2025 07:25:44 -0600 Subject: [PATCH 3/5] Correct the example for GitHub --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a1921708..2762afe4 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,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' @@ -145,8 +145,9 @@ pipeline { stages { stage('Example') { steps { + echo "Parameter is ${params.A_PULL_REQUEST}" 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']]) } } From 56696f18011dfdfd4e431b25833a78d5207745f5 Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Fri, 10 Oct 2025 07:29:14 -0600 Subject: [PATCH 4/5] Remove debugging statement from example --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 2762afe4..547aae77 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,6 @@ pipeline { stages { stage('Example') { steps { - echo "Parameter is ${params.A_PULL_REQUEST}" checkout scmGit(branches: [[name: "pr/${params.A_PULL_REQUEST}/head"]], userRemoteConfigs: [[refspec: "+refs/pull/${params.A_PULL_REQUEST}/head:refs/pull/${params.A_PULL_REQUEST}/head", url: 'https://github.com/jenkinsci/git-plugin.git']]) From a74b6593d2928ad72e177382fc8c6bd28929e4d6 Mon Sep 17 00:00:00 2001 From: Bart Vercoulen Date: Thu, 6 Nov 2025 21:07:02 +0100 Subject: [PATCH 5/5] Add gitlab merge request example in readme. --- README.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 547aae77..311db6bf 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 { @@ -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`.