blob: bde2a63750ad28863512c4ea80e48c5af5c8733f [file] [log] [blame]
#!/usr/bin/python
# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Dart client buildbot steps
Calls a script in tools/bots whose name is based on the name of the bot.
"""
import imp
import os
import re
import socket
import subprocess
import sys
BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
def GetName():
"""Returns the name of the bot.
"""
name = None
# Populate via builder environment variables.
name = os.environ.get(BUILDER_NAME)
# Fall back if not on builder.
if not name:
name = socket.gethostname().split('.')[0]
return name
def ProcessBot(name, target, custom_env=None):
'''
Build and test the named bot target (compiler, android, pub). We look for
the supporting script in tools/bots/ to run the tests and build.
'''
print 'Process%s' % target.capitalize()
has_shell = False
environment = custom_env or os.environ
if '-win' in name:
# In Windows we need to run in the shell, so that we have all the
# environment variables available.
has_shell = True
return subprocess.call([sys.executable,
os.path.join('tools', 'bots', target + '.py')],
env=environment, shell=has_shell)
def ClobberBuilder():
""" Clobber the builder before we do the build.
"""
cmd = [sys.executable,
'./tools/clean_output_directory.py']
print 'Clobbering %s' % (' '.join(cmd))
return subprocess.call(cmd)
def GetShouldClobber():
return os.environ.get(BUILDER_CLOBBER) == "1"
def main():
if len(sys.argv) == 0:
print 'Script pathname not known, giving up.'
return 1
scriptdir = os.path.dirname(sys.argv[0])
# Get at the top-level directory. This script is in client/tools
os.chdir(os.path.abspath(os.path.join(scriptdir, os.pardir, os.pardir)))
if GetShouldClobber():
print '@@@BUILD_STEP Clobber@@@'
status = ClobberBuilder()
if status != 0:
print '@@@STEP_FAILURE@@@'
return status
name = GetName()
if name.startswith('pkg-'):
status = ProcessBot(name, 'pkg')
elif name.startswith('pub-'):
status = ProcessBot(name, 'pub')
elif name.startswith('vm-android'):
status = ProcessBot(name, 'android')
elif name.startswith('dart-sdk'):
status = ProcessBot(name, 'dart_sdk')
elif name.startswith('cross') or name.startswith('target'):
status = ProcessBot(name, 'cross-vm')
elif name.startswith('linux-distribution-support'):
status = ProcessBot(name, 'linux_distribution_support')
elif name.startswith('version-checker'):
status = ProcessBot(name, 'version_checker')
elif name.startswith('dart2js-dump-info'):
status = ProcessBot(name, 'dart2js_dump_info')
else:
status = ProcessBot(name, 'compiler')
if status:
print '@@@STEP_FAILURE@@@'
return status
if __name__ == '__main__':
sys.exit(main())