Current File : //proc/self/root/usr/share/doc/m2crypto-0.21.1/demo/tinderbox/slave.py |
#!/usr/bin/python
#
"""
This is a sample Tinderbox2 buildslave script.
NOTE: WAIT at least 6 minutes after the last build before starting
the next build!
Create config.ini file with the following contents:
[build]
name = identify your build slave, for example Ubuntu 8.04 32-bit
;;optional fields:
;;uname = uname -a
;;swig = swig -version
;;cc = gcc --version
;;openssl = openssl version
;;python = python --version
;;clean = rm -fr m2crypto
;;svn = svn co http://svn.osafoundation.org/m2crypto/trunk m2crypto
;;patch =
;;build = python setup.py clean --all build
;; OR another way to do tests without setuptools:
;;build = PYTHONPATH=build/lib-something python tests/alltests.py
;;test = python setup.py test
;;wait = 3600
;;timeout = 180
[email]
from = your email
to = Email Heikki Toivonen to get the address
user = smtp username
password = smtp password
server = smtp server
port = smtp port
"""
import time, smtplib, os, ConfigParser, tempfile
import build_lib as bl
# Change to True when you are troubleshooting this build script
debug_script = False
# These commands assume we are running on a unix-like system where default
# build options work and all prerequisites are installed and in PATH etc.
DEFAULT_COMMANDS = {
'uname': ['uname', '-a'],
'swig': ['swig', '-version'],
'cc': ['gcc', '--version'],
'openssl': ['openssl', 'version'],
'python': ['python', '--version'],
'clean': ['rm', '-rf', 'm2crypto'],
'svn': ['svn', 'co', 'http://svn.osafoundation.org/m2crypto/trunk', 'm2crypto'],
'patch': [],
'build': ['python', 'setup.py', 'clean', '--all', 'build'],
'test': ['python', 'setup.py', 'test']
}
def load_config(cfg='config.ini'):
config = {}
cp = ConfigParser.ConfigParser()
cp.read(cfg)
for section in cp.sections():
for option in cp.options(section):
config[option] = cp.get(section, option).strip()
return config
# XXX copied from test_ssl
def zap_servers():
s = 's_server'
fn = tempfile.mktemp()
cmd = 'ps | egrep %s > %s' % (s, fn)
os.system(cmd)
f = open(fn)
while 1:
ps = f.readline()
if not ps:
break
chunk = string.split(ps)
pid, cmd = chunk[0], chunk[4]
if cmd == s:
os.kill(int(pid), 1)
f.close()
os.unlink(fn)
def build(commands, config):
status = 'success'
cwd = os.getcwd()
timeout = int(config.get('timeout') or 180)
bl.initLog('tbox.log', echo=debug_script)
starttime = int(time.time())
for command in commands:
cmd = config.get(command)
if not cmd:
cmd = DEFAULT_COMMANDS[command]
if not cmd:
continue
else:
cmd = cmd.split()
bl.log('*** %s, timeout=%ds' % (' '.join(cmd), timeout))
exit_code = bl.runCommand(cmd, timeout=timeout)
if exit_code:
bl.log('*** error exit code = %d' % exit_code)
if command == 'test':
status = 'test_failed'
if os.name != 'nt':
try:
# If tests were killed due to timeout, we may have left
# openssl processes running, so try killing
zap_servers()
except Exception, e:
bl.log('*** error: tried to zap_servers: ' + str(e))
else:
status = 'build_failed'
break
if command == 'svn':
os.chdir('m2crypto')
timenow = int(time.time())
bl.closeLog()
os.chdir(cwd)
return 'tbox.log', starttime, timenow, status
def email(logpath, starttime, timenow, status, config):
msg = """From: %(from)s
To: %(to)s
Subject: tree: M2Crypto
tinderbox: tree: M2Crypto
tinderbox: starttime: %(starttime)d
tinderbox: timenow: %(timenow)d
tinderbox: status: %(status)s
tinderbox: buildname: %(buildname)s
tinderbox: errorparser: unix
tinderbox: END
""" % {'from': config['from'], 'to': config['to'],
'starttime': starttime, 'timenow': timenow,
'status': status,
'buildname': config['name']}
msg += open(logpath).read()
server = smtplib.SMTP(host=config['server'], port=int(config['port']))
if debug_script:
server.set_debuglevel(1)
server.starttls() # if your server supports STARTTLS
if config.get('user'):
server.login(config['user'], config['password'])
server.sendmail(config['from'], config['to'], msg)
server.quit()
if __name__ == '__main__':
config = load_config()
commands = ['uname', 'swig', 'cc', 'openssl', 'python', 'clean', 'svn',
'patch', 'build', 'test']
logpath, starttime, timenow, status = build(commands, config)
email(logpath, starttime, timenow, status, config)