From b39eda447353d0590835f3c3aed77e7d82a820ea Mon Sep 17 00:00:00 2001 From: qizhicheng Date: Mon, 3 Apr 2023 20:11:40 +0800 Subject: [PATCH 1/2] get credential using findCredentialById, passing context --- .../plugins/checks/github/GitHubChecksContext.java | 1 - .../java/io/jenkins/plugins/checks/github/SCMFacade.java | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/checks/github/GitHubChecksContext.java b/src/main/java/io/jenkins/plugins/checks/github/GitHubChecksContext.java index e34f5c34..03fc5f74 100644 --- a/src/main/java/io/jenkins/plugins/checks/github/GitHubChecksContext.java +++ b/src/main/java/io/jenkins/plugins/checks/github/GitHubChecksContext.java @@ -3,7 +3,6 @@ import java.util.Optional; import org.apache.commons.lang3.StringUtils; - import edu.hm.hafner.util.FilteredLog; import edu.umd.cs.findbugs.annotations.CheckForNull; diff --git a/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java b/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java index c6b64605..f42a686f 100644 --- a/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java +++ b/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java @@ -2,6 +2,7 @@ import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.domains.URIRequirementBuilder; import edu.umd.cs.findbugs.annotations.CheckForNull; import hudson.model.AbstractProject; import hudson.model.Job; @@ -10,7 +11,6 @@ import hudson.plugins.git.UserRemoteConfig; import hudson.scm.NullSCM; import hudson.scm.SCM; -import hudson.security.ACL; import jenkins.plugins.git.AbstractGitSCMSource; import jenkins.plugins.git.GitSCMSource; import jenkins.scm.api.SCMHead; @@ -123,8 +123,11 @@ UserRemoteConfig getUserRemoteConfig(final GitSCM scm) { * @return the found GitHub App credentials or empty */ public Optional findGitHubAppCredentials(final Job job, final String credentialsId) { - List credentials = CredentialsProvider.lookupCredentials( - GitHubAppCredentials.class, job, ACL.SYSTEM, Collections.emptyList()); + List credentials = Collections.singletonList(CredentialsProvider.findCredentialById( + credentialsId, + GitHubAppCredentials.class, + job.getLastBuild(), + URIRequirementBuilder.fromUri(getUserRemoteConfig((GitSCM) this.getScm(job)).getUrl()).build())); GitHubAppCredentials appCredentials = CredentialsMatchers.firstOrNull(credentials, CredentialsMatchers.withId(credentialsId)); return Optional.ofNullable(appCredentials); From fbfc326a135aaf405eb3a41061dcf157694e4c40 Mon Sep 17 00:00:00 2001 From: qizhicheng Date: Tue, 4 Apr 2023 00:22:13 +0800 Subject: [PATCH 2/2] fallback to build if gitscm not found in job --- .../jenkins/plugins/checks/github/SCMFacade.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java b/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java index f42a686f..90c5b698 100644 --- a/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java +++ b/src/main/java/io/jenkins/plugins/checks/github/SCMFacade.java @@ -2,6 +2,7 @@ import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.CredentialsProvider; +import com.cloudbees.plugins.credentials.domains.DomainRequirement; import com.cloudbees.plugins.credentials.domains.URIRequirementBuilder; import edu.umd.cs.findbugs.annotations.CheckForNull; import hudson.model.AbstractProject; @@ -123,16 +124,29 @@ UserRemoteConfig getUserRemoteConfig(final GitSCM scm) { * @return the found GitHub App credentials or empty */ public Optional findGitHubAppCredentials(final Job job, final String credentialsId) { + List repoUrl = getDomainRequirements(job); List credentials = Collections.singletonList(CredentialsProvider.findCredentialById( credentialsId, GitHubAppCredentials.class, job.getLastBuild(), - URIRequirementBuilder.fromUri(getUserRemoteConfig((GitSCM) this.getScm(job)).getUrl()).build())); + repoUrl)); GitHubAppCredentials appCredentials = CredentialsMatchers.firstOrNull(credentials, CredentialsMatchers.withId(credentialsId)); return Optional.ofNullable(appCredentials); } + private List getDomainRequirements(Job job) { + Optional scmFromJob = findGitSCM(job); + Optional scmFromBuild = findGitSCM(job.getLastBuild()); + List repoUrl = null; + if (scmFromJob.isPresent()) { + repoUrl = URIRequirementBuilder.fromUri(getUserRemoteConfig(scmFromJob.get()).getUrl()).build(); + } else if (scmFromBuild.isPresent()) { + repoUrl = URIRequirementBuilder.fromUri(getUserRemoteConfig(scmFromBuild.get()).getUrl()).build(); + } + return repoUrl; + } + /** * Find {@link SCMHead} (or branch) used by the {@code job}. *