Skip to content

Commit

Permalink
fixed compatibility with Ruby Runtime Plugin
Browse files Browse the repository at this point in the history
[FIXED JENKINS-37422]
  • Loading branch information
daspilker committed Aug 29, 2016
1 parent 03d8d70 commit 8dc6921
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 5 deletions.
7 changes: 7 additions & 0 deletions docs/Home.md
Expand Up @@ -27,6 +27,13 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins

## Release Notes
* 1.51 (unreleased)
* Fixed compatibility issue with [Ruby Runtime Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Ruby+Runtime+Plugin)
([JENKINS-37422](https://issues.jenkins-ci.org/browse/JENKINS-37422))
* Support for the older versions of the [RVM Plugin](https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin) is
deprecated, see [Migration](Migration#migrating-to-151)
* Support for the older versions of the
[Ruby Runtime Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Ruby+Runtime+Plugin) is deprecated, see
[Migration](Migration#migrating-to-151)
* 1.50 (August 17 2016)
* Fixed regression when updating views
([JENKINS-37450](https://issues.jenkins-ci.org/browse/JENKINS-37450))
Expand Down
13 changes: 13 additions & 0 deletions docs/Migration.md
@@ -1,3 +1,16 @@
## Migrating to 1.51

### RVM

Support for versions older than 0.6 of the [RVM Plugin](https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin) is
[[deprecated|Deprecation-Policy]] and will be removed.

### Ruby Runtime

Support for versions older than 0.13 of the
[Ruby Runtime Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Ruby+Runtime+Plugin) is
[[deprecated|Deprecation-Policy]] and will be removed.

## Migrating to 1.49

### ScriptLocation
Expand Down
Expand Up @@ -8,6 +8,7 @@ import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.dsl.Preconditions
import javaposse.jobdsl.dsl.RequiresPlugin
import javaposse.jobdsl.dsl.AbstractExtensibleContext
import javaposse.jobdsl.dsl.RequiresPlugins

@ContextType('hudson.tasks.BuildWrapper')
class WrapperContext extends AbstractExtensibleContext {
Expand Down Expand Up @@ -51,13 +52,16 @@ class WrapperContext extends AbstractExtensibleContext {
*
* @since 1.27
*/
@RequiresPlugin(id = 'rbenv')
@RequiresPlugins([
@RequiresPlugin(id = 'rbenv'),
@RequiresPlugin(id = 'ruby-runtime')
])
void rbenv(String rubyVersion, @DslContext(RbenvContext) Closure rbenvClosure = null) {
RbenvContext rbenvContext = new RbenvContext()
ContextHelper.executeInContext(rbenvClosure, rbenvContext)

wrapperNodes << new NodeBuilder().'ruby-proxy-object' {
'ruby-object'('ruby-class': 'Jenkins::Tasks::BuildWrapperProxy', pluginid: 'rbenv') {
'ruby-object'('ruby-class': rubyWrapperClass, pluginid: 'rbenv') {
pluginid('rbenv', [pluginid: 'rbenv', 'ruby-class': 'String'])
object('ruby-class': 'RbenvWrapper', pluginid: 'rbenv') {
version(rubyVersion, [pluginid: 'rbenv', 'ruby-class': 'String'])
Expand All @@ -82,12 +86,17 @@ class WrapperContext extends AbstractExtensibleContext {
* optionally containing a gemset
* (i.e. ruby-1.9.3, ruby-2.0.0@gemset-foo)
*/
@RequiresPlugin(id = 'rvm')
@RequiresPlugins([
@RequiresPlugin(id = 'rvm'),
@RequiresPlugin(id = 'ruby-runtime')
])
void rvm(String rubySpecification) {
jobManagement.logPluginDeprecationWarning('rvm', '0.6')

Preconditions.checkArgument(rubySpecification as Boolean, 'Please specify at least the ruby version')

wrapperNodes << new NodeBuilder().'ruby-proxy-object' {
'ruby-object'('ruby-class': 'Jenkins::Plugin::Proxies::BuildWrapper', pluginid: 'rvm') {
'ruby-object'('ruby-class': rubyWrapperClass, pluginid: 'rvm') {

pluginid('rvm', [pluginid: 'rvm', 'ruby-class': 'String'])
object('ruby-class': 'RvmWrapper', pluginid: 'rvm') {
Expand All @@ -97,6 +106,13 @@ class WrapperContext extends AbstractExtensibleContext {
}
}

private String getRubyWrapperClass() {
jobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')

jobManagement.isMinimumPluginVersionInstalled('ruby-runtime', '0.13') ? 'Jenkins::Tasks::BuildWrapperProxy' :
'Jenkins::Plugin::Proxies::BuildWrapper'
}

/**
* Add a timeout to the build job.
*
Expand Down
Expand Up @@ -46,7 +46,10 @@ class WrapperContextSpec extends Specification {
1 * mockJobManagement.requirePlugin('job-node-stalker')
}

def 'add rbenv-controlled ruby version'() {
def 'add rbenv-controlled ruby version with'() {
setup:
mockJobManagement.isMinimumPluginVersionInstalled('ruby-runtime', '0.13') >> true

when:
context.rbenv('2.1.2')

Expand Down Expand Up @@ -87,6 +90,53 @@ class WrapperContextSpec extends Specification {
ruby__build__revision[0].'@ruby-class' == 'String'
}
1 * mockJobManagement.requirePlugin('rbenv')
1 * mockJobManagement.requirePlugin('ruby-runtime')
1 * mockJobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')
}

def 'add rbenv-controlled ruby version with older runtime'() {
when:
context.rbenv('2.1.2')

then:
context.wrapperNodes[0].name() == 'ruby-proxy-object'
def rootObject = context.wrapperNodes[0].'ruby-object'[0]
rootObject.'@pluginid' == 'rbenv'
rootObject.'@ruby-class' == 'Jenkins::Plugin::Proxies::BuildWrapper'
rootObject.'pluginid'[0].value() == 'rbenv'
rootObject.'pluginid'[0].'@ruby-class' == 'String'
rootObject.'pluginid'[0].'@pluginid' == 'rbenv'
rootObject.object[0].'@ruby-class' == 'RbenvWrapper'
rootObject.object[0].'@pluginid' == 'rbenv'
with(rootObject.object[0]) {
version[0].value() == '2.1.2'
version[0].'@pluginid' == 'rbenv'
version[0].'@ruby-class' == 'String'
ignore__local__version[0].value() == false
ignore__local__version[0].'@pluginid' == 'rbenv'
ignore__local__version[0].'@ruby-class' == 'String'
gem__list[0].value() == ''
gem__list[0].'@pluginid' == 'rbenv'
gem__list[0].'@ruby-class' == 'String'
rbenv__root[0].value() == '$HOME/.rbenv'
rbenv__root[0].'@pluginid' == 'rbenv'
rbenv__root[0].'@ruby-class' == 'String'
rbenv__repository[0].value() == 'https://github.com/sstephenson/rbenv.git'
rbenv__repository[0].'@pluginid' == 'rbenv'
rbenv__repository[0].'@ruby-class' == 'String'
rbenv__revision[0].value() == 'master'
rbenv__revision[0].'@pluginid' == 'rbenv'
rbenv__revision[0].'@ruby-class' == 'String'
ruby__build__repository[0].value() == 'https://github.com/sstephenson/ruby-build.git'
ruby__build__repository[0].'@pluginid' == 'rbenv'
ruby__build__repository[0].'@ruby-class' == 'String'
ruby__build__revision[0].value() == 'master'
ruby__build__revision[0].'@pluginid' == 'rbenv'
ruby__build__revision[0].'@ruby-class' == 'String'
}
1 * mockJobManagement.requirePlugin('rbenv')
1 * mockJobManagement.requirePlugin('ruby-runtime')
1 * mockJobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')
}

def 'add rbenv-controlled override defaults'() {
Expand Down Expand Up @@ -114,16 +164,39 @@ class WrapperContextSpec extends Specification {
ruby__build__revision[0].value() == '1.0'
}
1 * mockJobManagement.requirePlugin('rbenv')
1 * mockJobManagement.requirePlugin('ruby-runtime')
1 * mockJobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')
}

def 'add rvm-controlled ruby version'() {
setup:
mockJobManagement.isMinimumPluginVersionInstalled('ruby-runtime', '0.13') >> true

when:
context.rvm('ruby-1.9.3')

then:
context.wrapperNodes[0].name() == 'ruby-proxy-object'
context.wrapperNodes[0].'ruby-object'[0].object[0].impl[0].value() == 'ruby-1.9.3'
context.wrapperNodes[0].'ruby-object'[0].attribute('ruby-class') == 'Jenkins::Tasks::BuildWrapperProxy'
1 * mockJobManagement.requirePlugin('rvm')
1 * mockJobManagement.requirePlugin('ruby-runtime')
1 * mockJobManagement.logPluginDeprecationWarning('rvm', '0.6')
1 * mockJobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')
}

def 'add rvm-controlled ruby version with older runtime'() {
when:
context.rvm('ruby-1.9.3')

then:
context.wrapperNodes[0].name() == 'ruby-proxy-object'
context.wrapperNodes[0].'ruby-object'[0].object[0].impl[0].value() == 'ruby-1.9.3'
context.wrapperNodes[0].'ruby-object'[0].attribute('ruby-class') == 'Jenkins::Plugin::Proxies::BuildWrapper'
1 * mockJobManagement.requirePlugin('rvm')
1 * mockJobManagement.requirePlugin('ruby-runtime')
1 * mockJobManagement.logPluginDeprecationWarning('rvm', '0.6')
1 * mockJobManagement.logPluginDeprecationWarning('ruby-runtime', '0.13')
}

def 'default timeout works'() {
Expand Down

0 comments on commit 8dc6921

Please sign in to comment.