X-Git-Url: https://git.tld-linux.org/?p=TLD.git;a=blobdiff_plain;f=pld-builder.new%2FPLD_Builder%2Fbuild.py;fp=pld-builder.new%2FPLD_Builder%2Fbuild.py;h=e996731bcc5159e30d91be8f1489259513d5da88;hp=0000000000000000000000000000000000000000;hb=90809c8fec988489786ce00247d9a4150070748b;hpb=ab3934fab858112cd552359b18cb980ea07c310b diff --git a/pld-builder.new/PLD_Builder/build.py b/pld-builder.new/PLD_Builder/build.py new file mode 100644 index 0000000..e996731 --- /dev/null +++ b/pld-builder.new/PLD_Builder/build.py @@ -0,0 +1,120 @@ +# vi: encoding=utf-8 ts=8 sts=4 sw=4 et + +import string +import os +import atexit + +import notify +import path +import util +import chroot +import stopwatch +import report +import log +import buildlogs +import status +from config import config, init_conf + + + +def run_command(batch): + # we want to keep "skip" in queue.html + command = batch.command + + # rewrite special "skip:BUILD_ID into touch + if command[:5] == "skip:": + c = "" + for id in command[5:].split(','): + if os.path.isdir(path.srpms_dir + '/' + id): + c = c + "echo skip:%s;\n" % (id) + c = c + "touch %s/%s/skipme;\n" % (path.srpms_dir, id) + else: + c = c + "echo %s is not valid build-id;\n" % (id) + command = c + + if "no-chroot" in batch.command_flags: + # TODO: the append here by shell hack should be solved in python + c = "(%s) >> %s 2>&1" % (command, batch.logfile) + f = os.popen(c) + for l in f.xreadlines(): + pass + r = f.close() + if r == None: + return 0 + else: + return r + else: + user = "root" + if "as-builder" in batch.command_flags: + user = "builder" + return chroot.run(command, logfile = batch.logfile, user = user) + +def build_all(r, build_fnc): + status.email = r.requester_email + notify.begin(r) + tmp = path.build_dir + '/' + util.uuid() + "/" + r.tmp_dir = tmp + os.mkdir(tmp) + atexit.register(util.clean_tmp, tmp) + + log.notice("started processing %s" % r.id) + r.chroot_files = [] + r.some_ok = 0 + for batch in r.batches: + can_build = 1 + failed_dep = "" + for dep in batch.depends_on: + if dep.build_failed: + can_build = 0 + failed_dep = dep.spec + + if batch.is_command() and can_build: + batch.logfile = tmp + "command" + if config.builder in batch.builders: + log.notice("running %s" % batch.command) + stopwatch.start() + batch.build_failed = run_command(batch) + if batch.build_failed: + log.notice("running %s FAILED" % batch.command) + notify.add_batch(batch, "FAIL") + else: + r.some_ok = 1 + log.notice("running %s OK" % batch.command) + notify.add_batch(batch, "OK") + batch.build_time = stopwatch.stop() + report.add_pld_builder_info(batch) + buildlogs.add(batch.logfile, failed = batch.build_failed, id=r.id) + else: + log.notice("not running command, not for me.") + batch.build_failed = 0 + batch.log_line("queued command %s for other builders" % batch.command) + r.some_ok = 1 + buildlogs.add(batch.logfile, failed = batch.build_failed, id=r.id) + elif can_build: + log.notice("building %s" % batch.spec) + stopwatch.start() + batch.logfile = tmp + batch.spec + ".log" + batch.gb_id=r.id + batch.requester=r.requester + batch.requester_email=r.requester_email + batch.build_failed = build_fnc(r, batch) + if batch.build_failed: + log.notice("building %s FAILED (%s)" % (batch.spec, batch.build_failed)) + notify.add_batch(batch, batch.build_failed) + else: + r.some_ok = 1 + log.notice("building %s OK" % (batch.spec)) + notify.add_batch(batch, "OK") + batch.build_time = stopwatch.stop() + report.add_pld_builder_info(batch) + buildlogs.add(batch.logfile, failed = batch.build_failed, id=r.id) + else: + batch.build_failed = 1 + batch.skip_reason = "SKIPED [%s failed]" % failed_dep + batch.logfile = None + batch.build_time = "" + log.notice("building %s %s" % (batch.spec, batch.skip_reason)) + notify.add_batch(batch, "SKIP") + + buildlogs.flush() + chroot.run("rm -f %s" % string.join(r.chroot_files))