| #!/usr/bin/env python |
| # Copyright 2017 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. |
| |
| """ |
| This script runs swarming_xcode_install on the bots. It should be run when we |
| need to upgrade all the swarming testers. It: |
| 1) Packages two python files into an isolate. |
| 2) Runs the isolate on swarming machines that satisfy certain dimensions. |
| |
| Example usage: |
| $ ./build/run_swarming_xcode_install.py --luci_path ~/work/luci-py \ |
| --swarming-server touch-swarming.appspot.com \ |
| --isolate-server touch-isolate.appspot.com |
| """ |
| |
| import argparse |
| import os |
| import shutil |
| import subprocess |
| import sys |
| import tempfile |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser( |
| description='Run swarming_xcode_install on the bots.') |
| parser.add_argument('--luci_path', required=True, type=os.path.abspath) |
| parser.add_argument('--swarming-server', required=True, type=str) |
| parser.add_argument('--isolate-server', required=True, type=str) |
| parser.add_argument('--batches', type=int, default=25, |
| help="Run xcode install in batches of size |batches|.") |
| parser.add_argument('--dimension', nargs=2, action='append') |
| args = parser.parse_args() |
| |
| args.dimension = args.dimension or [] |
| |
| script_dir = os.path.dirname(os.path.abspath(__file__)) |
| tmp_dir = tempfile.mkdtemp(prefix='swarming_xcode') |
| try: |
| print 'Making isolate.' |
| shutil.copyfile(os.path.join(script_dir, 'swarming_xcode_install.py'), |
| os.path.join(tmp_dir, 'swarming_xcode_install.py')) |
| shutil.copyfile(os.path.join(script_dir, 'mac_toolchain.py'), |
| os.path.join(tmp_dir, 'mac_toolchain.py')) |
| |
| luci_client = os.path.join(args.luci_path, 'client') |
| cmd = [ |
| sys.executable, os.path.join(luci_client, 'isolateserver.py'), 'archive', |
| '-I', args.isolate_server, tmp_dir, |
| ] |
| isolate_hash = subprocess.check_output(cmd).split()[0] |
| |
| print 'Running swarming_xcode_install.' |
| # TODO(crbug.com/765361): The dimensions below should be updated once |
| # swarming for iOS is fleshed out, likely removing xcode_version 9 and |
| # adding different dimensions. |
| luci_tools = os.path.join(luci_client, 'tools') |
| dimensions = [['pool', 'Chrome'], ['xcode_version', '9.0']] + args.dimension |
| dim_args = [] |
| for d in dimensions: |
| dim_args += ['--dimension'] + d |
| cmd = [ |
| sys.executable, os.path.join(luci_tools, 'run_on_bots.py'), |
| '--swarming', args.swarming_server, '--isolate-server', |
| args.isolate_server, '--priority', '20', '--batches', str(args.batches), |
| '--tags', 'name:run_swarming_xcode_install', |
| ] + dim_args + ['--name', 'run_swarming_xcode_install', '--', isolate_hash, |
| 'python', 'swarming_xcode_install.py', |
| ] |
| subprocess.check_call(cmd) |
| print 'All tasks completed.' |
| |
| finally: |
| shutil.rmtree(tmp_dir) |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |