Script to upload build artifacts via direct ssh

Test: runs and boots on rockpi
Change-Id: Ie00fe2b4bbed6b17f600c2f9a6a3ad545e97ded2
(cherry picked from commit 36e873c882e931f5b2c9bc40e5e8134194e58402)
diff --git a/tools/upload_via_ssh.py b/tools/upload_via_ssh.py
new file mode 100755
index 0000000..7b41aee
--- /dev/null
+++ b/tools/upload_via_ssh.py
@@ -0,0 +1,87 @@
+#!/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):
+  dir = os.getcwd()
+  try:
+    os.chdir(args.image_dir)
+    images = glob.glob('*.img')
+    if len(images) == 0:
+      raise OSError('File not found: %s' + image_pat)
+    subprocess.check_call(
+      'tar -c -f - --lzop -S ' + ' '.join(images) +
+        ' | ssh %s@%s -- tar -x -f - --lzop -S' % (
+          args.user,
+          args.ip),
+      shell=True)
+  finally:
+    os.chdir(dir)
+
+  host_package = os.path.join(args.host_dir, 'cvd-host_package.tar.gz')
+  # host_package
+  subprocess.check_call(
+      'ssh %s@%s -- tar -x -z -f - < %s' % (
+          args.user,
+          args.ip,
+          host_package),
+      shell=True)
+
+
+def launch_cvd(args):
+  subprocess.check_call(
+      'ssh %s@%s -- bin/launch_cvd %s' % (
+          args.user,
+          args.ip,
+          ' '.join(args.runner_args)
+      ),
+      shell=True)
+
+
+def stop_cvd(args):
+  subprocess.call(
+      'ssh %s@%s -- bin/stop_cvd' % (
+          args.user,
+          args.ip),
+      shell=True)
+
+
+def main():
+  parser = argparse.ArgumentParser(
+      description='Upload a local build to Google Compute Engine and run it')
+  parser.add_argument(
+      '-host_dir',
+      type=str,
+      default=os.environ.get('ANDROID_HOST_OUT', '.'),
+      help='path to the dist directory')
+  parser.add_argument(
+      '-image_dir',
+      type=str,
+      default=os.environ.get('ANDROID_PRODUCT_OUT', '.'),
+      help='path to the img files')
+  parser.add_argument(
+      '-user', type=str, default='vsoc-01',
+      help='user to update on the instance')
+  parser.add_argument(
+      '-ip', type=str,
+      help='ip address of the board')
+  parser.add_argument(
+      '-launch', default=False,
+      action='store_true',
+      help='launch the device')
+  parser.add_argument('runner_args', nargs='*', help='launch_cvd arguments')
+  args = parser.parse_args()
+  stop_cvd(args)
+  upload_artifacts(args)
+  if args.launch:
+    launch_cvd(args)
+
+
+if __name__ == '__main__':
+  main()