#!/bin/bash
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Other
### Remotely build, fetch and pave zedboot

## usage: fx pave-remote HOST [DIR] [--no-pave] [--no-build] [-- PAVE_ARGS]
##
## Connect to HOST, run a build using fx from DIR, fetch the artifacts and
## start the paver.
##
##  --no-build    do not build, just pull artifacts already present
##  --no-pave     do not start the paver, just pull the artifacts
##  --            pass any arguments after the -- to the fx pave-zedboot
##                command
##
##  HOST          the hostname to connect to
##  DIR           defaults to ~/fuchsia, the path to the FUCHSIA_DIR on HOST
##  PAVE_ARGS     arguments for the fx pave-zeboot command
##
## HOST and DIR are persisted in the file //.fx-remote-config and are reused as
## defaults in future invocations of any 'fx *-remote' tools.

set -o errexit

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/fx-remote.sh
fx-config-read

fx-warn "DEPRECATION WARNING"
fx-warn "\`fx pave-zedboot-remote\` is deprecated and will be removed soon, if you need this command, please report to https://fxbug.dev/42081362.\n"

build=true
pave=true
host=""
dir=""
args=()
while [[ $# -ne 0 ]]; do
  case "$1" in
  --help|-h)
      fx-command-help
      exit 0
      ;;
  --no-build)
    build=false
    ;;
  --no-pave)
    pave=false
    ;;
  --)
    shift
    args+=("$@")
    break
    ;;
  -*)
    fx-error "Unknown flag: $1"
    fx-command-help
    exit 1
    ;;
  *)
    if [[ -z "${host}" ]]; then
      host="$1"
    elif [[ -z "${dir}" ]]; then
      dir="$1"
    else
      fx-error "unexpected argument: '$1'"
      exit 1
    fi
    ;;
  esac
  shift
done

if cached=( $(load_remote_info "$host") ); then
  host="${cached[0]}"
  dir="${cached[1]}"
fi

if [[ -z "${host}" ]]; then
  fx-error "HOST must be specified"
  fx-command-help
  exit 1
fi

if [[ -z "${dir}" ]]; then
  if ssh "$host" ls \~/fuchsia/.jiri_root/bin/fx > /dev/null; then
    dir="~/fuchsia"
  else
    fx-error "failed to find ~/fuchsia on $host, please specify DIR"
    fx-command-help
    exit 1
  fi
fi

save_remote_info "$host" "$dir"

artifact_dir="${FUCHSIA_DIR}/out/fetched"
fetch_remote_build_artifacts "${host}" "${dir}" "${artifact_dir}" pave-zedboot $build

if "${pave}"; then
  if [[ -n "$(get-device-name)" ]]; then
    args+=(-n $(get-device-name))
  fi

  fetch_or_build_tool "${host}" "${dir}" "${artifact_dir}" bootserver
  cd "${artifact_dir}"
  ./pave-zedboot.sh "${args[@]}"
fi
