| #!/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. |
| |
| """ |
| Script used to install Xcode on the swarming bots. |
| """ |
| |
| import os |
| import shutil |
| import subprocess |
| import sys |
| import tarfile |
| import tempfile |
| |
| import mac_toolchain |
| |
| VERSION = '9A235' |
| URL = 'gs://chrome-mac-sdk/ios-toolchain-9A235-1.tgz' |
| REMOVE_DIR = '/Applications/Xcode9.0-Beta4.app/' |
| OUTPUT_DIR = '/Applications/Xcode9.0.app/' |
| |
| def main(): |
| # Check if it's already installed. |
| if os.path.exists(OUTPUT_DIR): |
| env = os.environ.copy() |
| env['DEVELOPER_DIR'] = OUTPUT_DIR |
| cmd = ['xcodebuild', '-version'] |
| found_version = \ |
| subprocess.Popen(cmd, env=env, stdout=subprocess.PIPE).communicate()[0] |
| if VERSION in found_version: |
| print "Xcode %s already installed" % VERSION |
| sys.exit(0) |
| |
| # Confirm old dir is there first. |
| if not os.path.exists(REMOVE_DIR): |
| print "Failing early since %s isn't there." % REMOVE_DIR |
| sys.exit(1) |
| |
| # Download Xcode. |
| with tempfile.NamedTemporaryFile() as temp: |
| env = os.environ.copy() |
| env['PATH'] += ":/b/depot_tools" |
| subprocess.check_call(['gsutil.py', 'cp', URL, temp.name], env=env) |
| if os.path.exists(OUTPUT_DIR): |
| shutil.rmtree(OUTPUT_DIR) |
| if not os.path.exists(OUTPUT_DIR): |
| os.makedirs(OUTPUT_DIR) |
| tarfile.open(mode='r:gz', name=temp.name).extractall(path=OUTPUT_DIR) |
| |
| # Accept license, call runFirstLaunch. |
| mac_toolchain.FinalizeUnpack(OUTPUT_DIR, 'ios') |
| |
| # Set new Xcode as default. |
| subprocess.check_call(['sudo', '/usr/bin/xcode-select', '-s', OUTPUT_DIR]) |
| |
| if os.path.exists(REMOVE_DIR): |
| shutil.rmtree(REMOVE_DIR) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |
| |