From efa6f231ee2412b707df72987c93f36c04df5130 Mon Sep 17 00:00:00 2001 From: Eli Klein Date: Fri, 3 Jan 2014 22:53:42 -0700 Subject: [PATCH] Added rbenv wrapper Change-Id: Iefab7b71b96998789a66b3e1ea03f28fbfc38391 --- jenkins_jobs/modules/wrappers.py | 86 +++++++++++++++++++++++++++ setup.py | 1 + tests/wrappers/fixtures/rbenv001.xml | 20 +++++++ tests/wrappers/fixtures/rbenv001.yaml | 2 + tests/wrappers/fixtures/rbenv002.xml | 20 +++++++ tests/wrappers/fixtures/rbenv002.yaml | 4 ++ tests/wrappers/fixtures/rbenv003.xml | 20 +++++++ tests/wrappers/fixtures/rbenv003.yaml | 10 ++++ 8 files changed, 163 insertions(+) create mode 100644 tests/wrappers/fixtures/rbenv001.xml create mode 100644 tests/wrappers/fixtures/rbenv001.yaml create mode 100644 tests/wrappers/fixtures/rbenv002.xml create mode 100644 tests/wrappers/fixtures/rbenv002.yaml create mode 100644 tests/wrappers/fixtures/rbenv003.xml create mode 100644 tests/wrappers/fixtures/rbenv003.yaml diff --git a/jenkins_jobs/modules/wrappers.py b/jenkins_jobs/modules/wrappers.py index 1906b84aa..bd73c1930 100644 --- a/jenkins_jobs/modules/wrappers.py +++ b/jenkins_jobs/modules/wrappers.py @@ -237,6 +237,92 @@ def rvm_env(parser, xml_parent, data): 'ruby-class': 'String'}).text = "rvm" +def rbenv(parser, xml_parent, data): + """yaml: rbenv + Set the rbenv implementation. + Requires the Jenkins `rbenv plugin. + `_ + + All parameters are optional. + + :arg str ruby-version: Version of Ruby to use (default: 1.9.3-p484) + :arg bool ignore-local-version: If true, ignore local Ruby + version (defined in the ".ruby-version" file in workspace) even if it + has been defined (default: false) + :arg str preinstall-gem-list: List of gems to install + (default: 'bundler,rake') + :arg str rbenv-root: RBENV_ROOT (default: $HOME/.rbenv) + :arg str rbenv-repo: Which repo to clone rbenv from + (default: https://github.com/sstephenson/rbenv.git) + :arg str rbenv-branch: Which branch to clone rbenv from (default: master) + :arg str ruby-build-repo: Which repo to clone ruby-build from + (default: https://github.com/sstephenson/ruby-build.git) + :arg str ruby-build-branch: Which branch to clone ruby-build from + (default: master) + + Example: + + .. literalinclude:: /../../tests/wrappers/fixtures/rbenv003.yaml + """ + + mapping = [ + # option, xml name, default value (text), attributes (hard coded) + ("preinstall-gem-list", 'gem__list', 'bundler,rake'), + ("rbenv-root", 'rbenv__root', '$HOME/.rbenv'), + ("rbenv-repo", 'rbenv__repository', + 'https://github.com/sstephenson/rbenv.git'), + ("rbenv-branch", 'rbenv__revision', 'master'), + ("ruby-build-repo", 'ruby__build__repository', + 'https://github.com/sstephenson/ruby-build.git'), + ("ruby-build-branch", 'ruby__build__revision', 'master'), + ("ruby-version", 'version', '1.9.3-p484'), + ] + + rpo = XML.SubElement(xml_parent, + 'ruby-proxy-object') + + ro_class = "Jenkins::Tasks::BuildWrapperProxy" + ro = XML.SubElement(rpo, + 'ruby-object', + {'ruby-class': ro_class, + 'pluginid': 'rbenv'}) + + XML.SubElement(ro, + 'pluginid', + {'pluginid': "rbenv", + 'ruby-class': "String"}).text = "rbenv" + + o = XML.SubElement(ro, + 'object', + {'ruby-class': 'RbenvWrapper', + 'pluginid': 'rbenv'}) + + for elem in mapping: + (optname, xmlname, val) = elem[:3] + xe = XML.SubElement(o, + xmlname, + {'ruby-class': "String", + 'pluginid': "rbenv"}) + if optname and optname in data: + val = data[optname] + if type(val) == bool: + xe.text = str(val).lower() + else: + xe.text = val + + ignore_local_class = 'FalseClass' + + if 'ignore-local-version' in data: + ignore_local_string = str(data['ignore-local-version']).lower() + if ignore_local_string == 'true': + ignore_local_class = 'TrueClass' + + XML.SubElement(o, + 'ignore__local__version', + {'ruby-class': ignore_local_class, + 'pluginid': 'rbenv'}) + + def build_name(parser, xml_parent, data): """yaml: build-name Set the name of the build diff --git a/setup.py b/setup.py index 35421995e..f14a9a510 100644 --- a/setup.py +++ b/setup.py @@ -204,6 +204,7 @@ setuptools.setup( 'port-allocator=jenkins_jobs.modules.wrappers:port_allocator', ('pre-scm-buildstep=' 'jenkins_jobs.modules.wrappers:pre_scm_buildstep'), + 'rbenv=jenkins_jobs.modules.wrappers:rbenv', 'release=jenkins_jobs.modules.wrappers:release', 'rvm-env=jenkins_jobs.modules.wrappers:rvm_env', 'sauce-ondemand=jenkins_jobs.modules.wrappers:sauce_ondemand', diff --git a/tests/wrappers/fixtures/rbenv001.xml b/tests/wrappers/fixtures/rbenv001.xml new file mode 100644 index 000000000..0d6c990cc --- /dev/null +++ b/tests/wrappers/fixtures/rbenv001.xml @@ -0,0 +1,20 @@ + + + + + + rbenv + + bundler,rake + $HOME/.rbenv + https://github.com/sstephenson/rbenv.git + master + https://github.com/sstephenson/ruby-build.git + master + 1.9.3-p484 + + + + + + diff --git a/tests/wrappers/fixtures/rbenv001.yaml b/tests/wrappers/fixtures/rbenv001.yaml new file mode 100644 index 000000000..8403e6aa2 --- /dev/null +++ b/tests/wrappers/fixtures/rbenv001.yaml @@ -0,0 +1,2 @@ +wrappers: + - rbenv diff --git a/tests/wrappers/fixtures/rbenv002.xml b/tests/wrappers/fixtures/rbenv002.xml new file mode 100644 index 000000000..d250abea2 --- /dev/null +++ b/tests/wrappers/fixtures/rbenv002.xml @@ -0,0 +1,20 @@ + + + + + + rbenv + + bundler,rake + $HOME/.rbenv + https://github.com/sstephenson/rbenv.git + master + https://github.com/sstephenson/ruby-build.git + master + 2.0.0-p353 + + + + + + diff --git a/tests/wrappers/fixtures/rbenv002.yaml b/tests/wrappers/fixtures/rbenv002.yaml new file mode 100644 index 000000000..1e277bf99 --- /dev/null +++ b/tests/wrappers/fixtures/rbenv002.yaml @@ -0,0 +1,4 @@ +wrappers: + - rbenv: + ruby-version: 2.0.0-p353 + ignore-local-version: true diff --git a/tests/wrappers/fixtures/rbenv003.xml b/tests/wrappers/fixtures/rbenv003.xml new file mode 100644 index 000000000..a930dfd13 --- /dev/null +++ b/tests/wrappers/fixtures/rbenv003.xml @@ -0,0 +1,20 @@ + + + + + + rbenv + + bundler,rake + $HOME/.rbenv + https://github.com/sstephenson/rbenv.git + master + https://github.com/sstephenson/ruby-build.git + master + 2.0.0-p353 + + + + + + diff --git a/tests/wrappers/fixtures/rbenv003.yaml b/tests/wrappers/fixtures/rbenv003.yaml new file mode 100644 index 000000000..857ba38ce --- /dev/null +++ b/tests/wrappers/fixtures/rbenv003.yaml @@ -0,0 +1,10 @@ +wrappers: + - rbenv: + ruby-version: 2.0.0-p353 + ignore-local-version: false + preinstall-gem-list: "bundler,rake" + rbenv-root: "$HOME/.rbenv" + rbenv-repo: "https://github.com/sstephenson/rbenv.git" + rbenv-branch: "master" + ruby-build-repo: "https://github.com/sstephenson/ruby-build.git" + ruby-build-branch: "master"