Files
retrobsd/tools/build/autobuild.py
2015-08-23 22:48:02 -07:00

107 lines
2.7 KiB
Python

#!/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 = "***")
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)