diff --git a/tools/build/autobuild.py b/tools/build/autobuild.py new file mode 100644 index 0000000..bf9703a --- /dev/null +++ b/tools/build/autobuild.py @@ -0,0 +1,106 @@ +#!/usr/bin/python +# +# Autobuild script for RetroBSD +# +import sys, string, os, subprocess, shutil, datetime, MySQLdb + +BSD = "/website/retrobsd/build/retrobsd-sources" +ARCHIVE = "/website/retrobsd/build/master" +REPO = "https://github.com/RetroBSD/retrobsd.git" + +# +# Get current date +# +today = datetime.date.today() +DATE = "%04d-%02d-%02d" % (today.year, today.month, today.day) +print "--- Date:", DATE + +# +# (1) If BSD directory exists: use 'git pull' to update +# otherwise: check it out +# +if os.path.exists(BSD): + print "--- Update the existing source tree" + os.system("git -C "+BSD+" pull") + fresh_sources = False +else: + print "--- Checkout a fresh snapshot of sources" + os.system("git clone "+REPO+" "+BSD) + fresh_sources = True + +# +# (2) Get the revision number REV +# +rev = subprocess.check_output(string.split("git -C "+BSD+" rev-list HEAD --count")) +rev = int(rev) +print "--- Latest revision:", rev + +# +# (3) If the REV already exists in the ARCHIVE: all done. +# Otherwise proceed to (4). +# +if os.path.exists(ARCHIVE + "/" + str(rev)): + print "--- Build for revision "+str(rev)+" already exists" + print "--- Finished" + sys.exit (0) + +# +# (4) If the source tree is not fresh from (1), delete it +# and checkout a new one. +# +if not fresh_sources: + print "--- Checkout a fresh snapshot of sources" + shutil.rmtree(BSD) + os.system("git clone "+REPO+" "+BSD) + +# +# (5) Pack the source tree into the zip archive. +# +print "--- Pack sources into sources-"+DATE+".zip" +os.mkdir(ARCHIVE + "/" + str(rev)) +os.system("cd "+BSD+"/.. && zip -rq "+ARCHIVE+"/"+str(rev)+"/sources-"+DATE+".zip retrobsd-sources -x .git \\*/.gitignore") + +# +# (6) Build everything in BSD/tools/build directory. +# +print "--- Build everything" +os.system("make -C "+BSD+"/tools/build all") + +# +# (7) Move log and zip files into ARCHIVE. +# +print "--- Move log and zip files" +os.system("mv "+BSD+"/tools/build/*.log "+ARCHIVE+"/"+str(rev)) +os.system("mv "+BSD+"/tools/build/*.zip "+ARCHIVE+"/"+str(rev)) + +# +# (8) Query mysql db for the total count of downloads +# for the previous revision. +# +# (9) If no downloads, delete the previous revision. +# +mysql = MySQLdb.connect (user = "autobuild", + db = "autobuild", + passwd = "retr0bsd") +for r in range(rev-1, 0, -1): + # Skip non-existing revisions + dir = ARCHIVE + "/" + str(r) + if not os.path.exists(dir): + continue + + # Get download count for this revision + cur = mysql.cursor() + cur.execute (""" + SELECT count(*) + FROM downloads + WHERE branch = 'master' + AND build = %d + """ % r) + count = cur.fetchall()[0][0] + if count > 0: + break + + print "--- Delete unused revision", r + shutil.rmtree(dir) + +sys.exit (0)