Add autobuild script.
This commit is contained in:
106
tools/build/autobuild.py
Normal file
106
tools/build/autobuild.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user