Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add build selector parameter #1096

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,26 @@ class BuildParametersContext extends AbstractExtensibleContext {
}
}

/**
* Defines a parameter that allows to specify a build selector for the copy artifact plugin.
*
* @since 1.67
*/
@RequiresPlugin(id = 'copyartifact', minimumVersion = '1.31')
void buildSelectorParam(String parameterName,
@DslContext(BuildSelectorParameterContext) Closure buildSelectorParameterClosure) {
checkParameterName(parameterName)
BuildSelectorParameterContext selectorParameterContext = new BuildSelectorParameterContext(jobManagement, item)
ContextHelper.executeInContext(buildSelectorParameterClosure, selectorParameterContext)
Node selectorParameterNode = new Node(null, 'hudson.plugins.copyartifact.BuildSelectorParameter')
selectorParameterNode.appendNode('name', parameterName)
if (selectorParameterContext.description != null) {
selectorParameterNode.appendNode('description', selectorParameterContext.description)
}
selectorParameterNode.append(selectorParameterContext.defaultSelectorContext.selector)
buildParameterNodes[parameterName] = selectorParameterNode
}

private void checkParameterName(String name) {
checkNotNullOrEmpty(name, 'parameterName cannot be null')
checkArgument(!buildParameterNodes.containsKey(name), "parameter ${name} already defined")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package javaposse.jobdsl.dsl.helpers

import javaposse.jobdsl.dsl.AbstractContext
import javaposse.jobdsl.dsl.ContextHelper
import javaposse.jobdsl.dsl.DslContext
import javaposse.jobdsl.dsl.Item
import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.dsl.helpers.step.CopyArtifactSelectorContext

class BuildSelectorParameterContext extends AbstractContext {

private static final String DEFAULT_SELECTOR = 'defaultSelector'

String description
CopyArtifactSelectorContext defaultSelectorContext

protected BuildSelectorParameterContext(JobManagement jobManagement, Item item) {
super(jobManagement)
defaultSelectorContext = new CopyArtifactSelectorContext(jobManagement, item, DEFAULT_SELECTOR)
}

/**
* Specifies the parameter description.
* @param description String value of the description
*/
void description(String description) {
this.description = description
}

/**
* Specifies the default build selector.
*/
void defaultBuildSelector(@DslContext(CopyArtifactSelectorContext) Closure defaultSelectorClosure) {
ContextHelper.executeInContext(defaultSelectorClosure, defaultSelectorContext)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ import javaposse.jobdsl.dsl.RequiresPlugin

@ContextType('hudson.plugins.copyartifact.BuildSelector')
class CopyArtifactSelectorContext extends AbstractExtensibleContext {

final String classifier
Copy link

@szpak szpak Jun 23, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 for having it final

Node selector

CopyArtifactSelectorContext(JobManagement jobManagement, Item item) {
CopyArtifactSelectorContext(JobManagement jobManagement, Item item, String classifier = 'selector') {
super(jobManagement, item)
this.classifier = classifier
latestSuccessful()
}

Expand Down Expand Up @@ -122,10 +125,10 @@ class CopyArtifactSelectorContext extends AbstractExtensibleContext {
*/
@RequiresPlugin(id = 'jenkins-multijob-plugin', minimumVersion = '1.22')
void multiJobBuild() {
selector = new NodeBuilder().'selector'(class: 'com.tikal.jenkins.plugins.multijob.MultiJobBuildSelector')
selector = new NodeBuilder()."$classifier"(class: 'com.tikal.jenkins.plugins.multijob.MultiJobBuildSelector')
}

private void createSelectorNode(String type, Closure nodeBuilder = null) {
selector = new NodeBuilder().'selector'(class: "hudson.plugins.copyartifact.${type}Selector", nodeBuilder)
selector = new NodeBuilder()."$classifier"(class: "hudson.plugins.copyartifact.${type}Selector", nodeBuilder)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import javaposse.jobdsl.dsl.JobManagement
import spock.lang.Specification

class BuildParametersContextSpec extends Specification {

static final String DEFAULT_SELECTOR_CLASS = 'hudson.plugins.copyartifact.StatusBuildSelector'
JobManagement jobManagement = Mock(JobManagement)
Item item = Mock(Item)
BuildParametersContext context = new BuildParametersContext(jobManagement, item)
Expand Down Expand Up @@ -1481,4 +1483,28 @@ class BuildParametersContextSpec extends Specification {
then:
thrown(DslScriptException)
}

def 'should add buildSelectorParameter node'() {
when:
context.buildSelectorParam('myParameterName') { description('myDescription') }
then:
context.buildParameterNodes
context.buildParameterNodes.size() == 1
context.buildParameterNodes['myParameterName'].name() == 'hudson.plugins.copyartifact.BuildSelectorParameter'
context.buildParameterNodes['myParameterName'].name.text() == 'myParameterName'
context.buildParameterNodes['myParameterName'].children().size() == 3
context.buildParameterNodes['myParameterName'].description.text() == 'myDescription'
context.buildParameterNodes['myParameterName'].defaultSelector.get(0).attributes().class ==
DEFAULT_SELECTOR_CLASS
}

def 'buildSelectorParameter name should not be null, empty or previously defined'() {
when:
context.stringParam('myParameterName')
context.buildSelectorParam(name) {}
then:
thrown(DslScriptException)
where:
name << [null, '', 'myParameterName']
}
}