extras-buildsys-temp/automation2/server aw_manager.py, 1.4, 1.5 bm_server.py, 1.2, 1.3 buildjob.py, 1.2, 1.3 buildmaster.py, 1.2, 1.3 CONFIG.py, 1.1, 1.2

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Fri May 13 02:55:05 UTC 2005


Author: dcbw

Update of /cvs/fedora/extras-buildsys-temp/automation2/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7982/server

Modified Files:
	aw_manager.py bm_server.py buildjob.py buildmaster.py 
	CONFIG.py 
Log Message:
2005-05-12  Dan Williams  <dcbw at redhat.com>

    * Add an SRPM build mode that short-circuits CVS checkouts to build an SRPM
        queued by the user.  This mode CANNOT be enabled at the same time as CVS
        checkout mode, since its less secure.  It should only be used for local
        building and development.  To enable this mode, set the 'use_srpm_not_cvs'
        config option to True.

        enqueue_srpm(<user>, <package name>, <path to SRPM>, <target>)




Index: aw_manager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys-temp/automation2/server/aw_manager.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- aw_manager.py	12 May 2005 17:12:00 -0000	1.4
+++ aw_manager.py	13 May 2005 02:55:03 -0000	1.5
@@ -63,7 +63,8 @@
         try:
             status = self._server.status(self.jobid)
         except Exception, e:
-            print "XMLAW: got error '%s' from AW during update_status()" % e
+            print "AWJ(%s): got error '%s' from build client while attempting " \
+                    "to get its status." % (self.awi.address(), e)
         self.status = status
         return self.status
 
@@ -117,7 +118,8 @@
             if e[0] == 111 or e[0] == 104:
                 self._unavail_count = self._unavail_count + 1
             else:
-                print "XMLAW: got error '%s' from AW during get_cur_job()" % e
+                print "AWI(%s): got error '%s' from AW while trying to get " \
+                        "current job number" % (self._address, e)
         else:
             self._unavail_count = 0
             if cur_job == 0:


Index: bm_server.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys-temp/automation2/server/bm_server.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- bm_server.py	12 May 2005 16:48:15 -0000	1.2
+++ bm_server.py	13 May 2005 02:55:03 -0000	1.3
@@ -61,6 +61,13 @@
     def enqueue(self, username, package, cvs_tag, target, buildreq=None):
         """ Accept a job to build and stuff it into the job database """
 
+        # FIXME  we should be passing back a tuple of (error/success, reason)
+
+        if CONFIG.get('use_srpm_not_cvs') == True:
+            email_result(username, cvs_tag, "Error setting up build for %s on "\
+                    "%s: this server builds SRPMs, not CVS checkouts." % (cvs_tag, target))
+            return -1
+
         print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" \
                 % (package, cvs_tag, target, username)
         targets = CONFIG.get('targets')
@@ -80,6 +87,41 @@
             self.dbcx.commit()
         return 0
 
+    def enqueue_srpm(self, username, package, srpm_file, target, buildreq=None):
+        """ Accept a job to build from SRPM file and stuff it into the job database """
+
+        # FIXME  we should be passing back a tuple of (error/success, reason)
+
+        if CONFIG.get('use_srpm_not_cvs') == False:
+            email_result(username, srpm_file, "Error setting up build for %s on "\
+                    "%s: this server builds CVS checkouts, not SRPMS." % (srpm_file, target))
+            return -1
+
+        # We limit the database field to 255 chars
+        if len(srpm_file) > 255:
+            email_result(username, srpm_file, "Error setting up build for %s on "\
+                    "%s: try using a shorter path to the SRPM (< 255 chars)." % (srpm_file, target))
+            return -1
+
+        print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" \
+                % (package, srpm_file, target, username)
+        targets = CONFIG.get('targets')
+        if not targets.has_key(target):
+            print "Error setting up build for %s on %s: target does not exist."\
+                    % (srpm_file, target)
+            email_result(username, srpm_file, "Error setting up build for %s on "\
+                    "%s: target does not exist." % (srpm_file, target))
+            return -1
+        else:
+            # Insert request into the database
+            self.curs.execute('INSERT INTO jobs (uid, username, package,' \
+                    ' cvs_tag, target, buildreq, time_submitted, status)' \
+                    ' VALUES (NULL, "%s", "%s", "%s", "%s", "%s", %d, "%s")' \
+                    % (username, package, srpm_file, target, buildreq,        \
+                    time.time(), 'waiting'))
+            self.dbcx.commit()
+        return 0
+
     def list_waiting_jobs(self):
         self.curs.execute('SELECT uid, username, package, cvs_tag, target' \
                 ' FROM jobs WHERE status="waiting"')


Index: buildjob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys-temp/automation2/server/buildjob.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- buildjob.py	12 May 2005 16:48:15 -0000	1.2
+++ buildjob.py	13 May 2005 02:55:03 -0000	1.3
@@ -71,18 +71,27 @@
     def __init__(self, uid, username, package, cvs_tag, target, arch_welder_manager):
         self.awm = arch_welder_manager
         self.uid = uid
-        self.curstage = 'initialize'
         self.username = username
         self.starttime = time.time()
         self.endtime = None
         self.stages_root = CONFIG.get('stages_root')
         self.package = package
-        self.cvs_tag = cvs_tag
         self.target = target
         self.buildarches = []
         self.sub_jobs = {}
         self.failed = False
 
+        # If we are building and SRPM, cvs_tag will be the SRPM file
+        if CONFIG.get('use_srpm_not_cvs') == True:
+            self.srpmpath = cvs_tag
+            # SRPM builds short-circut to the prep stage (which is right after make_srpm)
+            self.curstage = 'make_srpm'
+            self.cvs_tag = None
+        else:
+            self.srpmpath = None
+            self.curstage = 'initialize'
+            self.cvs_tag = cvs_tag
+
     def get_cur_stage(self):
         return self.curstage
         


Index: buildmaster.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys-temp/automation2/server/buildmaster.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- buildmaster.py	12 May 2005 16:48:15 -0000	1.2
+++ buildmaster.py	13 May 2005 02:55:03 -0000	1.3
@@ -35,7 +35,7 @@
         # If DB wasn't created, try to create it
         curs.execute('CREATE TABLE jobs (uid INTEGER PRIMARY KEY, ' \
                 'username VARCHAR(20), package VARCHAR(50), ' \
-                'cvs_tag VARCHAR(75), target VARCHAR(20), ' \
+                'cvs_tag VARCHAR(255), target VARCHAR(20), ' \
                 'buildreq VARCHAR(75), time_submitted BIGINT, ' \
                 'status VARCHAR(15))')
         dbcx.commit()
@@ -83,7 +83,7 @@
             self.dbcx.commit()
             item = self.curs.fetchone()
             if item:
-                print "%d: Adding (%s/%s/%s) to build queue" % (item['uid'], \
+                print "%d: Adding (%s/'%s'/%s) to build queue" % (item['uid'], \
                         item['package'], item['cvs_tag'], item['target'])
                 job = BuildJob(item['uid'], item['username'], item['package'],
                         item['cvs_tag'], item['target'], self.awm)


Index: CONFIG.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys-temp/automation2/server/CONFIG.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CONFIG.py	12 May 2005 16:48:15 -0000	1.1
+++ CONFIG.py	13 May 2005 02:55:03 -0000	1.2
@@ -13,6 +13,11 @@
 config_opts['redhat_internal_cvs'] = 1
 config_opts['log_url'] = "http://foo.foo.org/logs/"
 
+# This option disables pulling from CVS.  Allowing jobs to be submitted
+# as unknown SRPMs from random people may be a security risk, so don't
+# do this unless you really really want to.
+config_opts['use_srpm_not_cvs'] = False
+
 config_opts['targets'] = {  'FC-3' : ['i386', 'x86_64'],
                             'devel' : ['i386']
                          }




More information about the fedora-extras-commits mailing list