From 44f1834076f8ab1089b0f8f6f2552ca60919a9b4 Mon Sep 17 00:00:00 2001 From: lprimak Date: Thu, 8 Sep 2022 22:47:35 -0400 Subject: [PATCH 1/3] Revert "Fixes issue #32" This reverts commit 54433e98fc03deafad2b7419861c07851c2ed8ee. --- .../IssueCommentGHEventSubscriber.java | 4 +--- .../github_pr_comment_build/PRReviewGHEventSubscriber.java | 3 +-- .../github_pr_comment_build/PRUpdateGHEventSubscriber.java | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java index bba41ee..31f2ae1 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java @@ -125,7 +125,6 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; - topLevel: for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -166,14 +165,13 @@ public void run() { changedRepository.getRepositoryName() } ); - break topLevel; } else { LOGGER.log(Level.FINER, "Issue comment does not match the trigger build string ({0}) for {1}", new Object[] { expectedCommentBody, job.getFullName() } ); - break; } + break; } if (!propFound) { diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java index e5d6c64..345fa0d 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java @@ -98,7 +98,6 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; - topLevel: for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -125,7 +124,7 @@ public void run() { propFound = true; ParameterizedJobMixIn.scheduleBuild2(job, 0, new CauseAction(new GitHubPullRequestReviewCause(pullRequestUrl))); - break topLevel; + break; } if (!propFound) { diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java index 459aef1..4447ae4 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java @@ -113,7 +113,6 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; - topLevel: for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -140,7 +139,7 @@ public void run() { propFound = true; ParameterizedJobMixIn.scheduleBuild2(job, 0, new CauseAction(new GitHubPullRequestUpdateCause(pullRequestUrl))); - break topLevel; + break; } if (!propFound) { From e9234b603e8f9962ad2e15fe89e595d80e00c3f5 Mon Sep 17 00:00:00 2001 From: lprimak Date: Thu, 8 Sep 2022 22:59:01 -0400 Subject: [PATCH 2/3] making sure the jobs are unique before submitting fixes the root causes of #27 and #32 and allows multiple jobs to be run --- .../IssueCommentGHEventSubscriber.java | 22 ++++++++++++------- .../PRReviewGHEventSubscriber.java | 10 +++++++-- .../PRUpdateGHEventSubscriber.java | 10 +++++++-- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java index 31f2ae1..93f5b86 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java @@ -24,6 +24,7 @@ import org.kohsuke.github.GHEvent; import static com.google.common.collect.Sets.immutableEnumSet; +import java.util.HashSet; import static org.kohsuke.github.GHEvent.ISSUE_COMMENT; /** @@ -125,6 +126,7 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -153,18 +155,22 @@ public void run() { Pattern pattern = Pattern.compile(expectedCommentBody, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); if (commentBody == null || pattern.matcher(commentBody).matches()) { - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestCommentCause( - commentUrl, commentAuthor, commentBody))); - LOGGER.log(Level.FINE, - "Triggered build for {0} due to PR comment on {1}:{2}/{3}", - new Object[] { + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestCommentCause( + commentUrl, commentAuthor, commentBody))); + LOGGER.log(Level.FINE, + "Triggered build for {0} due to PR comment on {1}:{2}/{3}", + new Object[] { job.getFullName(), changedRepository.getHost(), changedRepository.getUserName(), changedRepository.getRepositoryName() - } - ); + } + ); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); + } } else { LOGGER.log(Level.FINER, "Issue comment does not match the trigger build string ({0}) for {1}", diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java index 345fa0d..195dd02 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java @@ -24,6 +24,7 @@ import java.util.regex.Pattern; import static com.google.common.collect.Sets.immutableEnumSet; +import java.util.HashSet; import static org.kohsuke.github.GHEvent.PULL_REQUEST_REVIEW; /** @@ -98,6 +99,7 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -122,8 +124,12 @@ public void run() { continue; } propFound = true; - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestReviewCause(pullRequestUrl))); + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestReviewCause(pullRequestUrl))); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); + } break; } diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java index 4447ae4..a347459 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java @@ -24,6 +24,7 @@ import java.util.regex.Pattern; import static com.google.common.collect.Sets.immutableEnumSet; +import java.util.HashSet; import static org.kohsuke.github.GHEvent.PULL_REQUEST; /** @@ -113,6 +114,7 @@ protected void onEvent(GHEvent event, String payload) { @Override public void run() { boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); for (final SCMSourceOwner owner : SCMSourceOwners.all()) { for (SCMSource source : owner.getSCMSources()) { if (!(source instanceof GitHubSCMSource)) { @@ -137,8 +139,12 @@ public void run() { continue; } propFound = true; - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestUpdateCause(pullRequestUrl))); + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestUpdateCause(pullRequestUrl))); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[]{job}); + } break; } From fbc44551fd4bd189406c2d09b5383bf43d5f58ab Mon Sep 17 00:00:00 2001 From: lprimak Date: Thu, 8 Sep 2022 23:12:24 -0400 Subject: [PATCH 3/3] replaced deprecated ACL.impersonate() method --- .../IssueCommentGHEventSubscriber.java | 139 +++++++++--------- .../PRReviewGHEventSubscriber.java | 109 +++++++------- .../PRUpdateGHEventSubscriber.java | 109 +++++++------- 3 files changed, 177 insertions(+), 180 deletions(-) diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java index 93f5b86..f25d18a 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/IssueCommentGHEventSubscriber.java @@ -24,6 +24,8 @@ import org.kohsuke.github.GHEvent; import static com.google.common.collect.Sets.immutableEnumSet; +import static hudson.security.ACL.as; +import hudson.security.ACLContext; import java.util.HashSet; import static org.kohsuke.github.GHEvent.ISSUE_COMMENT; @@ -122,91 +124,88 @@ protected void onEvent(GHEvent event, String payload) { } LOGGER.log(Level.FINE, "Received comment on PR {0} for {1}", new Object[] { pullRequestId, repoUrl }); - ACL.impersonate(ACL.SYSTEM, new Runnable() { - @Override - public void run() { - boolean jobFound = false; - Set> alreadyTriggeredJobs = new HashSet<>(); - for (final SCMSourceOwner owner : SCMSourceOwners.all()) { - for (SCMSource source : owner.getSCMSources()) { - if (!(source instanceof GitHubSCMSource)) { - continue; - } - GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; - if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && - gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { - for (Job job : owner.getAllJobs()) { - if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { - if (!(job.getParent() instanceof MultiBranchProject)) { + try (ACLContext aclContext = as(ACL.SYSTEM)) { + boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); + for (final SCMSourceOwner owner : SCMSourceOwners.all()) { + for (SCMSource source : owner.getSCMSources()) { + if (!(source instanceof GitHubSCMSource)) { + continue; + } + GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; + if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && + gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { + for (Job job : owner.getAllJobs()) { + if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { + if (!(job.getParent() instanceof MultiBranchProject)) { + continue; + } + boolean propFound = false; + for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). + getBranch(job).getProperties()) { + if (!(prop instanceof TriggerPRCommentBranchProperty)) { continue; } - boolean propFound = false; - for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). - getBranch(job).getProperties()) { - if (!(prop instanceof TriggerPRCommentBranchProperty)) { - continue; - } - propFound = true; - TriggerPRCommentBranchProperty branchProp = (TriggerPRCommentBranchProperty)prop; - String expectedCommentBody = branchProp.getCommentBody(); - if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, commentAuthor)) { - continue; - } - Pattern pattern = Pattern.compile(expectedCommentBody, - Pattern.CASE_INSENSITIVE | Pattern.DOTALL); - if (commentBody == null || pattern.matcher(commentBody).matches()) { - if (alreadyTriggeredJobs.add(job)) { - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestCommentCause( - commentUrl, commentAuthor, commentBody))); - LOGGER.log(Level.FINE, - "Triggered build for {0} due to PR comment on {1}:{2}/{3}", - new Object[] { - job.getFullName(), - changedRepository.getHost(), - changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); - } else { - LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); - } - } else { - LOGGER.log(Level.FINER, - "Issue comment does not match the trigger build string ({0}) for {1}", - new Object[] { expectedCommentBody, job.getFullName() } - ); - } - break; + propFound = true; + TriggerPRCommentBranchProperty branchProp = (TriggerPRCommentBranchProperty)prop; + String expectedCommentBody = branchProp.getCommentBody(); + if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, commentAuthor)) { + continue; } - - if (!propFound) { - LOGGER.log(Level.FINE, - "Job {0} for {1}:{2}/{3} does not have a trigger PR comment branch property", - new Object[] { + Pattern pattern = Pattern.compile(expectedCommentBody, + Pattern.CASE_INSENSITIVE | Pattern.DOTALL); + if (commentBody == null || pattern.matcher(commentBody).matches()) { + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestCommentCause( + commentUrl, commentAuthor, commentBody))); + LOGGER.log(Level.FINE, + "Triggered build for {0} due to PR comment on {1}:{2}/{3}", + new Object[] { job.getFullName(), changedRepository.getHost(), changedRepository.getUserName(), changedRepository.getRepositoryName() - } + } + ); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); + } + } else { + LOGGER.log(Level.FINER, + "Issue comment does not match the trigger build string ({0}) for {1}", + new Object[] { expectedCommentBody, job.getFullName() } ); } + break; + } - jobFound = true; + if (!propFound) { + LOGGER.log(Level.FINE, + "Job {0} for {1}:{2}/{3} does not have a trigger PR comment branch property", + new Object[] { + job.getFullName(), + changedRepository.getHost(), + changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); } + + jobFound = true; } } } } - if (!jobFound) { - LOGGER.log(Level.FINE, "PR comment on {0}:{1}/{2} did not match any job", - new Object[] { - changedRepository.getHost(), changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); - } } - }); + if (!jobFound) { + LOGGER.log(Level.FINE, "PR comment on {0}:{1}/{2} did not match any job", + new Object[] { + changedRepository.getHost(), changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); + } + } } } diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java index 195dd02..e281c1e 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRReviewGHEventSubscriber.java @@ -24,6 +24,8 @@ import java.util.regex.Pattern; import static com.google.common.collect.Sets.immutableEnumSet; +import static hudson.security.ACL.as; +import hudson.security.ACLContext; import java.util.HashSet; import static org.kohsuke.github.GHEvent.PULL_REQUEST_REVIEW; @@ -95,71 +97,68 @@ protected void onEvent(GHEvent event, String payload) { } LOGGER.log(Level.FINE, "Received review on PR {1} for {2}", new Object[] { pullRequestId, repoUrl }); - ACL.impersonate(ACL.SYSTEM, new Runnable() { - @Override - public void run() { - boolean jobFound = false; - Set> alreadyTriggeredJobs = new HashSet<>(); - for (final SCMSourceOwner owner : SCMSourceOwners.all()) { - for (SCMSource source : owner.getSCMSources()) { - if (!(source instanceof GitHubSCMSource)) { - continue; - } - GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; - if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && - gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { - for (Job job : owner.getAllJobs()) { - if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { - if (!(job.getParent() instanceof MultiBranchProject)) { + try (ACLContext aclContext = as(ACL.SYSTEM)) { + boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); + for (final SCMSourceOwner owner : SCMSourceOwners.all()) { + for (SCMSource source : owner.getSCMSources()) { + if (!(source instanceof GitHubSCMSource)) { + continue; + } + GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; + if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && + gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { + for (Job job : owner.getAllJobs()) { + if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { + if (!(job.getParent() instanceof MultiBranchProject)) { + continue; + } + boolean propFound = false; + for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). + getBranch(job).getProperties()) { + if (!(prop instanceof TriggerPRReviewBranchProperty)) { continue; } - boolean propFound = false; - for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). - getBranch(job).getProperties()) { - if (!(prop instanceof TriggerPRReviewBranchProperty)) { - continue; - } - TriggerPRReviewBranchProperty branchProp = (TriggerPRReviewBranchProperty)prop; - if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, author)) { - continue; - } - propFound = true; - if (alreadyTriggeredJobs.add(job)) { - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestReviewCause(pullRequestUrl))); - } else { - LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); - } - break; + TriggerPRReviewBranchProperty branchProp = (TriggerPRReviewBranchProperty)prop; + if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, author)) { + continue; } - - if (!propFound) { - LOGGER.log(Level.FINE, - "Job {0} for {1}:{2}/{3} does not have a trigger PR review branch property", - new Object[] { - job.getFullName(), - changedRepository.getHost(), - changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); + propFound = true; + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestReviewCause(pullRequestUrl))); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[] { job }); } + break; + } - jobFound = true; + if (!propFound) { + LOGGER.log(Level.FINE, + "Job {0} for {1}:{2}/{3} does not have a trigger PR review branch property", + new Object[] { + job.getFullName(), + changedRepository.getHost(), + changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); } + + jobFound = true; } } } } - if (!jobFound) { - LOGGER.log(Level.FINE, "PR review on {0}:{1}/{2} did not match any job", - new Object[] { - changedRepository.getHost(), changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); - } } - }); + if (!jobFound) { + LOGGER.log(Level.FINE, "PR review on {0}:{1}/{2} did not match any job", + new Object[] { + changedRepository.getHost(), changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); + } + } } } \ No newline at end of file diff --git a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java index a347459..cb6d720 100644 --- a/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java +++ b/src/main/java/com/adobe/jenkins/github_pr_comment_build/PRUpdateGHEventSubscriber.java @@ -24,6 +24,8 @@ import java.util.regex.Pattern; import static com.google.common.collect.Sets.immutableEnumSet; +import static hudson.security.ACL.as; +import hudson.security.ACLContext; import java.util.HashSet; import static org.kohsuke.github.GHEvent.PULL_REQUEST; @@ -110,71 +112,68 @@ protected void onEvent(GHEvent event, String payload) { } LOGGER.log(Level.FINE, "Received update on PR {1} for {2}", new Object[] { pullRequestId, repoUrl }); - ACL.impersonate(ACL.SYSTEM, new Runnable() { - @Override - public void run() { - boolean jobFound = false; - Set> alreadyTriggeredJobs = new HashSet<>(); - for (final SCMSourceOwner owner : SCMSourceOwners.all()) { - for (SCMSource source : owner.getSCMSources()) { - if (!(source instanceof GitHubSCMSource)) { - continue; - } - GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; - if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && - gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { - for (Job job : owner.getAllJobs()) { - if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { - if (!(job.getParent() instanceof MultiBranchProject)) { + try (ACLContext aclContext = as(ACL.SYSTEM)) { + boolean jobFound = false; + Set> alreadyTriggeredJobs = new HashSet<>(); + for (final SCMSourceOwner owner : SCMSourceOwners.all()) { + for (SCMSource source : owner.getSCMSources()) { + if (!(source instanceof GitHubSCMSource)) { + continue; + } + GitHubSCMSource gitHubSCMSource = (GitHubSCMSource) source; + if (gitHubSCMSource.getRepoOwner().equalsIgnoreCase(changedRepository.getUserName()) && + gitHubSCMSource.getRepository().equalsIgnoreCase(changedRepository.getRepositoryName())) { + for (Job job : owner.getAllJobs()) { + if (pullRequestJobNamePattern.matcher(job.getName()).matches()) { + if (!(job.getParent() instanceof MultiBranchProject)) { + continue; + } + boolean propFound = false; + for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). + getBranch(job).getProperties()) { + if (!(prop instanceof TriggerPRUpdateBranchProperty)) { continue; } - boolean propFound = false; - for (BranchProperty prop : ((MultiBranchProject) job.getParent()).getProjectFactory(). - getBranch(job).getProperties()) { - if (!(prop instanceof TriggerPRUpdateBranchProperty)) { - continue; - } - TriggerPRUpdateBranchProperty branchProp = (TriggerPRUpdateBranchProperty)prop; - if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, author)) { - continue; - } - propFound = true; - if (alreadyTriggeredJobs.add(job)) { - ParameterizedJobMixIn.scheduleBuild2(job, 0, - new CauseAction(new GitHubPullRequestUpdateCause(pullRequestUrl))); - } else { - LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[]{job}); - } - break; + TriggerPRUpdateBranchProperty branchProp = (TriggerPRUpdateBranchProperty)prop; + if (!branchProp.isAllowUntrusted() && !GithubHelper.isAuthorized(job, author)) { + continue; } - - if (!propFound) { - LOGGER.log(Level.FINE, - "Job {0} for {1}:{2}/{3} does not have a trigger PR update branch property", - new Object[] { - job.getFullName(), - changedRepository.getHost(), - changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); + propFound = true; + if (alreadyTriggeredJobs.add(job)) { + ParameterizedJobMixIn.scheduleBuild2(job, 0, + new CauseAction(new GitHubPullRequestUpdateCause(pullRequestUrl))); + } else { + LOGGER.log(Level.FINE, "Skipping already triggered job {0}", new Object[]{job}); } + break; + } - jobFound = true; + if (!propFound) { + LOGGER.log(Level.FINE, + "Job {0} for {1}:{2}/{3} does not have a trigger PR update branch property", + new Object[] { + job.getFullName(), + changedRepository.getHost(), + changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); } + + jobFound = true; } } } } - if (!jobFound) { - LOGGER.log(Level.FINE, "PR update on {0}:{1}/{2} did not match any job", - new Object[] { - changedRepository.getHost(), changedRepository.getUserName(), - changedRepository.getRepositoryName() - } - ); - } } - }); + if (!jobFound) { + LOGGER.log(Level.FINE, "PR update on {0}:{1}/{2} did not match any job", + new Object[] { + changedRepository.getHost(), changedRepository.getUserName(), + changedRepository.getRepositoryName() + } + ); + } + } } } \ No newline at end of file