Chromium Code Reviews| Index: infra/bots/isolate_android_sdk.py |
| diff --git a/infra/bots/isolate_android_sdk.py b/infra/bots/isolate_android_sdk.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..456670b69c9a0cacb181e5f67d069072e95cc3de |
| --- /dev/null |
| +++ b/infra/bots/isolate_android_sdk.py |
| @@ -0,0 +1,76 @@ |
| +#!/usr/bin/env python |
| +# |
| +# Copyright 2016 Google Inc. |
| +# |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| + |
| +"""Isolate a locally-managed Android SDK.""" |
| + |
| + |
| +import argparse |
| +import os |
| +import shlex |
| +import shutil |
| +import subprocess |
| +import sys |
| +import utils |
| + |
| + |
| +ISOLATE_FILE_NAME = 'android_sdk.isolate' |
| +REPO_SKIA = 'https://skia.googlesource.com/skia.git' |
| +SDK_DIR_NAME = 'android-sdk' |
| + |
| + |
| +def isolate_android_sdk(android_sdk_root): |
| + """Isolate the Android SDK and return the isolated hash.""" |
| + repo_isolate_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| + ISOLATE_FILE_NAME) |
| + with utils.tmp_dir(): |
| + # Copy the SDK dir contents into a directory with a known name. |
| + sdk_dir = os.path.join(os.getcwd(), SDK_DIR_NAME) |
| + shutil.copytree(android_sdk_root, sdk_dir) |
| + isolate_file = os.path.join(os.getcwd(), ISOLATE_FILE_NAME) |
| + shutil.copyfile(repo_isolate_file, isolate_file) |
| + |
| + # Isolate the SDK. |
| + isolate = 'isolate' # TODO(borenet): Don't assume this is in PATH. |
| + android_sdk_relpath = os.path.relpath( |
| + sdk_dir, os.path.dirname(isolate_file)) |
| + isolate_cmd = [isolate, 'archive', '--quiet', |
|
kjlubick
2016/05/13 15:10:21
This command assumes you have authenticated with t
borenet
2016/05/13 15:15:17
Yes, and it assumes that you have the Go binary in
|
| + '--isolate-server', 'https://isolateserver.appspot.com', |
| + '-i', isolate_file, |
| + '-s', 'android_sdk.isolated', |
| + '--extra-variable', 'ANDROID_SDK_DIR=%s' % android_sdk_relpath] |
| + isolate_out = subprocess.check_output(isolate_cmd).rstrip() |
| + return shlex.split(isolate_out)[0] |
| + |
| + |
| + |
| +def update_sdk_file(skia_path, isolated_hash): |
| + """Edit the android_sdk_hash file, upload a CL.""" |
| + with utils.chdir(skia_path): |
| + with utils.git_branch(): |
| + hash_file = os.path.join('infra', 'bots', 'android_sdk_hash') |
| + with open(hash_file, 'w') as f: |
| + f.write(isolated_hash) |
| + subprocess.check_call([utils.GIT, 'add', hash_file]) |
| + subprocess.check_call([utils.GIT, 'commit', '-m', 'Update Android SDK']) |
| + subprocess.check_call([utils.GIT, 'cl', 'upload', '--bypass-hooks']) |
| + |
| + |
| +def main(): |
| + parser = argparse.ArgumentParser() |
| + parser.add_argument('--android_sdk_root', required=True) |
| + args = parser.parse_args() |
| + skia_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| + os.pardir, os.pardir) |
| + |
| + with utils.print_timings(): |
| + isolated_hash = isolate_android_sdk(args.android_sdk_root) |
| + update_sdk_file(skia_path, isolated_hash) |
| + |
| + |
| +if __name__ == '__main__': |
| + main() |