blob: ae016765efdaeaf9fb25729c32c055adafc05450 [file] [log] [blame]
#!/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
## usage: fx pave-remote HOST [DIR] [--no-pave] [--no-build]
## [--no-check-ssh-keys] [-- 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
## --no-check-ssh-keys do not verify that the default SSH credentials are the
## same before paving.
## -- pass any arguments after the -- to the fx pave 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 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 || exit $?
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/fx-remote.sh || exit $?
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/verify-default-keys.sh || exit $?
fx-config-read
build=true
pave=true
check_ssh_keys=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
;;
--no-check-ssh-keys)
check_ssh_keys=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
# Verify that keys match.
if "${check_ssh_keys}"; then
verify_default_keys "${FUCHSIA_DIR}" "${host}" "${dir}" || exit $?
fi
save_remote_info "$host" "$dir"
authkeys_path="$(get-ssh-authkeys)" || {
fx-error "Cannot continue without a valid authorized keys file."
exit 1
}
artifact_dir="${FUCHSIA_DIR}/out/fetched"
fetch_remote_build_artifacts "${host}" "${dir}" "${artifact_dir}" pave $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.sh --authorized-keys "${authkeys_path}" "${args[@]}"
fi