+import path
+import os
+
+from config import config
+
+class Buildlogs_Queue:
+ def __init__(self):
+ self.queue = []
+ self.some_failed = 0
+
+ def add(self, logfile, failed):
+ name = os.path.basename(logfile) + ".bz2"
+ os.system("bzip2 --best --force < %s > %s" \
+ % (logfile, path.buildlogs_queue_dir + name))
+ self.queue.append({'name': name, 'failed': failed})
+
+ def flush(self):
+ def desc(l):
+ if l['failed']: s = "FAIL"
+ elif self.some_failed: s = "OKOF" # OK but Others Failed
+ else: s = "OK"
+ return "Target: %s/%s\nBuilder: %s\nStatus: %s\nEND\n" % \
+ (config.buildlogs_url, l['name'], config.builder, s)
+
+ for l in self.queue:
+ f = open(path.buildlogs_queue_dir + l['name'] + ".desc", "w")
+ f.write(desc(l))
+ f.close()
+
+queue = Buildlogs_Queue()
def add(logfile, failed):
"Add new buildlog with specified status."
- # FIXME
- pass
+ queue.add(logfile, failed)
def flush():
"Send buildlogs to server."
- # FIXME
- pass
+ queue.flush()
elif d != None:
return d
else:
- log.panic("cannot find %s::%s" % (builder, d))
+ log.panic("cannot find %s::%s" % (builder, o))
p.readfp(open(path.builder_conf))
if builder not in p.sections():
self.arch = get("arch")
self.chroot = get("chroot")
self.email = get("email")
+ self.buildlogs_url = get("buildlogs_url", "/dev/null")
+ self.ftp_url = get("ftp_url", "/dev/null")
config = Builder_Conf()
import StringIO
from config import config
-
-def sendfile(src, dst):
- while 1:
- s = src.read(10000)
- if s == "": break
- dst.write(s)
+import util
class Message:
def __init__(self):
self.body.write("\n\n[...]\n\n")
line += 1
else:
- sendfile(open(log), self.body)
+ util.sendfile(open(log), self.body)
def set_std_headers(self):
self.headers["Date"] = time.asctime()
f.write("%s: %s\n" % (k, v))
f.write("\n")
self.body.seek(0)
- sendfile(self.body, f)
+ util.sendfile(self.body, f)
def send(self):
# FIXME
queue_file = spool_dir + "queue"
req_queue_file = spool_dir + "req_queue"
processed_ids_file = spool_dir + "processed_ids"
+buildlogs_queue_dir = spool_dir + "buildlogs/"
+ftp_queue_dir = spool_dir + "ftp/"
# www/
srpms_dir = www_dir + "srpms/"
import request
import log
import path
+import util
from acl import acl
from lock import lock
from bqueue import B_Queue
handle_request(sys.stdin)
sys.exit(0)
-main()
+util.wrap(main)
import StringIO
import sys
import re
+import atexit
import gpg
import request
import log
import path
+import util
+import chroot
+import buildlogs
+
from acl import acl
from lock import lock
from bqueue import B_Queue
from config import config, init_conf
-import chroot
-import buildlogs
def pick_request(q):
def mycmp(r1, r2):
files.append(m.group(1))
return files
-def append_to(log, msg):
- f = open(log, "a")
- f.write("%s\n" % msg)
- f.close()
-
-def clean_tmp(dir):
- # FIXME: use python
- os.system("rm -f %s/*; rmdir %s" % (dir, dir))
-
def handle_request(r):
def build_srpm(b):
b.src_rpm = ""
cmd = "cd rpm/SPECS; ./builder %s -bs %s -r %s %s 2>&1" % \
(builder_opts, b.bconds_string(), b.branch, b.spec)
spec_log = tmp + b.spec + ".log"
- append_to(spec_log, "Building SRPM using: %s\n" % cmd)
+ util.append_to(spec_log, "Building SRPM using: %s\n" % cmd)
res = chroot.run(cmd, logfile = spec_log)
files = collect_files(spec_log)
if len(files) > 0:
if len(files) > 1:
- append_to(spec_log, "error: More then one file produced: %s" % files)
+ util.append_to(spec_log, "error: More then one file produced: %s" % files)
res = 1
last = files[len(files) - 1]
b.src_rpm_file = last
b.src_rpm = os.path.basename(last)
all_files.extend(files)
else:
- append_to(spec_log, "error: No files produced.")
+ util.append_to(spec_log, "error: No files produced.")
res = 1
buildlogs.add(logfile = spec_log, failed = res)
return res
tmp = path.spool_dir + r.id + "/"
os.mkdir(tmp)
+ atexit.register(util.clean_tmp, tmp)
user = acl.user(r.requester)
log.notice("started processing %s" % r.id)
all_files = []
m.append_log(tmp + batch.spec + ".log")
m.send()
buildlogs.flush()
- clean_tmp(tmp)
return
log.notice("building %s finished" % batch.spec)
os.mkdir(path.srpms_dir + r.id)
cnt_f.write("%d\n" % num)
cnt_f.close()
# FIXME: send notification?
+ buildlogs.flush()
def main():
init_conf("src")
q.unlock()
handle_request(r)
-main()
+util.wrap(main)
import re
import sys
+import os
+import log
+import traceback
+import StringIO
def pkg_name(nvr):
return re.match(r"(.+)-[^-]+-[^-]+", nvr).group(1)
def msg(m):
sys.stderr.write(m)
+
+def sendfile(src, dst):
+ while 1:
+ s = src.read(10000)
+ if s == "": break
+ dst.write(s)
+
+def append_to(log, msg):
+ f = open(log, "a")
+ f.write("%s\n" % msg)
+ f.close()
+
+def clean_tmp(dir):
+ # FIXME: use python
+ os.system("rm -f %s/* 2>/dev/null; rmdir %s 2>/dev/null" % (dir, dir))
+
+status = "unknown"
+
+def wrap(main):
+ try:
+ main()
+ except:
+ exctype, value = sys.exc_info()[:2]
+ if exctype == SystemExit:
+ sys.exit(value)
+ s = StringIO.StringIO()
+ traceback.print_exc(file = s, limit = 20)
+ log.alert("fatal python exception during: %s" % status)
+ log.alert(s.getvalue())
+ sys.exit(1)
exit 1
fi
-mkdir -p spool www/srpms log lock
+mkdir -p spool/{buildlogs,ftp} www/srpms log lock
echo 1 > www/counter
echo -n > spool/processed_ids
echo '<queue/>' > spool/queue
--- /dev/null
+#!/bin/sh
+
+cd ~/pld-builder.new
+python PLD_Builder/srpm_builder.py
[src]
arch = athlon
chroot = /adm/chroot-src
+buildlogs_url = scp://malekith@roke.freak/home/services/ftpd/buildlogs/
+ftp_url = scp://malekith@roke.freak/home/services/ftpd/dists/nest/NEW/ready/SRPMS