Skip to content

Commit

Permalink
Make rpm dist renderable
Browse files Browse the repository at this point in the history
  • Loading branch information
anish committed Jul 11, 2016
1 parent 00a48de commit b46b56f
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 10 deletions.
31 changes: 23 additions & 8 deletions master/buildbot/steps/package/rpm/rpmbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class RpmBuild(ShellCommand):
RpmBuild build step.
"""

renderables = ['dist']
name = "rpmbuilder"
haltOnFailure = 1
flunkOnFailure = 1
Expand All @@ -42,7 +43,7 @@ def __init__(self,
sourcedir='`pwd`',
specdir='`pwd`',
srcrpmdir='`pwd`',
dist='.el5',
dist='.el6',
autoRelease=False,
vcsRevision=False,
**kwargs):
Expand Down Expand Up @@ -71,12 +72,16 @@ def __init__(self,
@param vcsRevision: Use vcs version number as revision number.
"""
ShellCommand.__init__(self, **kwargs)
self.rpmbuild = (

self.dist = dist

self.base_rpmbuild = (
'rpmbuild --define "_topdir %s" --define "_builddir %s"'
' --define "_rpmdir %s" --define "_sourcedir %s"'
' --define "_specdir %s" --define "_srcrpmdir %s"'
' --define "dist %s"' % (topdir, builddir, rpmdir, sourcedir,
specdir, srcrpmdir, dist))
% (topdir, builddir, rpmdir, sourcedir, specdir,
srcrpmdir))

self.specfile = specfile
self.autoRelease = autoRelease
self.vcsRevision = vcsRevision
Expand All @@ -88,6 +93,10 @@ def __init__(self,
'stdio', logobserver.LineConsumerLogObserver(self.logConsumer))

def start(self):

rpm_extras_dict = {}
rpm_extras_dict['dist'] = self.dist

if self.autoRelease:
relfile = '%s.release' % (
os.path.basename(self.specfile).split('.')[0])
Expand All @@ -96,18 +105,24 @@ def start(self):
rel = int(rfile.readline().strip())
except (IOError, TypeError, ValueError):
rel = 0
self.rpmbuild = self.rpmbuild + ' --define "_release %s"' % rel
rpm_extras_dict['_release'] = rel
with open(relfile, 'w') as rfile:
rfile.write(str(rel + 1))

if self.vcsRevision:
revision = self.getProperty('got_revision')
# only do this in the case where there's a single codebase
if revision and not isinstance(revision, dict):
self.rpmbuild = (self.rpmbuild + ' --define "_revision %s"' %
revision)
rpm_extras_dict['_revision'] = revision

self.rpmbuild = self.base_rpmbuild

# The unit tests expect a certain order, so we sort the dict to keep
# format the same every time
for k, v in sorted(rpm_extras_dict.iteritems()):
self.rpmbuild = '{0} --define "{1} {2}"'.format(self.rpmbuild, k, v)

self.rpmbuild = self.rpmbuild + ' -ba %s' % self.specfile
self.rpmbuild = '{0} -ba {1}'.format(self.rpmbuild, self.specfile)

self.command = self.rpmbuild

Expand Down
22 changes: 20 additions & 2 deletions master/buildbot/test/unit/test_steps_package_rpm_rpmbuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Copyright Buildbot Team Members
from twisted.internet import defer
from twisted.trial import unittest

from buildbot import config
from buildbot.process.properties import Interpolate
from buildbot.process.results import SUCCESS
from buildbot.steps.package.rpm import rpmbuild
from buildbot.test.fake.remotecommand import ExpectShell
Expand Down Expand Up @@ -54,10 +56,26 @@ def test_autoRelease(self):
ExpectShell(workdir='wkdir', command='rpmbuild --define "_topdir '
'`pwd`" --define "_builddir `pwd`" --define "_rpmdir `pwd`" '
'--define "_sourcedir `pwd`" --define "_specdir `pwd`" '
'--define "_srcrpmdir `pwd`" --define "dist .el6" '
'--define "_release 0" -ba foo.spec')
'--define "_srcrpmdir `pwd`" --define "_release 0" '
'--define "dist .el6" -ba foo.spec')
+ ExpectShell.log('stdio',
stdout='Your code has been rated at 10/10')
+ 0)
self.expectOutcome(result=SUCCESS, state_string='RPMBUILD')
return self.runStep()

@defer.inlineCallbacks
def test_renderable_dist(self):
self.setupStep(rpmbuild.RpmBuild(specfile="foo.spec", dist=Interpolate('%(prop:renderable_dist)s')))
self.properties.setProperty('renderable_dist', '.el7', 'test')
self.expectCommands(
ExpectShell(workdir='wkdir', command='rpmbuild --define "_topdir '
'`pwd`" --define "_builddir `pwd`" --define "_rpmdir '
'`pwd`" --define "_sourcedir `pwd`" --define "_specdir '
'`pwd`" --define "_srcrpmdir `pwd`" --define "dist .el7" '
'-ba foo.spec')
+ ExpectShell.log('stdio',
stdout='lalala')
+ 0)
self.expectOutcome(result=SUCCESS, state_string='RPMBUILD')
yield self.runStep()
2 changes: 2 additions & 0 deletions master/docs/relnotes/0.9.0rc1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ Features

* :bb:worker:`OpenStackLatentWorker` now uses a single novaclient instance to not require re-authentication when starting or stopping instances.

* The ``dist`` parameter in :bb:step:`RpmBuild` is now renderable.

Fixes
~~~~~

Expand Down

0 comments on commit b46b56f

Please sign in to comment.