Package buildbot :: Package steps :: Package package :: Package rpm :: Module rpmbuild
[frames] | no frames]

Source Code for Module buildbot.steps.package.rpm.rpmbuild

  1  # Dan Radez <dradez+buildbot@redhat.com> 
  2  # Steve 'Ashcrow' Milner <smilner+buildbot@redhat.com> 
  3  # 
  4  # This software may be freely redistributed under the terms of the GNU 
  5  # general public license. 
  6  # 
  7  # You should have received a copy of the GNU General Public License 
  8  # along with this program; if not, write to the Free Software 
  9  # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
 10  """ 
 11  RPM Building steps. 
 12  """ 
 13   
 14  from buildbot.steps.shell import ShellCommand 
 15  from buildbot.process.buildstep import RemoteShellCommand 
 16   
 17   
18 -class RpmBuild(ShellCommand):
19 """ 20 Build and RPM based on pased spec filename 21 """ 22 23 import os.path 24 25 name = "rpmbuilder" 26 haltOnFailure = 1 27 flunkOnFailure = 1 28 description = ["RPMBUILD"] 29 descriptionDone = ["RPMBUILD"] 30
31 - def __init__(self, 32 specfile=None, 33 topdir='`pwd`', 34 builddir='`pwd`', 35 rpmdir='`pwd`', 36 sourcedir='`pwd`', 37 specdir='`pwd`', 38 srcrpmdir='`pwd`', 39 dist='.el5', 40 autoRelease=False, 41 vcsRevision=False, 42 **kwargs):
43 """ 44 Creates the RpmBuild object. 45 46 @type specfile: str 47 @param specfile: the name of the spec file for the rpmbuild 48 @type topdir: str 49 @param topdir: the top directory for rpm building. 50 @type builddir: str 51 @param builddir: the directory to use for building 52 @type rpmdir: str 53 @param rpmdir: the directory to dump the rpms into 54 @type sourcedir: str 55 @param sourcedir: the directory that houses source code 56 @type srcrpmdir: str 57 @param srcrpmdir: the directory to dump source rpms into 58 @type dist: str 59 @param dist: the distribution to build for 60 @type autoRelease: boolean 61 @param autoRelease: if the auto release mechanics should be used 62 @type vcsRevision: boolean 63 @param vcsRevision: if the vcs revision mechanics should be used 64 @type kwargs: dict 65 @param kwargs: All further keyword arguments. 66 """ 67 ShellCommand.__init__(self, **kwargs) 68 self.addFactoryArguments(topdir=topdir, 69 builddir=builddir, 70 rpmdir=rpmdir, 71 sourcedir=sourcedir, 72 specdir=specdir, 73 srcrpmdir=srcrpmdir, 74 specfile=specfile, 75 dist=dist, 76 autoRelease=autoRelease, 77 vcsRevision=vcsRevision) 78 self.rpmbuild = ( 79 'rpmbuild --define "_topdir %s" --define "_builddir %s"' 80 ' --define "_rpmdir %s" --define "_sourcedir %s"' 81 ' --define "_specdir %s" --define "_srcrpmdir %s"' 82 ' --define "dist %s"' % (topdir, builddir, rpmdir, sourcedir, 83 specdir, srcrpmdir, dist)) 84 self.specfile = specfile 85 self.autoRelease = autoRelease 86 self.vcsRevision = vcsRevision
87
88 - def start(self):
89 """ 90 Buildbot Calls Me when it's time to start 91 """ 92 if self.autoRelease: 93 relfile = '%s.release' % ( 94 self.os.path.basename(self.specfile).split('.')[0]) 95 try: 96 rfile = open(relfile, 'r') 97 rel = int(rfile.readline().strip()) 98 rfile.close() 99 except: 100 rel = 0 101 self.rpmbuild = self.rpmbuild + ' --define "_release %s"' % rel 102 rfile = open(relfile, 'w') 103 rfile.write(str(rel+1)) 104 rfile.close() 105 106 if self.vcsRevision: 107 self.rpmbuild = self.rpmbuild + ' --define "_revision %s"' % \ 108 self.getProperty('got_revision') 109 110 self.rpmbuild = self.rpmbuild + ' -ba %s' % self.specfile 111 112 self.command = ['bash', '-c', self.rpmbuild] 113 114 # create the actual RemoteShellCommand instance now 115 kwargs = self.remote_kwargs 116 kwargs['command'] = self.command 117 cmd = RemoteShellCommand(**kwargs) 118 self.setupEnvironment(cmd) 119 self.checkForOldSlaveAndLogfiles() 120 self.startCommand(cmd)
121
122 - def createSummary(self, log):
123 """ 124 Create nice summary logs. 125 126 @param log: The log to create summary off of. 127 """ 128 rpm_prefixes = ['Provides:', 'Requires(rpmlib):', 'Requires:', 129 'Checking for unpackaged', 'Wrote:', 130 'Executing(%', '+ '] 131 rpm_err_pfx = [' ', 'RPM build errors:', 'error: '] 132 133 rpmcmdlog = [] 134 rpmerrors = [] 135 136 for line in log.readlines(): 137 for pfx in rpm_prefixes: 138 if pfx in line: 139 rpmcmdlog.append(line) 140 for err in rpm_err_pfx: 141 if err in line: 142 rpmerrors.append(line) 143 self.addCompleteLog('RPM Command Log', "".join(rpmcmdlog)) 144 self.addCompleteLog('RPM Errors', "".join(rpmerrors))
145