Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/buildbot/buildbot/steps/package/rpm/rpmbuild.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot/buildbot/steps/package/rpm/rpmbuild.py')
-rw-r--r--buildbot/buildbot/steps/package/rpm/rpmbuild.py144
1 files changed, 144 insertions, 0 deletions
diff --git a/buildbot/buildbot/steps/package/rpm/rpmbuild.py b/buildbot/buildbot/steps/package/rpm/rpmbuild.py
new file mode 100644
index 0000000..38bce85
--- /dev/null
+++ b/buildbot/buildbot/steps/package/rpm/rpmbuild.py
@@ -0,0 +1,144 @@
+# Dan Radez <dradez+buildbot@redhat.com>
+# Steve 'Ashcrow' Milner <smilner+buildbot@redhat.com>
+#
+# This software may be freely redistributed under the terms of the GNU
+# general public license.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+"""
+RPM Building steps.
+"""
+
+from buildbot.steps.shell import ShellCommand
+from buildbot.process.buildstep import RemoteShellCommand
+
+
+class RpmBuild(ShellCommand):
+ """
+ Build and RPM based on pased spec filename
+ """
+
+ import os.path
+
+ name = "rpmbuilder"
+ haltOnFailure = 1
+ flunkOnFailure = 1
+ description = ["RPMBUILD"]
+ descriptionDone = ["RPMBUILD"]
+
+ def __init__(self,
+ specfile=None,
+ topdir='`pwd`',
+ builddir='`pwd`',
+ rpmdir='`pwd`',
+ sourcedir='`pwd`',
+ specdir='`pwd`',
+ srcrpmdir='`pwd`',
+ dist='.el5',
+ autoRelease=False,
+ vcsRevision=False,
+ **kwargs):
+ """
+ Creates the RpmBuild object.
+
+ @type specfile: str
+ @param specfile: the name of the spec file for the rpmbuild
+ @type topdir: str
+ @param topdir: the top directory for rpm building.
+ @type builddir: str
+ @param builddir: the directory to use for building
+ @type rpmdir: str
+ @param rpmdir: the directory to dump the rpms into
+ @type sourcedir: str
+ @param sourcedir: the directory that houses source code
+ @type srcrpmdir: str
+ @param srcrpmdir: the directory to dump source rpms into
+ @type dist: str
+ @param dist: the distribution to build for
+ @type autoRelease: boolean
+ @param autoRelease: if the auto release mechanics should be used
+ @type vcsRevision: boolean
+ @param vcsRevision: if the vcs revision mechanics should be used
+ @type kwargs: dict
+ @param kwargs: All further keyword arguments.
+ """
+ ShellCommand.__init__(self, **kwargs)
+ self.addFactoryArguments(topdir=topdir,
+ builddir=builddir,
+ rpmdir=rpmdir,
+ sourcedir=sourcedir,
+ specdir=specdir,
+ srcrpmdir=srcrpmdir,
+ specfile=specfile,
+ dist=dist,
+ autoRelease=autoRelease,
+ vcsRevision=vcsRevision)
+ self.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))
+ self.specfile = specfile
+ self.autoRelease = autoRelease
+ self.vcsRevision = vcsRevision
+
+ def start(self):
+ """
+ Buildbot Calls Me when it's time to start
+ """
+ if self.autoRelease:
+ relfile = '%s.release' % (
+ self.os.path.basename(self.specfile).split('.')[0])
+ try:
+ rfile = open(relfile, 'r')
+ rel = int(rfile.readline().strip())
+ rfile.close()
+ except:
+ rel = 0
+ self.rpmbuild = self.rpmbuild + ' --define "_release %s"' % rel
+ rfile = open(relfile, 'w')
+ rfile.write(str(rel+1))
+ rfile.close()
+
+ if self.vcsRevision:
+ self.rpmbuild = self.rpmbuild + ' --define "_revision %s"' % \
+ self.getProperty('got_revision')
+
+ self.rpmbuild = self.rpmbuild + ' -ba %s' % self.specfile
+
+ self.command = ['bash', '-c', self.rpmbuild]
+
+ # create the actual RemoteShellCommand instance now
+ kwargs = self.remote_kwargs
+ kwargs['command'] = self.command
+ cmd = RemoteShellCommand(**kwargs)
+ self.setupEnvironment(cmd)
+ self.checkForOldSlaveAndLogfiles()
+ self.startCommand(cmd)
+
+ def createSummary(self, log):
+ """
+ Create nice summary logs.
+
+ @param log: The log to create summary off of.
+ """
+ rpm_prefixes = ['Provides:', 'Requires(rpmlib):', 'Requires:',
+ 'Checking for unpackaged', 'Wrote:',
+ 'Executing(%', '+ ']
+ rpm_err_pfx = [' ', 'RPM build errors:', 'error: ']
+
+ rpmcmdlog = []
+ rpmerrors = []
+
+ for line in log.readlines():
+ for pfx in rpm_prefixes:
+ if pfx in line:
+ rpmcmdlog.append(line)
+ for err in rpm_err_pfx:
+ if err in line:
+ rpmerrors.append(line)
+ self.addCompleteLog('RPM Command Log', "".join(rpmcmdlog))
+ self.addCompleteLog('RPM Errors', "".join(rpmerrors))