107 lines
2.7 KiB
Python
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)
|