141 lines
4.9 KiB
Python
141 lines
4.9 KiB
Python
|
#!/bin/python
|
||
|
# From Supertuxkart SVN revision $Revision$
|
||
|
# Copyright (C) 2012 Jean-manuel clemencon (samuncle)
|
||
|
################################################################################
|
||
|
|
||
|
# Script used to build nighlies
|
||
|
|
||
|
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import getopt
|
||
|
|
||
|
# import the configuration file
|
||
|
from config import *
|
||
|
|
||
|
# import functions/class
|
||
|
from utils import *
|
||
|
from svn import *
|
||
|
from build import *
|
||
|
from package import *
|
||
|
from send import *
|
||
|
|
||
|
def main():
|
||
|
# error
|
||
|
noBuildErr = False
|
||
|
nosvnErr = False
|
||
|
isBuilt = False
|
||
|
# parse input FIXME The parser doesn't work
|
||
|
#parser(sys.argv[1:])
|
||
|
# welcome message
|
||
|
print
|
||
|
print "nightly builder for supertuxkart"
|
||
|
print "Copyright (C) 2012 Jean-manuel clemencon (samuncle)"
|
||
|
print separator(COLOR.OKBLUE)
|
||
|
|
||
|
# display help
|
||
|
if (ARG["HELP"]):
|
||
|
usage()
|
||
|
print separator(COLOR.OKBLUE)
|
||
|
print
|
||
|
exit()
|
||
|
|
||
|
# svn part -----------------------------------------------------------------
|
||
|
# init the svn
|
||
|
mysvn = Svn(CONFIG["WORKINGDIR"])
|
||
|
print "current svn revision: " + str(mysvn.getLocalRevision())
|
||
|
# Update the svn
|
||
|
if (ARG["UPDATE"]):
|
||
|
space = bufferedOutput("start svn update @ " + getTime())
|
||
|
try:
|
||
|
mysvn.update()
|
||
|
nosvnErr = True
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
except:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
# If no error occured
|
||
|
if (nosvnErr):
|
||
|
print "svn updated rev: " + str(mysvn.getLastRevision())
|
||
|
|
||
|
# buid part ----------------------------------------------------------------
|
||
|
# init the build
|
||
|
mybuild = Build(CONFIG["WORKINGDIR"] + "/cmake_build")
|
||
|
# Clean the project
|
||
|
if (ARG["CLEAN"]):
|
||
|
space = bufferedOutput("start clean @ " + getTime())
|
||
|
try:
|
||
|
mybuild.clean()
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
except:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
# build the project (only if no error and the revision has changed
|
||
|
if (nosvnErr):
|
||
|
if (mysvn.getIsChanged()):
|
||
|
print "revision changed"
|
||
|
space = bufferedOutput("start compilation @ " + getTime())
|
||
|
mybuild.make(ARG["JOB"])
|
||
|
isBuilt = True
|
||
|
if (mybuild.noError()):
|
||
|
noBuildErr = True
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
else:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
else:
|
||
|
print "revsion not changed"
|
||
|
|
||
|
# Build the project (force)
|
||
|
if (ARG["FORCE"] and (not isBuilt) ):
|
||
|
space = bufferedOutput("start forced compilation @ " + getTime())
|
||
|
mybuild.make(ARG["JOB"])
|
||
|
if (mybuild.noError()):
|
||
|
noBuildErr = True
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
else:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
# package part -------------------------------------------------------------
|
||
|
mypack = Package(mysvn.getLastRevision(), CONFIG["COMPRESSDIR"],CONFIG["OS"],CONFIG["PLATFORM"])
|
||
|
# pack the binary
|
||
|
if (noBuildErr and ARG["BIN"]):
|
||
|
space = bufferedOutput("start bin file compress @ " + getTime())
|
||
|
try:
|
||
|
mypack.addFile("supertuxkart", "stkbin", CONFIG["BUILDDIR"] + "/bin")
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
except:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
# pack the data
|
||
|
if(ARG["DATA"]):
|
||
|
space = bufferedOutput("start data file compress @ " + getTime())
|
||
|
try:
|
||
|
mypack.addDir("data", "stkdat", CONFIG["WORKINGDIR"], "*.svn*")
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
except:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
# network part -------------------------------------------------------------
|
||
|
if(ARG["SEND"]):
|
||
|
# send file by FTP
|
||
|
space = bufferedOutput("start file(s) transfer by FTP @ " + getTime())
|
||
|
myFiles = mypack.getFiles()
|
||
|
mysend = Send(CONFIG["FTPHOST"],CONFIG["FTPUSER"],CONFIG["FTPPASS"],CONFIG["SCRIPTDIR"])
|
||
|
for i in myFiles:
|
||
|
mysend.add(i, CONFIG["COMPRESSDIR"], CONFIG["REMOTEDIR"])
|
||
|
#FIXME The ftp didn't throw an exception.
|
||
|
try:
|
||
|
mysend.send()
|
||
|
sys.stdout.write(COLOR.OKGREEN + space + "[DONE]" + COLOR.ENDC + "\n")
|
||
|
except:
|
||
|
sys.stdout.write(COLOR.WARNING + 74 * " " + "[FAIL]" + COLOR.ENDC + "\n")
|
||
|
|
||
|
print separator(COLOR.OKBLUE)
|
||
|
print
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|
||
|
|
||
|
#sys.argv[1:]
|