| #!/usr/bin/python |
| |
| # Copyright (c) 2014, 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. |
| |
| """ |
| Buildbot steps for functional testing master and slaves |
| """ |
| |
| import os |
| import re |
| import shutil |
| import sys |
| |
| import bot |
| import bot_utils |
| |
| utils = bot_utils.GetUtils() |
| |
| FT_BUILDER = r'ft-slave-(linux|mac)' |
| FT_MASTER = r'ft-master' |
| |
| HOST_OS = utils.GuessOS() |
| |
| def SrcConfig(name, is_buildbot): |
| """Returns info for the current buildbot based on the name of the builder. |
| |
| - mode: always "release" |
| - system: always "linux" or "mac" |
| """ |
| pattern = re.match(FT_BUILDER, name) |
| master_pattern = re.match(FT_MASTER, name) |
| if not pattern and not master_pattern: |
| return None |
| if master_pattern: |
| tag = 'master' |
| system = 'linux' |
| else: |
| tag = 'slave' |
| system = pattern.group(1) |
| return bot.BuildInfo('none', 'none', 'release', system, |
| builder_tag=tag) |
| |
| def Run(args): |
| print "Running: %s" % ' '.join(args) |
| sys.stdout.flush() |
| bot.RunProcess(args) |
| |
| def FTSlave(config): |
| with bot.BuildStep('Fetching editor'): |
| revision = int(os.environ['BUILDBOT_GOT_REVISION']) |
| bot_name, _ = bot.GetBotName() |
| print bot_name |
| channel = bot_utils.GetChannelFromName(bot_name) |
| namer = bot_utils.GCSNamer(channel=channel) |
| system = config.system |
| if system == 'mac': |
| system = 'macos' |
| editor_path = namer.editor_zipfilepath(revision, system, 'x64') |
| gsutils = bot_utils.GSUtil() |
| editor_location='/home/chrome-bot/Desktop' |
| if system == 'macos': |
| editor_location='/Users/chrome-bot/Desktop' |
| local_path = os.path.join(editor_location, 'editor.zip') |
| if os.path.exists(local_path): |
| os.remove(local_path) |
| local_extracted = os.path.join(editor_location, 'dart') |
| shutil.rmtree(local_extracted, ignore_errors=True) |
| gsutils.execute(['cp', editor_path, local_path]) |
| Run(['unzip', local_path, '-d', editor_location]) |
| |
| def FTMaster(config): |
| run = int(os.environ['BUILDBOT_ANNOTATED_STEPS_RUN']) |
| with bot.BuildStep('Master run %s' % run): |
| if run == 1: |
| print 'Not doing anything on master before the triggers' |
| return |
| else: |
| builddir = os.path.join(bot_utils.DART_DIR, |
| utils.GetBuildDir(HOST_OS, HOST_OS), |
| 'functional_testing') |
| shutil.rmtree(builddir, ignore_errors=True) |
| os.makedirs(builddir) |
| script_locations = os.path.join(bot_utils.DART_DIR, 'editor', 'ft') |
| Run(['/home/chrome-bot/func-test/bot-run', builddir, script_locations]) |
| |
| def FTSteps(config): |
| if config.builder_tag == 'master': |
| FTMaster(config) |
| else: |
| FTSlave(config) |
| |
| if __name__ == '__main__': |
| bot.RunBot(SrcConfig, FTSteps, build_step=None) |