Skip to content

Commit

Permalink
[JENKINS-32196] Added support for the Maven Info Plugin
Browse files Browse the repository at this point in the history
[JENKINS-32196] Added support for the Maven Info Plugin

[JENKINS-32196] Removed redundant context

[JENKINS-32196] Minor bits and pieces

[JENKINS-32196] Removed unused imports
  • Loading branch information
v1v committed Apr 7, 2016
1 parent 32e289b commit ccc197f
Show file tree
Hide file tree
Showing 6 changed files with 209 additions and 0 deletions.
2 changes: 2 additions & 0 deletions docs/Home.md
Expand Up @@ -21,6 +21,8 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins

## Release Notes
* 1.46 (unreleased)
* Added support for the [Maven Info Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Maven+Info+Plugin)
([JENKINS-32196](https://issues.jenkins-ci.org/browse/JENKINS-32196))
* Added support for the [Jython Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Jython+Plugin)
([JENKINS-33881](https://issues.jenkins-ci.org/browse/JENKINS-33881))
* Added support for the [Job Exporter Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Job+Exporter+Plugin)
Expand Down
@@ -0,0 +1,19 @@
mavenJob('example_1') {
properties {
mavenInfo {
modulePattern(':my-artifact')
interestingDependenciesPattern('org.springframework.*:*')
assignName('name template')
}
}
}

mavenJob('example_2') {
properties {
mavenInfo {
modulePattern(':my-artifact')
interestingDependenciesPattern('org.springframework.*:*')
assignDescription('some text')
}
}
}
@@ -0,0 +1,42 @@
package javaposse.jobdsl.dsl.helpers.properties

import javaposse.jobdsl.dsl.Context

class MavenInfoContext implements Context {
boolean assignName = false
boolean assignDescription = false
String name
String description
String modulePattern
String interestingDependenciesPattern

/**
* Sets the name from main module pom.xml (from tag <name>).
*/
void assignName(String name) {
this.assignName = true
this.name = name
}

/**
* Sets the description from main module pom.xml (from tag <description>).
*/
void assignDescription(String description) {
this.assignDescription = true
this.description = description
}

/**
* Sets the regex pattern to find module to extract versions, name, description.
*/
void modulePattern(String modulePattern) {
this.modulePattern = modulePattern
}

/**
* Sets the pattern to find interesting dependencies.
*/
void interestingDependenciesPattern(String interestingDependenciesPattern) {
this.interestingDependenciesPattern = interestingDependenciesPattern
}
}
@@ -0,0 +1,38 @@
package javaposse.jobdsl.dsl.helpers.properties

import javaposse.jobdsl.dsl.ContextHelper
import javaposse.jobdsl.dsl.DslContext
import javaposse.jobdsl.dsl.Item
import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.dsl.RequiresPlugin

class MavenPropertiesContext extends PropertiesContext {

MavenPropertiesContext(JobManagement jobManagement, Item item) {
super(jobManagement, item)
}

/**
* This plugin add features related to Maven jobs info. Extract information from Maven jobs (update name and
* description from POM)
*
* @since 1.46
*/
@RequiresPlugin(id = 'maven-info', minimumVersion = '0.2.0')
void mavenInfo(@DslContext(MavenInfoContext) Closure closure) {
MavenInfoContext context = new MavenInfoContext()
ContextHelper.executeInContext(closure, context)

propertiesNodes << new NodeBuilder().'jenkins.plugins.maveninfo.config.MavenInfoJobConfig' {
assignName(context.assignName)
nameTemplate(context.name ?: '')
assignDescription(context.assignDescription)
if (context.assignDescription) {
descriptionTemplate(context.description ?: '')
}
mainModulePattern(context.modulePattern ?: '')
dependenciesPattern(context.interestingDependenciesPattern ?: '')
}
}

}
Expand Up @@ -9,6 +9,7 @@ import javaposse.jobdsl.dsl.NoDoc
import javaposse.jobdsl.dsl.Preconditions
import javaposse.jobdsl.dsl.RequiresPlugin
import javaposse.jobdsl.dsl.helpers.LocalRepositoryLocation
import javaposse.jobdsl.dsl.helpers.properties.MavenPropertiesContext
import javaposse.jobdsl.dsl.helpers.publisher.MavenPublisherContext
import javaposse.jobdsl.dsl.helpers.step.StepContext
import javaposse.jobdsl.dsl.helpers.triggers.MavenTriggerContext
Expand Down Expand Up @@ -60,6 +61,22 @@ class MavenJob extends Job {
}
}

/**
* @since 1.46
*/
@Override
void properties(@DslContext(MavenPropertiesContext) Closure closure) {
MavenPropertiesContext context = new MavenPropertiesContext(jobManagement, this)
ContextHelper.executeInContext(closure, context)

configure { Node project ->
context.propertiesNodes.each {
project / 'properties' << it
}
}

}

@Override
void publishers(@DslContext(MavenPublisherContext) Closure closure) {
MavenPublisherContext context = new MavenPublisherContext(jobManagement, this)
Expand Down
@@ -0,0 +1,91 @@
package javaposse.jobdsl.dsl.helpers.properties

import javaposse.jobdsl.dsl.Item
import javaposse.jobdsl.dsl.JobManagement
import spock.lang.Specification

class MavenPropertiesContextSpec extends Specification {
JobManagement jobManagement = Mock(JobManagement)
Item item = Mock(Item)
MavenPropertiesContext context = new MavenPropertiesContext(jobManagement, item)

def 'call mavenInfo with no options'() {
when:
context.mavenInfo {
}

then:
with(context.propertiesNodes[0]) {
name() == 'jenkins.plugins.maveninfo.config.MavenInfoJobConfig'
children().size() == 5
assignDescription[0].value() == false
mainModulePattern[0].value().empty
dependenciesPattern[0].value().empty
assignName[0].value() == false
nameTemplate[0].value().empty
}
1 * jobManagement.requireMinimumPluginVersion('maven-info', '0.2.0')
}

def 'call mavenInfo with assignName option'() {
when:
context.mavenInfo {
assignName('name template')
}

then:
with(context.propertiesNodes[0]) {
name() == 'jenkins.plugins.maveninfo.config.MavenInfoJobConfig'
children().size() == 5
assignDescription[0].value() == false
mainModulePattern[0].value().empty
dependenciesPattern[0].value().empty
assignName[0].value() == true
nameTemplate[0].value() == 'name template'
}
1 * jobManagement.requireMinimumPluginVersion('maven-info', '0.2.0')
}

def 'call mavenInfo with assignDescription option'() {
when:
context.mavenInfo {
assignDescription('some text')
}

then:
with(context.propertiesNodes[0]) {
name() == 'jenkins.plugins.maveninfo.config.MavenInfoJobConfig'
children().size() == 6
assignDescription[0].value() == true
descriptionTemplate[0].value() == 'some text'
mainModulePattern[0].value().empty
dependenciesPattern[0].value().empty
assignName[0].value() == false
nameTemplate[0].value().empty
}
1 * jobManagement.requireMinimumPluginVersion('maven-info', '0.2.0')
}

def 'call mavenInfo with all options'() {
when:
context.mavenInfo {
modulePattern(':my-artifact')
interestingDependenciesPattern('org.springframework.*:*')
assignName('name template')
assignDescription('some text')
}

then:
with(context.propertiesNodes[0]) {
name() == 'jenkins.plugins.maveninfo.config.MavenInfoJobConfig'
children().size() == 6
assignDescription[0].value() == true
descriptionTemplate[0].value() == 'some text'
mainModulePattern[0].value() == ':my-artifact'
dependenciesPattern[0].value() == 'org.springframework.*:*'
assignName[0].value() == true
nameTemplate[0].value() == 'name template'
}
1 * jobManagement.requireMinimumPluginVersion('maven-info', '0.2.0')
}
}

0 comments on commit ccc197f

Please sign in to comment.