diff options
-rwxr-xr-x | script/autobuild.py | 105 |
1 files changed, 54 insertions, 51 deletions
diff --git a/script/autobuild.py b/script/autobuild.py index 10dd7a3133..3807bd5baf 100755 --- a/script/autobuild.py +++ b/script/autobuild.py @@ -17,45 +17,45 @@ cleanup_list = [] os.putenv('CC', "ccache gcc") tasks = { - "source3" : [ "./autogen.sh", - "./configure.developer ${PREFIX}", - "make basics", - "make -j 4 everything", # don't use too many processes - "make install", - "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1" ], - - "source4" : [ "./configure.developer ${PREFIX}", - "make -j", - "make install", - "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1" ], - - "source4/lib/ldb" : [ "./configure --enable-developer -C ${PREFIX}", - "make -j", - "make install", - "make test" ], - - "lib/tdb" : [ "./autogen-waf.sh", - "./configure --enable-developer -C ${PREFIX}", - "make -j", - "make install", - "make test" ], - - "lib/talloc" : [ "./autogen-waf.sh", - "./configure --enable-developer -C ${PREFIX}", - "make -j", - "make install", - "make test" ], - - "lib/replace" : [ "./autogen-waf.sh", - "./configure --enable-developer -C ${PREFIX}", - "make -j", - "make install", - "make test" ], - - "lib/tevent" : [ "./configure --enable-developer -C ${PREFIX}", - "make -j", - "make install", - "make test" ], + "source3" : [ ("autogen", "./autogen.sh", "text/plain"), + ("configure", "./configure.developer ${PREFIX}", "text/plain"), + ("make basics", "make basics", "text/plain"), + ("make", "make -j 4 everything", "text/plain"), # don't use too many processes + ("install", "make install", "text/plain"), + ("test", "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1", "text/plain") ], + + "source4" : [ ("configure", "./configure.developer ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1", "text/plain") ], + + "source4/lib/ldb" : [ ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "make test", "text/plain") ], + + "lib/tdb" : [ ("autogen", "./autogen-waf.sh", "text/plain"), + ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "make test", "text/plain") ], + + "lib/talloc" : [ ("autogen", "./autogen-waf.sh", "text/plain"), + ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "make test", "text/plain"), ], + + "lib/replace" : [ ("autogen", "./autogen-waf.sh", "text/plain"), + ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "make test", "text/plain"), ], + + "lib/tevent" : [ ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"), + ("make", "make -j", "text/plain"), + ("install", "make install", "text/plain"), + ("test", "make test", "text/plain"), ], } retry_task = [ '''set -e @@ -87,8 +87,9 @@ def run_cmd(cmd, dir=".", show=None, output=False, checkfail=True): raise Exception("FAILED %s: %d" % (cmd, ret)) return ret -class builder: +class builder(object): '''handle build of one directory''' + def __init__(self, name, sequence): self.name = name @@ -124,8 +125,9 @@ class builder: print '%s: Completed OK' % self.name self.done = True return - self.cmd = self.sequence[self.next].replace("${PREFIX}", "--prefix=%s" % self.prefix) - print '%s: Running %s' % (self.name, self.cmd) + (self.stage, self.cmd, self.output_mime_type) = self.sequence[self.next] + self.cmd = self.cmd.replace("${PREFIX}", "--prefix=%s" % self.prefix) + print '%s: [%s] Running %s' % (self.name, self.stage, self.cmd) cwd = os.getcwd() os.chdir("%s/%s" % (self.sdir, self.dir)) self.proc = Popen(self.cmd, shell=True, @@ -134,17 +136,18 @@ class builder: self.next += 1 -class buildlist: +class buildlist(object): '''handle build of multiple directories''' + def __init__(self, tasklist, tasknames): global tasks self.tlist = [] self.tail_proc = None self.retry = None if tasknames == ['pass']: - tasks = { 'pass' : [ '/bin/true' ]} + tasks = { 'pass' : [ ("pass", '/bin/true', "text/plain") ]} if tasknames == ['fail']: - tasks = { 'fail' : [ '/bin/false' ]} + tasks = { 'fail' : [ ("fail", '/bin/false', "text/plain") ]} if tasknames == []: tasknames = tasklist for n in tasknames: @@ -203,10 +206,10 @@ class buildlist: break if os.WIFSIGNALED(b.status) or os.WEXITSTATUS(b.status) != 0: self.kill_kids() - return (b.status, b.name, b.tag, "%s: failed '%s' with status %d" % (b.name, b.cmd, b.status)) + return (b.status, b.name, b.stage, b.tag, "%s: [%s] failed '%s' with status %d" % (b.name, b.stage, b.cmd, b.status)) b.start_next() self.kill_kids() - return (0, None, None, "All OK") + return (0, None, None, None, "All OK") def tarlogs(self, fname): tar = tarfile.open(fname, "w:gz") @@ -325,7 +328,7 @@ parser.add_option("", "--daemon", help="daemonize after initial setup", action="store_true") -def email_failure(status, failed_task, failed_tag, errstr): +def email_failure(status, failed_task, failed_stage, failed_tag, errstr): '''send an email to options.email about the failure''' user = os.getenv("USER") text = ''' @@ -347,7 +350,7 @@ or you can get full logs of all tasks in this job here: ''' % (failed_task, errstr, user, failed_tag, user, failed_tag, user) msg = MIMEText(text) - msg['Subject'] = 'autobuild failure for task %s' % failed_task + msg['Subject'] = 'autobuild failure for task %s during %s' % (failed_task, failed_stage) msg['From'] = 'autobuild@samba.org' msg['To'] = options.email @@ -426,7 +429,7 @@ while True: blist = buildlist(tasks, args) if options.tail: blist.start_tail() - (status, failed_task, failed_tag, errstr) = blist.run() + (status, failed_task, failed_stage, failed_tag, errstr) = blist.run() if status != 0 or errstr != "retry": break cleanup() @@ -462,7 +465,7 @@ if status == 0: blist.tarlogs("logs.tar.gz") if options.email is not None: - email_failure(status, failed_task, failed_tag, errstr) + email_failure(status, failed_task, failed_stage, failed_tag, errstr) cleanup() print(errstr) |