82 строки
2.9 KiB
Python
Executable File
82 строки
2.9 KiB
Python
Executable File
#!/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())
|