From 3d7eb3e51835bad5aa6d48405923d0cf53b7a869 Mon Sep 17 00:00:00 2001
From: strangelookingnerd
<49242855+strangelookingnerd@users.noreply.github.com>
Date: Tue, 14 Jan 2025 09:28:42 +0100
Subject: [PATCH 01/23] Use `jenkins.baseline` to reduce bom update mistakes
(#824)
---
pom.xml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index e3e846e34..8678d4768 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,9 @@
999999-SNAPSHOT
jenkinsci/${project.artifactId}-plugin
2.2.0
- 2.440.3
+
+ 2.440
+ ${jenkins.baseline}.3
true
false
@@ -42,7 +44,7 @@
io.jenkins.tools.bom
- bom-2.440.x
+ bom-${jenkins.baseline}.x
3234.v5ca_5154341ef
pom
import
From 088b5f22c7680d6e4d29ce39542d32f9c2b2998f Mon Sep 17 00:00:00 2001
From: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
Date: Tue, 14 Jan 2025 09:12:11 +0000
Subject: [PATCH 02/23] Update BOM, update to Jakarta (#823)
* Init
* Update pom.xml
---------
Co-authored-by: Adrien Lecharpentier
---
pom.xml | 8 ++++----
.../FillErrorResponse.java | 10 ++++------
.../GitHubConfiguration.java | 4 ++--
.../github_branch_source/GitHubSCMSource.java | 2 +-
.../github_branch_source/EndpointTest.java | 20 +++++++++----------
.../GitHubSCMBuilderTest.java | 3 ++-
.../GitHubSCMNavigatorTest.java | 13 ++++++++++--
7 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8678d4768..f68d7ed06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 4.88
+ 5.5
@@ -34,8 +34,8 @@
jenkinsci/${project.artifactId}-plugin
2.2.0
- 2.440
- ${jenkins.baseline}.3
+ 2.479
+ ${jenkins.baseline}.1
true
false
@@ -45,7 +45,7 @@
io.jenkins.tools.bom
bom-${jenkins.baseline}.x
- 3234.v5ca_5154341ef
+ 3893.v213a_42768d35
pom
import
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/FillErrorResponse.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/FillErrorResponse.java
index c2513a629..3d030fbf6 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/FillErrorResponse.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/FillErrorResponse.java
@@ -1,13 +1,12 @@
package org.jenkinsci.plugins.github_branch_source;
import hudson.Util;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
import jenkins.model.Jenkins;
import org.kohsuke.stapler.HttpResponse;
-import org.kohsuke.stapler.StaplerRequest;
-import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.StaplerRequest2;
+import org.kohsuke.stapler.StaplerResponse2;
// TODO replace with corresponding core functionality once Jenkins core has JENKINS-42443
class FillErrorResponse extends IOException implements HttpResponse {
@@ -20,8 +19,7 @@ public FillErrorResponse(String message, boolean clearList) {
}
@Override
- public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node)
- throws IOException, ServletException {
+ public void generateResponse(StaplerRequest2 req, StaplerResponse2 rsp, Object node) throws IOException {
rsp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
rsp.setContentType("text/html;charset=UTF-8");
rsp.setHeader("X-Jenkins-Select-Error", clearList ? "clear" : "retain");
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
index 5360b3d8e..54bd14fda 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
@@ -42,7 +42,7 @@
import jenkins.model.Jenkins;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
-import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.StaplerRequest2;
@Extension
public class GitHubConfiguration extends GlobalConfiguration {
@@ -60,7 +60,7 @@ public GitHubConfiguration() {
}
@Override
- public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
+ public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException {
req.bindJSON(this, json);
return true;
}
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
index 857ed773a..0a5570f69 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
@@ -58,6 +58,7 @@
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;
import hudson.util.LogTaskListener;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.Closeable;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -85,7 +86,6 @@
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.servlet.http.HttpServletResponse;
import jenkins.model.Jenkins;
import jenkins.plugins.git.AbstractGitSCMSource;
import jenkins.plugins.git.GitTagSCMRevision;
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/EndpointTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/EndpointTest.java
index b470e6fc3..9693adbfb 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/EndpointTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/EndpointTest.java
@@ -10,13 +10,13 @@
import hudson.Util;
import hudson.model.UnprotectedRootAction;
import hudson.security.csrf.CrumbExclusion;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import jenkins.model.Jenkins;
import org.htmlunit.FailingHttpStatusCodeException;
import org.htmlunit.HttpMethod;
@@ -31,8 +31,8 @@
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.MockAuthorizationStrategy;
import org.jvnet.hudson.test.TestExtension;
-import org.kohsuke.stapler.StaplerRequest;
-import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.StaplerRequest2;
+import org.kohsuke.stapler.StaplerResponse2;
import org.xml.sax.SAXException;
public class EndpointTest {
@@ -103,7 +103,7 @@ private String appendCrumb(String url) {
}
private String getCrumb() {
- return Functions.getCrumbRequestField() + "=" + Functions.getCrumb(null);
+ return Functions.getCrumbRequestField() + "=" + Functions.getCrumb((StaplerRequest2) null);
}
private Page post(String relative, String userName) throws Exception {
@@ -116,8 +116,8 @@ private Page post(String relative, String userName) throws Exception {
final WebRequest request = new WebRequest(new URL(client.getContextPath() + relative), HttpMethod.POST);
request.setAdditionalHeader("Accept", client.getBrowserVersion().getHtmlAcceptHeader());
- request.setRequestParameters(
- Arrays.asList(new NameValuePair(Functions.getCrumbRequestField(), Functions.getCrumb(null))));
+ request.setRequestParameters(Arrays.asList(
+ new NameValuePair(Functions.getCrumbRequestField(), Functions.getCrumb((StaplerRequest2) null))));
return client.getPage(request);
}
@@ -141,7 +141,7 @@ public String getUrlName() {
return "testroot";
}
- public void doIndex(StaplerRequest request, StaplerResponse response) throws IOException {
+ public void doIndex(StaplerRequest2 request, StaplerResponse2 response) throws IOException {
visited = true;
response.getWriter().println("OK");
}
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilderTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilderTest.java
index 1f1ef4d95..1b39e0f4c 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilderTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilderTest.java
@@ -20,6 +20,7 @@
import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
import com.cloudbees.plugins.credentials.domains.Domain;
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
+import hudson.model.Descriptor;
import hudson.plugins.git.GitSCM;
import hudson.plugins.git.Revision;
import hudson.plugins.git.UserRemoteConfig;
@@ -82,7 +83,7 @@ public void createGitHubSCMSourceForTest(boolean configuredByUrl, String repoUrl
}
@Before
- public void setUp() throws IOException {
+ public void setUp() throws IOException, Descriptor.FormException {
owner = j.createProject(WorkflowMultiBranchProject.class);
Credentials userPasswordCredential = new UsernamePasswordCredentialsImpl(
CredentialsScope.GLOBAL, "user-pass", null, "git-user", "git-secret");
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
index 4a501b6a0..df9057d09 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
@@ -37,6 +37,7 @@
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
+import hudson.model.Descriptor;
import hudson.model.Item;
import hudson.model.TaskListener;
import hudson.model.User;
@@ -75,8 +76,16 @@ public class GitHubSCMNavigatorTest extends AbstractGitHubWireMockTest {
@Mock
private SCMSourceOwner scmSourceOwner;
- private BaseStandardCredentials credentials = new UsernamePasswordCredentialsImpl(
- CredentialsScope.GLOBAL, "authenticated-user", null, "git-user", "git-secret");
+ private BaseStandardCredentials credentials;
+
+ {
+ try {
+ credentials = new UsernamePasswordCredentialsImpl(
+ CredentialsScope.GLOBAL, "authenticated-user", null, "git-user", "git-secret");
+ } catch (Descriptor.FormException e) {
+ throw new RuntimeException(e);
+ }
+ }
private GitHubSCMNavigator navigator;
From 913311241fa98eccdf243999b4e1270ae81adb29 Mon Sep 17 00:00:00 2001
From: Basil Crow
Date: Mon, 20 Jan 2025 01:26:09 -0800
Subject: [PATCH 03/23] Migrate from EE 8 to EE 9 (#825)
---
.../plugins/github_branch_source/GitHubOrgMetadataAction.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
index 37c170ecf..c2c88d89e 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
@@ -76,7 +76,7 @@ public String getAvatarImageOf(String size) {
String image = avatarIconClassNameImageOf(getAvatarIconClassName(), size);
return image != null
? image
- : (Stapler.getCurrentRequest().getContextPath()
+ : (Stapler.getCurrentRequest2().getContextPath()
+ Hudson.RESOURCE_PATH
+ "/plugin/github-branch-source/images/"
+ "/github-logo.svg");
From 611ea6a2da04f05c5589fb19d4b4ddc58e59328f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 13 Mar 2025 17:10:57 -0700
Subject: [PATCH 04/23] Bump org.jenkins-ci.plugins:plugin from 5.5 to 5.9
(#837)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
pom.xml | 2 +-
.../plugins/github_branch_source/ApiRateLimitChecker.java | 2 --
.../plugins/github_branch_source/GitHubAppCredentials.java | 1 -
.../plugins/github_branch_source/GitHubSCMBuilder.java | 2 --
.../plugins/github_branch_source/PullRequestSCMRevision.java | 2 +-
5 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/pom.xml b/pom.xml
index f68d7ed06..849ed6654 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 5.5
+ 5.9
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
index 57ce199ad..93c0c8de0 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
@@ -1,7 +1,6 @@
package org.jenkinsci.plugins.github_branch_source;
import edu.umd.cs.findbugs.annotations.NonNull;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.Util;
import hudson.model.TaskListener;
import hudson.util.LogTaskListener;
@@ -18,7 +17,6 @@
import org.kohsuke.github.GitHub;
import org.kohsuke.github.RateLimitChecker;
-@SuppressFBWarnings("DMI_RANDOM_USED_ONLY_ONCE") // https://github.com/spotbugs/spotbugs/issues/1539
public enum ApiRateLimitChecker {
/** Attempt to evenly distribute GitHub API requests. */
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
index 0c2927aa2..d210a2911 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
@@ -82,7 +82,6 @@ public class GitHubAppCredentials extends BaseStandardCredentials implements Sta
private String apiUri;
- @SuppressFBWarnings(value = "IS2_INCONSISTENT_SYNC", justification = "#withOwner locking only for #byOwner")
private String owner;
private transient AppInstallationToken cachedToken;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
index 44bd2ee37..b677f0aeb 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
@@ -32,7 +32,6 @@
import com.cloudbees.plugins.credentials.domains.URIRequirementBuilder;
import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.model.Item;
import hudson.model.Queue;
import hudson.plugins.git.GitSCM;
@@ -59,7 +58,6 @@
*
* @since 2.2.0
*/
-@SuppressFBWarnings("DMI_RANDOM_USED_ONLY_ONCE") // https://github.com/spotbugs/spotbugs/issues/1539
public class GitHubSCMBuilder extends GitSCMBuilder {
private static final Random ENTROPY = new Random();
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
index 9931447a9..9c3cddfea 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
@@ -58,7 +58,7 @@ public PullRequestSCMRevision(
this.mergeHash = mergeHash;
}
- @SuppressFBWarnings({"SE_PRIVATE_READ_RESOLVE_NOT_INHERITED", "RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"})
+ @SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
private Object readResolve() {
if (getTarget() == null) {
// fix an instance prior to the type migration, thankfully we have all the required info
From d3867245f290b37bc905160beb880eca18481210 Mon Sep 17 00:00:00 2001
From: Allan Burdajewicz
Date: Mon, 24 Mar 2025 17:57:16 +1000
Subject: [PATCH 05/23] [JENKINS-75471] Add test to reproduce exception in
SCMSource observer
---
.../GitHubSCMNavigatorTest.java | 37 +++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
index df9057d09..f2b8d395a 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java
@@ -47,6 +47,7 @@
import hudson.security.SecurityRealm;
import hudson.util.ListBoxModel;
import hudson.util.LogTaskListener;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -460,6 +461,42 @@ public void appliesFilters() throws Exception {
assertEquals(projectNames, Collections.singleton("yolo"));
}
+ @Test
+ public void fetchBadRepo() throws Exception {
+ final Set projectNames = new HashSet<>();
+ final SCMSourceObserver observer = new SCMSourceObserver() {
+ @NonNull
+ @Override
+ public SCMSourceOwner getContext() {
+ return scmSourceOwner;
+ }
+
+ @NonNull
+ @Override
+ public TaskListener getListener() {
+ return new LogTaskListener(Logger.getAnonymousLogger(), Level.INFO);
+ }
+
+ @NonNull
+ @Override
+ public ProjectObserver observe(@NonNull String projectName) throws IllegalArgumentException, IOException {
+ if ("basic".equalsIgnoreCase(projectName)) {
+ throw new IOException("Failed to get repo basic");
+ }
+ projectNames.add(projectName);
+ return new NoOpProjectObserver();
+ }
+
+ @Override
+ public void addAttribute(@NonNull String key, @Nullable Object value)
+ throws IllegalArgumentException, ClassCastException {}
+ };
+
+ navigator.visitSources(SCMSourceObserver.filter(observer, "basic", "yolo"));
+
+ assertThat(projectNames, containsInAnyOrder("yolo"));
+ }
+
@Test
public void fetchActions() throws Exception {
assertThat(
From 5e36d7cb6e4c6c54588e29d960fa6844bdbf9785 Mon Sep 17 00:00:00 2001
From: Allan Burdajewicz
Date: Tue, 25 Mar 2025 15:01:21 +1000
Subject: [PATCH 06/23] [JENKINS-75471] Add test to reproduce exception in
SCMSource observer
---
.../GitHubSCMNavigator.java | 179 ++++++++++--------
1 file changed, 101 insertions(+), 78 deletions(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
index 6dc522c57..bac837f40 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
@@ -39,6 +39,7 @@
import hudson.AbortException;
import hudson.Extension;
import hudson.ExtensionList;
+import hudson.Functions;
import hudson.RestrictedSince;
import hudson.Util;
import hudson.console.HyperlinkNote;
@@ -1034,50 +1035,60 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
continue; // ignore repos in other orgs when using GHMyself
}
- if (repo.isArchived() && gitHubSCMNavigatorContext.isExcludeArchivedRepositories()) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is archived",
- repo.getName())));
-
- } else if (!topicMatches(gitHubSCMNavigatorContext, repo, listener.getLogger())) {
- // exclude repositories which are missing one or more of the specified topics
- witness.record(repo.getName(), false);
- } else if (!repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePublicRepositories()) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is public",
- repo.getName())));
- } else if (repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePrivateRepositories()) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is private",
- repo.getName())));
- } else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
- && repo.getSource() != null) {
- witness.record(repo.getName(), false);
+ try {
+ if (repo.isArchived() && gitHubSCMNavigatorContext.isExcludeArchivedRepositories()) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is archived",
+ repo.getName())));
+
+ } else if (!topicMatches(gitHubSCMNavigatorContext, repo, listener.getLogger())) {
+ // exclude repositories which are missing one or more of the specified topics
+ witness.record(repo.getName(), false);
+ } else if (!repo.isPrivate()
+ && gitHubSCMNavigatorContext.isExcludePublicRepositories()) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is public",
+ repo.getName())));
+ } else if (repo.isPrivate()
+ && gitHubSCMNavigatorContext.isExcludePrivateRepositories()) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is private",
+ repo.getName())));
+ } else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
+ && repo.getSource() != null) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is a fork",
+ repo.getName())));
+ } else if (request.process(repo.getName(), sourceFactory, null, witness)) {
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "%d repositories were processed (query completed)",
+ witness.getCount())));
+ }
+ } catch (Exception e) {
listener.getLogger()
.println(GitHubConsoleNote.create(
System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is a fork",
- repo.getName())));
- } else if (request.process(repo.getName(), sourceFactory, null, witness)) {
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "%d repositories were processed (query completed)",
- witness.getCount())));
+ String.format("Error while processing repository %s", repo.getName())));
+ Functions.printStackTrace(e, listener.getLogger());
}
}
listener.getLogger()
@@ -1117,48 +1128,60 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
repositories = org.listRepositories(100);
}
for (GHRepository repo : repositories) {
- if (repo.isArchived() && gitHubSCMNavigatorContext.isExcludeArchivedRepositories()) {
- // exclude archived repositories
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is archived", repo.getName())));
- } else if (!topicMatches(gitHubSCMNavigatorContext, repo, listener.getLogger())) {
- // exclude repositories which are missing one or more of the specified topics
- witness.record(repo.getName(), false);
- } else if (!repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePublicRepositories()) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is public", repo.getName())));
+ try {
+ if (repo.isArchived() && gitHubSCMNavigatorContext.isExcludeArchivedRepositories()) {
+ // exclude archived repositories
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is archived",
+ repo.getName())));
+ } else if (!topicMatches(gitHubSCMNavigatorContext, repo, listener.getLogger())) {
+ // exclude repositories which are missing one or more of the specified topics
+ witness.record(repo.getName(), false);
+ } else if (!repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePublicRepositories()) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is public",
+ repo.getName())));
- } else if (repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePrivateRepositories()) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is private", repo.getName())));
+ } else if (repo.isPrivate() && gitHubSCMNavigatorContext.isExcludePrivateRepositories()) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is private",
+ repo.getName())));
- } else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
- && repo.getSource() != null) {
- witness.record(repo.getName(), false);
- listener.getLogger()
- .println(GitHubConsoleNote.create(
- System.currentTimeMillis(),
- String.format(
- "Skipping repository %s because it is a fork", repo.getName())));
- } else if (request.process(repo.getName(), sourceFactory, null, witness)) {
+ } else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
+ && repo.getSource() != null) {
+ witness.record(repo.getName(), false);
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "Skipping repository %s because it is a fork",
+ repo.getName())));
+ } else if (request.process(repo.getName(), sourceFactory, null, witness)) {
+ listener.getLogger()
+ .println(GitHubConsoleNote.create(
+ System.currentTimeMillis(),
+ String.format(
+ "%d repositories were processed (query completed)",
+ witness.getCount())));
+ }
+ } catch (Exception e) {
listener.getLogger()
.println(GitHubConsoleNote.create(
System.currentTimeMillis(),
- String.format(
- "%d repositories were processed (query completed)",
- witness.getCount())));
+ String.format("Error while processing repository %s", repo.getName())));
+ Functions.printStackTrace(e, listener.getLogger());
}
}
listener.getLogger()
From b3c14ff31942fca96fe5bd8dec919f9861ab0788 Mon Sep 17 00:00:00 2001
From: Allan Burdajewicz
Date: Thu, 27 Mar 2025 13:19:06 +1000
Subject: [PATCH 07/23] [JENKINS-75471] Catch IOException
---
.../plugins/github_branch_source/GitHubSCMNavigator.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
index bac837f40..9f6aa8f58 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
@@ -1083,7 +1083,7 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
"%d repositories were processed (query completed)",
witness.getCount())));
}
- } catch (Exception e) {
+ } catch (IOException e) {
listener.getLogger()
.println(GitHubConsoleNote.create(
System.currentTimeMillis(),
@@ -1176,7 +1176,7 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
"%d repositories were processed (query completed)",
witness.getCount())));
}
- } catch (Exception e) {
+ } catch (IOException e) {
listener.getLogger()
.println(GitHubConsoleNote.create(
System.currentTimeMillis(),
From ffcfdcffada3605fe1971ad0e226c0920569b0b9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 8 Apr 2025 01:50:01 +0000
Subject: [PATCH 08/23] Bump org.jenkins-ci.plugins:plugin from 5.9 to 5.10
Bumps [org.jenkins-ci.plugins:plugin](https://github.com/jenkinsci/plugin-pom) from 5.9 to 5.10.
- [Release notes](https://github.com/jenkinsci/plugin-pom/releases)
- [Changelog](https://github.com/jenkinsci/plugin-pom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jenkinsci/plugin-pom/compare/plugin-5.9...plugin-5.10)
---
updated-dependencies:
- dependency-name: org.jenkins-ci.plugins:plugin
dependency-version: '5.10'
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 849ed6654..68b07df8a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 5.9
+ 5.10
From 29c728685d2142186c433bd6aa5b20dfb789a39a Mon Sep 17 00:00:00 2001
From: strangelookingnerd
<49242855+strangelookingnerd@users.noreply.github.com>
Date: Wed, 9 Apr 2025 17:26:06 +0200
Subject: [PATCH 09/23] Migrate from com.github.tomakehurst to org.wiremock
---
pom.xml | 12 ++++++------
.../github_branch_source/GitHubSCMProbeTest.java | 7 ++-----
2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/pom.xml b/pom.xml
index 849ed6654..c583d23a9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,12 +85,6 @@
org.jenkins-ci.plugins.workflow
workflow-support
-
- com.github.tomakehurst
- wiremock-jre8-standalone
- 2.35.2
- test
-
io.jenkins
configuration-as-code
@@ -139,6 +133,12 @@
mockito-core
test
+
+ org.wiremock
+ wiremock-standalone
+ 3.12.1
+ test
+
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbeTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbeTest.java
index 63917dacd..545600ddc 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbeTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMProbeTest.java
@@ -4,7 +4,6 @@
import static org.junit.Assert.*;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
-import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer;
import com.github.tomakehurst.wiremock.http.RequestMethod;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
@@ -32,10 +31,8 @@ public class GitHubSCMProbeTest {
public WireMockRule githubApi = factory.getRule(WireMockConfiguration.options()
.dynamicPort()
.usingFilesUnderClasspath("cache_failure")
- .extensions(ResponseTemplateTransformer.builder()
- .global(true)
- .maxCacheEntries(0L)
- .build()));
+ .globalTemplating(true)
+ .withMaxTemplateCacheEntries(0L));
private GitHubSCMProbe probe;
From fa7d4120f9c2f7b600fe3f3f8e477b7587a42e0b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 28 Apr 2025 17:00:55 +0200
Subject: [PATCH 10/23] Bump org.jenkins-ci.plugins:plugin from 5.10 to 5.12
(#849)
Bumps [org.jenkins-ci.plugins:plugin](https://github.com/jenkinsci/plugin-pom) from 5.10 to 5.12.
- [Release notes](https://github.com/jenkinsci/plugin-pom/releases)
- [Changelog](https://github.com/jenkinsci/plugin-pom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jenkinsci/plugin-pom/compare/plugin-5.10...plugin-5.12)
---
updated-dependencies:
- dependency-name: org.jenkins-ci.plugins:plugin
dependency-version: '5.12'
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index f74b67e59..cb7ebf2cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 5.10
+ 5.12
From 8eca7762ccc2ad40c8ea7252aa579dc5a10105cb Mon Sep 17 00:00:00 2001
From: Vishal Wagh <169045855+vwagh-dev@users.noreply.github.com>
Date: Thu, 29 May 2025 14:07:55 +0530
Subject: [PATCH 11/23] Fixed issue while validating the multibranch pipeline
configuration on valid repo url
---
.../plugins/github_branch_source/GitHubSCMSource.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
index 0a5570f69..9ec85f1b8 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
@@ -2135,9 +2135,9 @@ public FormValidation doValidateRepositoryUrlAndCredentials(
} catch (IllegalArgumentException e) {
return FormValidation.error(e, e.getMessage());
}
-
+ final String repoOwnerOrDefault = StringUtils.isBlank(repoOwner) ? info.getRepoOwner() : repoOwner;
StandardCredentials credentials =
- Connector.lookupScanCredentials(context, info.getApiUri(), credentialsId, repoOwner);
+ Connector.lookupScanCredentials(context, info.getApiUri(), credentialsId, repoOwnerOrDefault);
StringBuilder sb = new StringBuilder();
try {
GitHub github = Connector.connect(info.getApiUri(), credentials);
From 86d11d6e9e78284ebcb75b5f28e61ba9faf19e59 Mon Sep 17 00:00:00 2001
From: Markus Winter
Date: Thu, 5 Jun 2025 19:04:25 +0200
Subject: [PATCH 12/23] Use symbol for scm navigator
The symbol ensures that command palette will show the symbol and not
fall back to a default icon.
---
.../plugins/github_branch_source/GitHubSCMNavigator.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
index 9f6aa8f58..736cefa9b 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
@@ -1757,7 +1757,7 @@ public String getIconFilePathPattern() {
/** {@inheritDoc} */
@Override
public String getIconClassName() {
- return "icon-github-scm-navigator";
+ return "symbol-logo-github plugin-ionicons-api";
}
/** {@inheritDoc} */
From 85cd48516c503fbdceac4fc93459c01969648641 Mon Sep 17 00:00:00 2001
From: strangelookingnerd
Date: Wed, 22 Jan 2025 15:37:10 +0100
Subject: [PATCH 13/23] Remove useBeta property from pom.xml
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index cb7ebf2cf..e5ea43e07 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,8 +35,8 @@
2.2.0
2.479
- ${jenkins.baseline}.1
- true
+
+ 2.494-rc35897.1f8edd4c1651
false
From 9c755584ed865d6b5868527c862431bf9ba2ec57 Mon Sep 17 00:00:00 2001
From: strangelookingnerd
<49242855+strangelookingnerd@users.noreply.github.com>
Date: Wed, 29 Jan 2025 09:36:55 +0100
Subject: [PATCH 14/23] Bump jenkins.version to 2.495
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e5ea43e07..ac0c2be1f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
2.479
- 2.494-rc35897.1f8edd4c1651
+ 2.495
false
From be6cae19995b3827073a6e9c6786890687d1950a Mon Sep 17 00:00:00 2001
From: strangelookingnerd
<49242855+strangelookingnerd@users.noreply.github.com>
Date: Thu, 26 Jun 2025 14:32:34 +0200
Subject: [PATCH 15/23] Bump baseline and bom
---
pom.xml | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/pom.xml b/pom.xml
index ac0c2be1f..97e387cb1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,9 +34,8 @@
jenkinsci/${project.artifactId}-plugin
2.2.0
- 2.479
-
- 2.495
+ 2.504
+ ${jenkins.baseline}.1
false
@@ -45,7 +44,7 @@
io.jenkins.tools.bom
bom-${jenkins.baseline}.x
- 3893.v213a_42768d35
+ 4948.vcf1d17350668
pom
import
From 185c89831662e46958f301089fe81c26a42a24a5 Mon Sep 17 00:00:00 2001
From: Allan Burdajewicz
Date: Fri, 18 Jul 2025 13:22:35 +1000
Subject: [PATCH 16/23] [JENKINS-73791] Prevent PR 404 on details to break
Branches scan (#811)
* [JENKINS-73791] Adap test for Branch exclude merge scenario
* [JENKINS-73791] Validate PR earlier to prevent branch scan interruptions
---
.../github_branch_source/GitHubSCMSource.java | 28 +++++++++----------
.../GitHubSCMSourceTest.java | 5 ++++
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
index 9ec85f1b8..dc6271e18 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
@@ -1053,6 +1053,19 @@ public GHPermissionType fetch(String username) throws IOException, InterruptedEx
}
});
+ if (request.isFetchPRs()) {
+ // JENKINS-56996 / JENKINS-73791
+ // PRs are one the most error prone areas for scans
+ // Branches and tags are contained only the current repo, PRs go across forks
+ // FileNotFoundException can occur in a number of situations
+ // When this happens, it is not ideal behavior but it is better to let the PR be
+ // orphaned
+ // and the orphan strategy control the result than for this error to stop scanning
+ // (For Org scanning this is particularly important.)
+ // If some more general IO exception is thrown, we will still fail.
+ validatePullRequests(request);
+ }
+
if (request.isFetchBranches()
&& !request.isComplete()
&& this.shouldRetrieve(observer, event, BranchSCMHead.class)) {
@@ -1067,6 +1080,7 @@ public GHPermissionType fetch(String username) throws IOException, InterruptedEx
HyperlinkNote.encodeTo(
resolvedRepositoryUrl + "/tree/" + branchName, branchName));
BranchSCMHead head = new BranchSCMHead(branchName);
+
if (request.process(
head,
new SCMRevisionImpl(head, branch.getSHA1()),
@@ -1081,8 +1095,6 @@ public SCMSourceCriteria.Probe create(
}
},
new CriteriaWitness(listener))) {
- listener.getLogger()
- .format("%n %d branches were processed (query completed)%n", count);
break;
}
}
@@ -1095,18 +1107,6 @@ public SCMSourceCriteria.Probe create(
int count = 0;
int errorCount = 0;
Map> strategies = request.getPRStrategies();
-
- // JENKINS-56996
- // PRs are one the most error prone areas for scans
- // Branches and tags are contained only the current repo, PRs go across forks
- // FileNotFoundException can occur in a number of situations
- // When this happens, it is not ideal behavior but it is better to let the PR be
- // orphaned
- // and the orphan strategy control the result than for this error to stop scanning
- // (For Org scanning this is particularly important.)
- // If some more general IO exception is thrown, we will still fail.
-
- validatePullRequests(request);
for (final GHPullRequest pr : request.getPullRequests()) {
int number = pr.getNumber();
try {
diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSourceTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSourceTest.java
index 1a58db43e..77666a076 100644
--- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSourceTest.java
+++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSourceTest.java
@@ -375,6 +375,11 @@ public boolean isHead(@NonNull Probe probe, @NonNull TaskListener listener) thro
@Test
public void fetchSmokes_badUser() throws Exception {
+ source.setTraits(Arrays.asList(
+ new BranchDiscoveryTrait(true, false),
+ new ForkPullRequestDiscoveryTrait(
+ EnumSet.of(ChangeRequestCheckoutStrategy.MERGE),
+ new ForkPullRequestDiscoveryTrait.TrustContributors())));
// make it so PR-2 returns a file not found for user
githubApi.stubFor(get(urlMatching("(/api/v3)?/repos/cloudbeers/yolo/pulls/2"))
.inScenario("Pull Request Merge Hash")
From f4fba8aee1f6eff513d1708b976ee7f3f1029bfc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 12 Jun 2025 01:52:02 +0000
Subject: [PATCH 17/23] Bump org.wiremock:wiremock-standalone from 3.12.1 to
3.13.1
Bumps [org.wiremock:wiremock-standalone](https://github.com/wiremock/wiremock) from 3.12.1 to 3.13.1.
- [Release notes](https://github.com/wiremock/wiremock/releases)
- [Commits](https://github.com/wiremock/wiremock/compare/3.12.1...3.13.1)
---
updated-dependencies:
- dependency-name: org.wiremock:wiremock-standalone
dependency-version: 3.13.1
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 97e387cb1..807ef6273 100644
--- a/pom.xml
+++ b/pom.xml
@@ -135,7 +135,7 @@
org.wiremock
wiremock-standalone
- 3.12.1
+ 3.13.1
test
From 8146a4c89f8ef18bdc223787f80fa69da4bc9d36 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 1 Jul 2025 05:10:41 +0000
Subject: [PATCH 18/23] Bump org.jenkins-ci.plugins:plugin from 5.12 to 5.18
Bumps [org.jenkins-ci.plugins:plugin](https://github.com/jenkinsci/plugin-pom) from 5.12 to 5.18.
- [Release notes](https://github.com/jenkinsci/plugin-pom/releases)
- [Changelog](https://github.com/jenkinsci/plugin-pom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jenkinsci/plugin-pom/compare/plugin-5.12...plugin-5.18)
---
updated-dependencies:
- dependency-name: org.jenkins-ci.plugins:plugin
dependency-version: '5.18'
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 807ef6273..8fe8a5b9a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 5.12
+ 5.18
From ce7905e1aa7e166a2c1fbd45bae521f7fc758e84 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 18 Jul 2025 03:36:59 +0000
Subject: [PATCH 19/23] Bump org.awaitility:awaitility from 4.2.2 to 4.3.0
Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.2 to 4.3.0.
- [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt)
- [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.2...awaitility-4.3.0)
---
updated-dependencies:
- dependency-name: org.awaitility:awaitility
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 8fe8a5b9a..fbbb2c38b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,7 +102,7 @@
org.awaitility
awaitility
- 4.2.2
+ 4.3.0
test
From 77b6542df5a8b10fe7d0ed6aa2b9a56dce8059ee Mon Sep 17 00:00:00 2001
From: Basil Crow
Date: Tue, 29 Jul 2025 20:04:26 -0700
Subject: [PATCH 20/23] Upgrade Commons Lang from 2 to 3 (#874)
---
pom.xml | 4 ++++
.../plugins/github_branch_source/ApiRateLimitChecker.java | 2 +-
.../jenkinsci/plugins/github_branch_source/Connector.java | 2 +-
.../jenkinsci/plugins/github_branch_source/Endpoint.java | 2 +-
.../plugins/github_branch_source/GitHubConfiguration.java | 2 +-
.../github_branch_source/GitHubOrgMetadataAction.java | 2 +-
.../plugins/github_branch_source/GitHubRepositoryInfo.java | 4 ++--
.../plugins/github_branch_source/GitHubSCMBuilder.java | 2 +-
.../plugins/github_branch_source/GitHubSCMFileSystem.java | 2 +-
.../plugins/github_branch_source/GitHubSCMNavigator.java | 2 +-
.../plugins/github_branch_source/GitHubSCMSource.java | 6 +++---
.../github_branch_source/PullRequestSCMRevision.java | 2 +-
.../plugins/github_branch_source/SSHCheckoutTrait.java | 2 +-
13 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/pom.xml b/pom.xml
index fbbb2c38b..645d9f1e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,10 @@
io.jenkins.plugins
caffeine-api
+
+ io.jenkins.plugins
+ commons-lang3-api
+
io.jenkins.plugins
ionicons-api
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
index 93c0c8de0..41f0deb8f 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/ApiRateLimitChecker.java
@@ -11,7 +11,7 @@
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.jenkinsci.plugins.github.config.GitHubServerConfig;
import org.kohsuke.github.GHRateLimit;
import org.kohsuke.github.GitHub;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/Connector.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/Connector.java
index 8bb1b338a..9915d2318 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/Connector.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/Connector.java
@@ -75,7 +75,7 @@
import jenkins.util.SystemProperties;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.jenkinsci.plugins.gitclient.GitClient;
import org.jenkinsci.plugins.github.config.GitHubServerConfig;
import org.kohsuke.github.GHAppInstallationToken;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/Endpoint.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/Endpoint.java
index 8c6539002..0669a5444 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/Endpoint.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/Endpoint.java
@@ -42,7 +42,7 @@
import java.util.logging.Logger;
import jenkins.model.Jenkins;
import jenkins.scm.api.SCMName;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.github.GitHub;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
index 54bd14fda..f06c109b2 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubConfiguration.java
@@ -41,7 +41,7 @@
import jenkins.model.GlobalConfiguration;
import jenkins.model.Jenkins;
import net.sf.json.JSONObject;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.kohsuke.stapler.StaplerRequest2;
@Extension
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
index c2c88d89e..284f00f69 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubOrgMetadataAction.java
@@ -32,7 +32,7 @@
import java.io.ObjectStreamException;
import java.util.Objects;
import jenkins.scm.api.metadata.AvatarMetadataAction;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.kohsuke.github.GHUser;
import org.kohsuke.stapler.Stapler;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubRepositoryInfo.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubRepositoryInfo.java
index db74b0720..9302e863f 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubRepositoryInfo.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubRepositoryInfo.java
@@ -24,13 +24,13 @@
package org.jenkinsci.plugins.github_branch_source;
-import static org.apache.commons.lang.StringUtils.removeEnd;
+import static org.apache.commons.lang3.StringUtils.removeEnd;
import static org.jenkinsci.plugins.github_branch_source.GitHubSCMSource.GITHUB_COM;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.net.MalformedURLException;
import java.net.URL;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
/**
* Used to compute values for GitHubSCMSource from a user-specified repository URL.
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
index b677f0aeb..962b9707e 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMBuilder.java
@@ -48,7 +48,7 @@
import jenkins.scm.api.SCMRevision;
import jenkins.scm.api.SCMSourceOwner;
import jenkins.scm.api.mixin.TagSCMHead;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.transport.RefSpec;
import org.jenkinsci.plugins.github.config.GitHubServerConfig;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystem.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystem.java
index cdecf79ea..e3bd1a01e 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystem.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMFileSystem.java
@@ -46,7 +46,7 @@
import jenkins.scm.api.SCMRevision;
import jenkins.scm.api.SCMSource;
import jenkins.scm.api.SCMSourceDescriptor;
-import org.apache.commons.lang.time.FastDateFormat;
+import org.apache.commons.lang3.time.FastDateFormat;
import org.kohsuke.github.GHCommit;
import org.kohsuke.github.GHRef;
import org.kohsuke.github.GHRepository;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
index 736cefa9b..1d065cc75 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java
@@ -91,7 +91,7 @@
import jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait;
import jenkins.util.SystemProperties;
import net.jcip.annotations.GuardedBy;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.jenkins.ui.icon.Icon;
import org.jenkins.ui.icon.IconFormat;
import org.jenkins.ui.icon.IconSet;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
index dc6271e18..d04959b23 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
@@ -26,8 +26,8 @@
import static hudson.Functions.isWindows;
import static hudson.model.Items.XSTREAM2;
-import static org.apache.commons.lang.StringUtils.isBlank;
-import static org.apache.commons.lang.StringUtils.removeEnd;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+import static org.apache.commons.lang3.StringUtils.removeEnd;
import static org.jenkinsci.plugins.github_branch_source.Connector.isCredentialValid;
import static org.jenkinsci.plugins.github_branch_source.GitHubSCMBuilder.API_V3;
import static org.jenkinsci.plugins.github_branch_source.GitHubSCMBuilder.HTTPS;
@@ -117,7 +117,7 @@
import jenkins.scm.impl.trait.Selection;
import jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait;
import jenkins.util.SystemProperties;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.eclipse.jgit.lib.Constants;
import org.jenkinsci.Symbol;
import org.jenkinsci.plugins.github.config.GitHubServerConfig;
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
index 9c3cddfea..afce906e5 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/PullRequestSCMRevision.java
@@ -32,7 +32,7 @@
import jenkins.scm.api.mixin.ChangeRequestCheckoutStrategy;
import jenkins.scm.api.mixin.ChangeRequestSCMHead2;
import jenkins.scm.api.mixin.ChangeRequestSCMRevision;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.kohsuke.stapler.export.Exported;
/** Revision of a pull request. */
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTrait.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTrait.java
index 67ecdad4b..de6a6d00f 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTrait.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/SSHCheckoutTrait.java
@@ -47,7 +47,7 @@
import jenkins.scm.api.trait.SCMSourceContext;
import jenkins.scm.api.trait.SCMSourceTrait;
import jenkins.scm.api.trait.SCMSourceTraitDescriptor;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.jenkinsci.Symbol;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
From 857721ea74c652835e8e34e6fd1311a45877b9f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Iv=C3=A1n=20Garrido?=
<63926082+IvanGasant@users.noreply.github.com>
Date: Thu, 31 Jul 2025 18:54:33 +0200
Subject: [PATCH 21/23] [JENKINS-75704] Fix Copilot user null name/email
handling (#864)
---
.../github_branch_source/GitHubSCMSource.java | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
index d04959b23..550cb4146 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMSource.java
@@ -2572,17 +2572,24 @@ public void observe(GHPullRequest pr) {
GHUser user = null;
try {
user = pr.getUser();
- if (users.containsKey(user.getLogin())) {
- // looked up this user already
- user = users.get(user.getLogin());
+ String login = user.getLogin();
+ if ("copilot".equalsIgnoreCase(login)) {
+ ContributorMetadataAction contributor =
+ new ContributorMetadataAction("copilot", "copilot", "copilot@unknown.user");
+ pullRequestContributorCache.put(number, contributor);
+ users.put("copilot", user);
+ } else {
+ if (users.containsKey(login)) {
+ // looked up this user already
+ user = users.get(login);
+ }
+ ContributorMetadataAction contributor =
+ new ContributorMetadataAction(login, user.getName(), user.getEmail());
+ // store the populated user record now that we have it
+ pullRequestContributorCache.put(number, contributor);
+ users.put(login, user);
}
- ContributorMetadataAction contributor =
- new ContributorMetadataAction(user.getLogin(), user.getName(), user.getEmail());
- pullRequestContributorCache.put(number, contributor);
- // store the populated user record now that we have it
- users.put(user.getLogin(), user);
} catch (FileNotFoundException e) {
- // If file not found for user, warn but keep going
request.listener()
.getLogger()
.format(
From 68f4865ed2cf26f92848ffbfa444c0f2135c5d3a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Aug 2025 01:30:53 +0000
Subject: [PATCH 22/23] Bump org.jenkins-ci.plugins:plugin from 5.18 to 5.19
Bumps [org.jenkins-ci.plugins:plugin](https://github.com/jenkinsci/plugin-pom) from 5.18 to 5.19.
- [Release notes](https://github.com/jenkinsci/plugin-pom/releases)
- [Changelog](https://github.com/jenkinsci/plugin-pom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jenkinsci/plugin-pom/compare/plugin-5.18...plugin-5.19)
---
updated-dependencies:
- dependency-name: org.jenkins-ci.plugins:plugin
dependency-version: '5.19'
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 645d9f1e7..515b630a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.jenkins-ci.plugins
plugin
- 5.18
+ 5.19
From f7e0ff13626ec01620b8a559c75eb8f570dd9106 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Pochat?=
Date: Tue, 19 Aug 2025 13:53:47 +0200
Subject: [PATCH 23/23] Suppressing unnecessary annotation
---
.../plugins/github_branch_source/GitHubAppCredentials.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
index 4dc65d3f8..d2a2886e3 100644
--- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
+++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubAppCredentials.java
@@ -103,7 +103,6 @@ public class GitHubAppCredentials extends BaseStandardCredentials implements Sta
private String apiUri;
- @SuppressFBWarnings(value = "IS2_INCONSISTENT_SYNC", justification = "#withOwner locking only for #byOwner")
@Deprecated
private String owner;