package org.jenkinsci.plugins.ghprb.jobdsl; import antlr.ANTLRException; import com.google.common.base.Joiner; import hudson.Extension; import javaposse.jobdsl.dsl.helpers.publisher.PublisherContext; import javaposse.jobdsl.dsl.helpers.triggers.TriggerContext; import javaposse.jobdsl.dsl.helpers.wrapper.WrapperContext; import javaposse.jobdsl.plugin.ContextExtensionPoint; import javaposse.jobdsl.plugin.DslExtensionMethod; import org.jenkinsci.plugins.ghprb.GhprbPullRequestMerge; import org.jenkinsci.plugins.ghprb.GhprbTrigger; import org.jenkinsci.plugins.ghprb.upstream.GhprbUpstreamStatus; @Extension(optional = true) public class GhprbContextExtensionPoint extends ContextExtensionPoint { @DslExtensionMethod(context = TriggerContext.class) public Object githubPullRequest(Runnable closure) throws ANTLRException { GhprbTriggerContext context = new GhprbTriggerContext(); executeInContext(closure, context); return new GhprbTrigger( Joiner.on("\n").join(context.admins), Joiner.on("\n").join(context.userWhitelist), Joiner.on("\n").join(context.orgWhitelist), context.cron, context.triggerPhrase, context.onlyTriggerPhrase, context.useGitHubHooks, context.permitAll, context.autoCloseFailedPullRequests, context.displayBuildErrorsOnDownstreamBuilds, null, context.skipBuildPhrase, context.whiteListTargetBranches, context.blackListTargetBranches, context.allowMembersOfWhitelistedOrgsAsAdmin, null, null, null, null, context.buildDescriptionTemplate, Joiner.on("\n").join(context.blackListLabels), Joiner.on("\n").join(context.whiteListLabels), context.extensionContext.extensions ); } @DslExtensionMethod(context = PublisherContext.class) public Object mergeGithubPullRequest(Runnable closure) { GhprbPullRequestMergeContext context = new GhprbPullRequestMergeContext(); executeInContext(closure, context); return new GhprbPullRequestMerge( context.mergeComment, context.onlyAdminsMerge, context.disallowOwnCode, context.failOnNonMerge, context.deleteOnMerge, context.allowMergeWithoutTriggerPhrase); } @DslExtensionMethod(context = WrapperContext.class) public Object downstreamCommitStatus(Runnable closure) { GhprbUpstreamStatusContext context = new GhprbUpstreamStatusContext(); executeInContext(closure, context); return new GhprbUpstreamStatus( context.showMatrixStatus, context.context, context.statusUrl, context.triggeredStatus, context.startedStatus, context.addTestResults, context.completedStatus ); } }