| #!/usr/bin/python |
| |
| """Upload a local build to Google Compute Engine and run it.""" |
| |
| import argparse |
| import glob |
| import os |
| import subprocess |
| |
| |
| def upload_artifacts(args): |
| image_pat = os.path.join(args.dist_dir, '%s-img-*.zip' % args.product) |
| images = glob.glob(image_pat) |
| if len(images) == 0: |
| raise OSError('File not found: %s' + image_pat) |
| if len(images) > 1: |
| raise OSError('%s matches multiple images: %s' % ( |
| image_pat, images)) |
| subprocess.check_call( |
| 'gcloud compute ssh %s@%s -- /usr/bin/install_zip.sh . < %s' % ( |
| args.user, |
| args.instance, |
| images[0]), |
| shell=True) |
| |
| host_package = os.path.join(args.dist_dir, 'cvd-host_package.tar.gz') |
| # host_package |
| subprocess.check_call( |
| 'gcloud compute ssh %s@%s -- tar -x -z -f - < %s' % ( |
| args.user, |
| args.instance, |
| host_package), |
| shell=True) |
| |
| |
| def launch_cvd(args): |
| subprocess.check_call( |
| 'gcloud compute ssh %s@%s -- bin/launch_cvd' % ( |
| args.user, |
| args.instance), |
| shell=True) |
| |
| |
| def stop_cvd(args): |
| subprocess.call( |
| 'gcloud compute ssh %s@%s -- bin/stop_cvd' % ( |
| args.user, |
| args.instance), |
| shell=True) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser( |
| description='Upload a local build to Google Compute Engine and run it') |
| parser.add_argument( |
| '-dist_dir', |
| type=str, |
| default=os.path.join(os.environ.get('ANDROID_BUILD_TOP', '.'), |
| 'out', 'dist'), |
| help='path to the dist directory') |
| parser.add_argument( |
| '-instance', type=str, required=True, |
| help='instance to update') |
| parser.add_argument( |
| '-product', |
| type=str, |
| default=os.environ.get('TARGET_PRODUCT', 'cf_x86_phone'), |
| help='product to upload') |
| parser.add_argument( |
| '-user', type=str, default='vsoc-01', |
| help='user to update on the instance') |
| args = parser.parse_args() |
| stop_cvd(args) |
| upload_artifacts(args) |
| launch_cvd(args) |
| |
| |
| if __name__ == '__main__': |
| main() |