Skip to content

Commit cdbd136

Browse files
authored
[JENKINS-60874] Configuring ForkPullRequestDiscoveryTrait using Job DSL (#752)
JENKINS-26535 describes an issue where wildcards in generics aren't handled well and result in the inability to configure classes that use wildcards in Job DSL, such as the SCMHeadAuthority class used for the forked PR trust policy. To work around this issue, create a new abstract class named GitHubForkTrustPolicy which extends the necessary SCMHeadAuthority superclass with its proper generics and use it in the constructor instead. Update all the trust policies to extend from this abstract class so they can be used. Fixes JENKINS-60874.
1 parent 46825fd commit cdbd136

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

src/main/java/org/jenkinsci/plugins/github_branch_source/ForkPullRequestDiscoveryTrait.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import jenkins.scm.api.trait.SCMHeadAuthority;
4040
import jenkins.scm.api.trait.SCMHeadAuthorityDescriptor;
4141
import jenkins.scm.api.trait.SCMSourceContext;
42-
import jenkins.scm.api.trait.SCMSourceRequest;
4342
import jenkins.scm.api.trait.SCMSourceTrait;
4443
import jenkins.scm.api.trait.SCMSourceTraitDescriptor;
4544
import jenkins.scm.impl.ChangeRequestSCMHeadCategory;
@@ -83,6 +82,12 @@ public class ForkPullRequestDiscoveryTrait extends SCMSourceTrait {
8382
* @param trust the authority to use.
8483
*/
8584
@DataBoundConstructor
85+
public ForkPullRequestDiscoveryTrait(int strategyId, @NonNull GitHubForkTrustPolicy trust) {
86+
this.strategyId = strategyId;
87+
this.trust = trust;
88+
}
89+
90+
@Deprecated
8691
public ForkPullRequestDiscoveryTrait(
8792
int strategyId,
8893
@NonNull
@@ -236,17 +241,23 @@ public List<SCMHeadAuthorityDescriptor> getTrustDescriptors() {
236241
}
237242
}
238243

244+
/** Trust policy for forked pull requests.
245+
* <p>
246+
* This reduces generics in the DataBoundConstructor signature as a workaround for JENKINS-26535.
247+
*/
248+
public abstract static class GitHubForkTrustPolicy
249+
extends SCMHeadAuthority<GitHubSCMSourceRequest, PullRequestSCMHead, PullRequestSCMRevision> {}
250+
239251
/** An {@link SCMHeadAuthority} that trusts nothing. */
240-
public static class TrustNobody
241-
extends SCMHeadAuthority<SCMSourceRequest, PullRequestSCMHead, PullRequestSCMRevision> {
252+
public static class TrustNobody extends GitHubForkTrustPolicy {
242253

243254
/** Constructor. */
244255
@DataBoundConstructor
245256
public TrustNobody() {}
246257

247258
/** {@inheritDoc} */
248259
@Override
249-
public boolean checkTrusted(@NonNull SCMSourceRequest request, @NonNull PullRequestSCMHead head) {
260+
public boolean checkTrusted(@NonNull GitHubSCMSourceRequest request, @NonNull PullRequestSCMHead head) {
250261
return false;
251262
}
252263

@@ -270,8 +281,7 @@ public boolean isApplicableToOrigin(@NonNull Class<? extends SCMHeadOrigin> orig
270281
}
271282

272283
/** An {@link SCMHeadAuthority} that trusts contributors to the repository. */
273-
public static class TrustContributors
274-
extends SCMHeadAuthority<GitHubSCMSourceRequest, PullRequestSCMHead, PullRequestSCMRevision> {
284+
public static class TrustContributors extends GitHubForkTrustPolicy {
275285
/** Constructor. */
276286
@DataBoundConstructor
277287
public TrustContributors() {}
@@ -303,8 +313,7 @@ public boolean isApplicableToOrigin(@NonNull Class<? extends SCMHeadOrigin> orig
303313
}
304314

305315
/** An {@link SCMHeadAuthority} that trusts those with write permission to the repository. */
306-
public static class TrustPermission
307-
extends SCMHeadAuthority<GitHubSCMSourceRequest, PullRequestSCMHead, PullRequestSCMRevision> {
316+
public static class TrustPermission extends GitHubForkTrustPolicy {
308317

309318
/** Constructor. */
310319
@DataBoundConstructor
@@ -347,15 +356,14 @@ public boolean isApplicableToOrigin(@NonNull Class<? extends SCMHeadOrigin> orig
347356
}
348357

349358
/** An {@link SCMHeadAuthority} that trusts everyone. */
350-
public static class TrustEveryone
351-
extends SCMHeadAuthority<SCMSourceRequest, PullRequestSCMHead, PullRequestSCMRevision> {
359+
public static class TrustEveryone extends GitHubForkTrustPolicy {
352360
/** Constructor. */
353361
@DataBoundConstructor
354362
public TrustEveryone() {}
355363

356364
/** {@inheritDoc} */
357365
@Override
358-
protected boolean checkTrusted(@NonNull SCMSourceRequest request, @NonNull PullRequestSCMHead head) {
366+
protected boolean checkTrusted(@NonNull GitHubSCMSourceRequest request, @NonNull PullRequestSCMHead head) {
359367
return true;
360368
}
361369

src/test/java/org/jenkinsci/plugins/github_branch_source/ForkPullRequestDiscoveryTrait2Test.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828
import java.util.Collections;
2929
import java.util.List;
3030
import jenkins.branch.BranchSource;
31-
import jenkins.scm.api.SCMRevision;
32-
import jenkins.scm.api.mixin.ChangeRequestSCMHead2;
33-
import jenkins.scm.api.trait.SCMHeadAuthority;
3431
import jenkins.scm.api.trait.SCMSourceTrait;
3532
import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject;
3633
import org.junit.Ignore;
@@ -69,8 +66,7 @@ public void configRoundtripWithRawUrl() throws Exception {
6966

7067
private void assertRoundTrip(
7168
WorkflowMultiBranchProject p,
72-
SCMHeadAuthority<? super GitHubSCMSourceRequest, ? extends ChangeRequestSCMHead2, ? extends SCMRevision>
73-
trust,
69+
ForkPullRequestDiscoveryTrait.GitHubForkTrustPolicy trust,
7470
boolean configuredByUrl)
7571
throws Exception {
7672

0 commit comments

Comments
 (0)