diff --git a/build.gradle b/build.gradle index bda203e..9213837 100644 --- a/build.gradle +++ b/build.gradle @@ -4,15 +4,18 @@ buildscript { maven { url 'http://repo.jenkins-ci.org/releases/' } + maven { + url "https://plugins.gradle.org/m2/" + } } dependencies { classpath 'org.gradle.api.plugins:gradle-nexus-plugin:0.7' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:0.5' + classpath "com.gradle.publish:plugin-publish-plugin:0.9.0" } } -apply plugin: 'com.jfrog.bintray' +apply plugin: "com.gradle.plugin-publish" apply plugin: 'groovy' apply plugin: 'eclipse' apply plugin: 'idea' @@ -45,10 +48,12 @@ dependencies { 'org.apache.ivy:ivy:2.2.0' ) - compile('org.codehaus.groovy.modules.http-builder:http-builder:0.5.2') { + compile('org.codehaus.groovy.modules.http-builder:http-builder:0.6') { exclude(module: 'groovy') + exclude(module: 'xercesImpl') } - compile('org.jenkins-ci.plugins:job-dsl-core:1.26') { + + compile('org.jenkins-ci.plugins:job-dsl-core:1.34') { exclude(module: 'groovy-all') } @@ -87,6 +92,10 @@ task wrapper(type: Wrapper) { gradleVersion = '1.12' } +nexus { + sign = false +} + modifyPom { project { name 'gradle-jenkins-plugin' @@ -118,23 +127,17 @@ modifyPom { } } -bintray { - user = project.hasProperty('bintrayUsername') ? project.getProperty('bintrayUsername') : '' - key = project.hasProperty('bintrayApiKey') ? project.getProperty('bintrayApiKey') : '' - - configurations = ['archives'] - - pkg { - repo = 'gradle-plugins' - name = 'gradle-jenkins-plugin' - licenses = ['Apache-2.0'] - desc = 'A Gradle plugin for programmatically managing Jenkins instances.' - websiteUrl = 'https://github.com/ghale/gradle-jenkins-plugin' - issueTrackerUrl = 'https://github.com/ghale/gradle-jenkins-plugin/issues' - vcsUrl = 'https://github.com/ghale/gradle-jenkins-plugin.git' - labels = ['jenkins', 'gradle'] - publicDownloadNumbers = true - version.attributes = ['gradle-plugin': 'com.terrafolio.jenkins:com.terrafolio:gradle-jenkins-plugin'] +pluginBundle { + website = 'https://github.com/ghale/gradle-jenkins-plugin' + vcsUrl = 'https://github.com/ghale/gradle-jenkins-plugin' + description = 'A Gradle plugin for programmatically managing Jenkins instances.' + tags = ['jenkins', 'gradle'] + + plugins { + jenkins { + id = 'com.terrafolio.jenkins' + displayName = 'Gradle Jenkins plugin' + } } } diff --git a/gradle.properties b/gradle.properties index 471f915..3d989a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=1.2.3 +version=1.3.0 group=com.terrafolio diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f1e239..085a1cd 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c1f5059..e14c8a5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jun 29 12:09:34 EDT 2014 +#Thu Apr 02 11:30:33 EDT 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-bin.zip diff --git a/gradlew b/gradlew index e61422d..91a7e26 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ############################################################################## ## @@ -61,9 +61,9 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" +cd "`dirname \"$PRG\"`/" >&- APP_HOME="`pwd -P`" -cd "$SAVED" +cd "$SAVED" >&- CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/JobDSLSupport.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/JobDSLSupport.groovy index 99a3684..c84b40c 100644 --- a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/JobDSLSupport.groovy +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/JobDSLSupport.groovy @@ -1,15 +1,24 @@ package com.terrafolio.gradle.plugins.jenkins.dsl +import com.terrafolio.gradle.plugins.jenkins.jobdsl.DSLJobFactory +import com.terrafolio.gradle.plugins.jenkins.jobdsl.DefaultDSLJobFactory import javaposse.jobdsl.dsl.* /** * Created by ghale on 6/2/14. */ class JobDSLSupport implements DSLSupport { - def JobManagement jobManagement + JobManagement jobManagement + DSLJobFactory jobFactory JobDSLSupport(JobManagement jobManagement) { this.jobManagement = jobManagement + this.jobFactory = new DefaultDSLJobFactory() + } + + JobDSLSupport(JobManagement jobManagement, DSLJobFactory jobFactory) { + this.jobManagement = jobManagement + this.jobFactory = jobFactory } @Override @@ -27,7 +36,7 @@ class JobDSLSupport implements DSLSupport { @Override def String evaluateDSL(String name, String type, Closure closure) { - def Job job = new Job(jobManagement, ['type': type]) + def Job job = jobFactory.create(jobManagement, type) // Load the existing xml as a template if it exists if (jobManagement.getConfig(name) && job.templateName == null) { job.using(name) diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/ViewDSLSupport.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/ViewDSLSupport.groovy index d9afd12..3f332a7 100644 --- a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/ViewDSLSupport.groovy +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/dsl/ViewDSLSupport.groovy @@ -1,27 +1,24 @@ package com.terrafolio.gradle.plugins.jenkins.dsl +import com.terrafolio.gradle.plugins.jenkins.jobdsl.DSLViewFactory +import com.terrafolio.gradle.plugins.jenkins.jobdsl.DefaultDSLViewFactory import javaposse.jobdsl.dsl.* -import javaposse.jobdsl.dsl.views.BuildPipelineView -import javaposse.jobdsl.dsl.views.ListView -import javaposse.jobdsl.dsl.views.NestedView -import javaposse.jobdsl.dsl.views.SectionedView /** * Created by ghale on 6/2/14. */ class ViewDSLSupport implements DSLSupport { - def JobManagement jobManagement - - private static final Map> VIEW_TYPE_MAPPING = [ - (null) : ListView.class, - (ViewType.ListView) : ListView.class, - (ViewType.NestedView) : NestedView.class, - (ViewType.SectionedView) : SectionedView.class, - (ViewType.BuildPipelineView): BuildPipelineView.class, - ] + JobManagement jobManagement + DSLViewFactory viewFactory ViewDSLSupport(JobManagement jobManagement) { this.jobManagement = jobManagement + this.viewFactory = new DefaultDSLViewFactory() + } + + ViewDSLSupport(JobManagement jobManagement, DSLViewFactory viewFactory) { + this.jobManagement = jobManagement + this.viewFactory = viewFactory } @Override @@ -39,8 +36,7 @@ class ViewDSLSupport implements DSLSupport { @Override String evaluateDSL(String name, String type, Closure closure) { - Class viewClass = VIEW_TYPE_MAPPING[type as ViewType] - View view = viewClass.newInstance() + View view = viewFactory.createView(jobManagement, type) view.with(closure) jobManagement.createOrUpdateView(name, view.xml, true) return name diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobFactory.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobFactory.groovy new file mode 100644 index 0000000..708827f --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobFactory.groovy @@ -0,0 +1,9 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.Job +import javaposse.jobdsl.dsl.JobManagement + + +interface DSLJobFactory { + Job create(JobManagement management, String type) +} diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobType.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobType.groovy new file mode 100644 index 0000000..3a95d14 --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLJobType.groovy @@ -0,0 +1,24 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.Job +import javaposse.jobdsl.dsl.jobs.* + + +enum DSLJobType { + Freeform(FreeStyleJob), + Maven(MavenJob), + Multijob(MultiJob), + BuildFlow(BuildFlowJob), + Workflow(WorkflowJob), + Matrix(MatrixJob) + + final Class jobClass + + DSLJobType(Class jobClass) { + this.jobClass = jobClass + } + + static find(String enumName) { + values().find { it.name().toLowerCase() == enumName.toLowerCase() } + } +} \ No newline at end of file diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewFactory.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewFactory.groovy new file mode 100644 index 0000000..9a27f66 --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewFactory.groovy @@ -0,0 +1,9 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.JobManagement +import javaposse.jobdsl.dsl.View + + +interface DSLViewFactory { + View createView(JobManagement management, String type) +} \ No newline at end of file diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewType.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewType.groovy new file mode 100644 index 0000000..2dba7a5 --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DSLViewType.groovy @@ -0,0 +1,22 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.View + +enum DSLViewType { + ListView(javaposse.jobdsl.dsl.views.ListView), + SectionedView(javaposse.jobdsl.dsl.views.SectionedView), + NestedView(javaposse.jobdsl.dsl.views.NestedView), + DeliveryPipelineView(javaposse.jobdsl.dsl.views.DeliveryPipelineView), + BuildPipelineView(javaposse.jobdsl.dsl.views.BuildPipelineView), + BuildMonitorView(javaposse.jobdsl.dsl.views.BuildMonitorView) + + final Class viewClass + + DSLViewType(Class viewClass) { + this.viewClass = viewClass + } + + static find(String enumName) { + values().find { it.name().toLowerCase() == enumName.toLowerCase() } + } +} \ No newline at end of file diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLJobFactory.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLJobFactory.groovy new file mode 100644 index 0000000..300f1da --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLJobFactory.groovy @@ -0,0 +1,18 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.Job +import javaposse.jobdsl.dsl.JobManagement + +class DefaultDSLJobFactory implements DSLJobFactory { + @Override + Job create(JobManagement management, String type) { + Class jobClass + if (type == null) { + jobClass = DSLJobType.Freeform.jobClass + } else { + jobClass = DSLJobType.find(type).jobClass + } + + return jobClass.newInstance(management) + } +} diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLViewFactory.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLViewFactory.groovy new file mode 100644 index 0000000..0b9f3ed --- /dev/null +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/DefaultDSLViewFactory.groovy @@ -0,0 +1,18 @@ +package com.terrafolio.gradle.plugins.jenkins.jobdsl + +import javaposse.jobdsl.dsl.JobManagement +import javaposse.jobdsl.dsl.View + +class DefaultDSLViewFactory implements DSLViewFactory { + @Override + View createView(JobManagement management, String type) { + Class viewClass + if (type == null) { + viewClass = DSLViewType.ListView.viewClass + } else { + viewClass = DSLViewType.find(type).viewClass + } + + return viewClass.newInstance(management) + } +} diff --git a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/MapJobManagement.groovy b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/MapJobManagement.groovy index 5e2ca31..9a5fa14 100644 --- a/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/MapJobManagement.groovy +++ b/src/main/groovy/com/terrafolio/gradle/plugins/jenkins/jobdsl/MapJobManagement.groovy @@ -5,9 +5,12 @@ import javaposse.jobdsl.dsl.AbstractJobManagement import javaposse.jobdsl.dsl.ConfigFile import javaposse.jobdsl.dsl.ConfigFileType import javaposse.jobdsl.dsl.ConfigurationMissingException +import javaposse.jobdsl.dsl.Item import javaposse.jobdsl.dsl.JobConfigurationNotFoundException import javaposse.jobdsl.dsl.NameNotProvidedException import hudson.util.VersionNumber +import javaposse.jobdsl.dsl.UserContent +import javaposse.jobdsl.dsl.helpers.ExtensibleContext /** * Created by ghale on 4/6/14. @@ -17,8 +20,8 @@ class MapJobManagement extends AbstractJobManagement { Map parameters MapJobManagement(Map map, PrintStream out = System.out) { + super(out) this.map = map - this.out = out parameters = new Maps().newHashMap() } @@ -67,4 +70,57 @@ class MapJobManagement extends AbstractJobManagement { String getConfigFileId(ConfigFileType type, String name){ return null } + + @Override + void renameJobMatching(String previousNames, String destination) throws IOException { + } + + @Override + boolean createOrUpdateConfig(Item item, boolean ignoreExisting) throws NameNotProvidedException { + String jobName = item.name + String config = item.xml + return createOrUpdateConfig(jobName, config, ignoreExisting) + } + + @Override + void createOrUpdateUserContent(UserContent userContent, boolean ignoreExisting) { } + + @Override + void queueJob(String jobName) throws NameNotProvidedException { } + + @Override + InputStream streamFileInWorkspace(String filePath) throws IOException { + return null + } + + @Override + String readFileInWorkspace(String filePath) throws IOException { + return null + } + + @Override + String readFileInWorkspace(String jobName, String filePath) throws IOException { + return null + } + + @Override + void requirePlugin(String pluginShortName) { } + + @Override + void requireMinimumCoreVersion(String version) { } + + @Override + VersionNumber getJenkinsVersion() { + return null + } + + @Override + Set getPermissions(String authorizationMatrixPropertyClassName) { + return null + } + + @Override + Node callExtension(String name, Item item, Class contextType, Object... args) { + return null + } } diff --git a/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JenkinsViewTest.groovy b/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JenkinsViewTest.groovy index d2cadf4..7155fde 100644 --- a/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JenkinsViewTest.groovy +++ b/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JenkinsViewTest.groovy @@ -4,6 +4,7 @@ import com.terrafolio.gradle.plugins.jenkins.dsl.JenkinsConfigurationException import nebula.test.ProjectSpec import org.custommonkey.xmlunit.Diff import org.custommonkey.xmlunit.XMLUnit +import spock.lang.Unroll /** * Created by ghale on 4/11/14. @@ -14,7 +15,8 @@ class JenkinsViewTest extends ProjectSpec { project.apply plugin: 'com.terrafolio.jenkins' } - def "configure with dsl closure generates correct xml" () { + @Unroll + def "configure with dsl closure generates correct xml for #viewType" () { setup: XMLUnit.setIgnoreWhitespace(true) diff --git a/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JobFixtures.groovy b/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JobFixtures.groovy index ae3d4b2..bcd142f 100644 --- a/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JobFixtures.groovy +++ b/src/test/groovy/com/terrafolio/gradle/plugins/jenkins/test/dsl/JobFixtures.groovy @@ -37,7 +37,6 @@ class JobFixtures { false true false - false true false false