#!/bin/bash

# Common code to build a host image on GCE

# INTERNAL_extra_source may be set to a directory containing the source for
# extra package to build.

# INTERNAL_IP can be set to --internal-ip run on a GCE instance
# The instance will need --scope compute-rw

source "${ANDROID_BUILD_TOP}/external/shflags/src/shflags"
DIR="${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"

DEFINE_string arm_system \
  "" "IP address or DNS name of an ARM system to do the secondary build"
DEFINE_string arm_user \
  "vsoc-01" "User to invoke on the ARM system"
DEFINE_string project "$(gcloud config get-value project)" "Project to use" "p"
DEFINE_string source_image_family debian-9 "Image familty to use as the base" \
  "s"
DEFINE_string source_image_project debian-cloud \
  "Project holding the base image" "m"
DEFINE_string x86_instance \
  "${USER}-build" "Instance name to create for the build" "i"
DEFINE_string x86_user cuttlefish_crosvm_builder \
  "User name to use on GCE when doing the build"
DEFINE_string zone "$(gcloud config get-value compute/zone)" "Zone to use" "z"

SSH_FLAGS=(${INTERNAL_IP})

wait_for_instance() {
  alive=""
  while [[ -z "${alive}" ]]; do
    sleep 5
    alive="$(gcloud compute ssh "${SSH_FLAGS[@]}" "$@" -- uptime || true)"
  done
}

main() {
  set -o errexit
  set -x
  fail=0
  source_files=("${DIR}"/rebuild_gce.sh)
  if [[ -z "${FLAGS_project}" ]]; then
    echo Must specify project 1>&2
    fail=1
  fi
  if [[ -z "${FLAGS_zone}" ]]; then
    echo Must specify zone 1>&2
    fail=1
  fi
  if [[ "${fail}" -ne 0 ]]; then
    exit "${fail}"
  fi
  if [[ -n "${FLAGS_x86_instance}" ]]; then
    project_zone_flags=(--project="${FLAGS_project}" --zone="${FLAGS_zone}")
    delete_instances=("${FLAGS_x86_instance}")
    gcloud compute instances delete -q \
      "${project_zone_flags[@]}" \
      "${delete_instances[@]}" || \
        echo Not running
    gcloud compute instances create \
      "${project_zone_flags[@]}" \
      --boot-disk-size=200GB \
      --machine-type=n1-standard-4 \
      --image-family="${FLAGS_source_image_family}" \
      --image-project="${FLAGS_source_image_project}" \
      "${FLAGS_x86_instance}"
    wait_for_instance "${FLAGS_x86_instance}"
    # beta for the --internal-ip flag that may be passed via SSH_FLAGS
    gcloud beta compute scp "${SSH_FLAGS[@]}" \
      "${project_zone_flags[@]}" \
      "${source_files[@]}" \
      "${FLAGS_x86_user}@${FLAGS_x86_instance}:"
    gcloud compute ssh "${SSH_FLAGS[@]}" \
      "${project_zone_flags[@]}" \
      "${FLAGS_x86_user}@${FLAGS_x86_instance}" -- \
        ./rebuild_gce.sh prepare_source x86_64_build
    gcloud beta compute scp --recurse "${SSH_FLAGS[@]}" \
      "${project_zone_flags[@]}" \
      "${FLAGS_x86_user}@${FLAGS_x86_instance}":x86_64-linux-gnu \
      "${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
    gcloud beta compute scp "${SSH_FLAGS[@]}" \
      "${project_zone_flags[@]}" \
      "${FLAGS_x86_user}@${FLAGS_x86_instance}":clean-source.tgz \
      "${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
    gcloud compute disks describe \
      "${project_zone_flags[@]}" "${FLAGS_x86_instance}" | \
        grep ^sourceImage: > "${DIR}"/x86_64-linux-gnu/builder_image.txt
  fi
  if [[ -n "${FLAGS_arm_system}" ]]; then
    scp \
      "${source_files[@]}" \
      "${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm/clean-source.tgz" \
      "${FLAGS_arm_user}@${FLAGS_arm_system}:"
    # We're using the source tarball from the x86_64 build
    ssh -t "${FLAGS_arm_user}@${FLAGS_arm_system}" -- \
        ./rebuild_gce.sh restore_source arm64_build
    scp -r "${FLAGS_arm_user}@${FLAGS_arm_system}":aarch64-linux-gnu \
      "${ANDROID_BUILD_TOP}/device/google/cuttlefish_vmm"
  fi
  exit 0
  gcloud compute instances delete -q \
    "${project_zone_flags[@]}" \
    "${FLAGS_x86_instance}"
}

FLAGS "$@" || exit 1
main "${FLAGS_ARGV[@]}"
