blob: 21e0b1229e80b8b5649667900d98dc00f9a8e643 [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]
##
## 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
##
## HOST the hostname to connect to
## DIR defaults to ~/fuchsia, the path to the FUCHSIA_DIR on HOST
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
fx-config-read
build=true
pave=true
host=""
dir=""
while [[ $# -ne 0 ]]; do
case "$1" in
--help|-h)
fx-command-help
exit 0
;;
--no-build)
build=false
;;
--no-pave)
pave=false
;;
-*)
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 [[ -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
ssh "${host}" "cd ${dir} && ./.jiri_root/bin/fx build build-archive.tar" || exit $?
build_dir=$(ssh "${host}" "cd ${dir} && ./.jiri_root/bin/fx get-build-dir")
rsync -z -P "${host}":"${build_dir}/build-archive.tar" out/build-archive.tar
mkdir -p out/fetched
tar xf out/build-archive.tar -C out/fetched
echo >&2 "Build archive expanded into out/fetched"
if "${pave}"; then
cd out/fetched
if [[ $(uname) = "Darwin" ]]; then
# HACK!
rm -f bootserver.exe.linux-x64
cp "${FUCHSIA_BUILD_DIR}/host_x64/bootserver" ./bootserver.exe.linux-x64
fi
args=()
if [[ -n "$(get-device-name)" ]]; then
args+=(-n $(get-device-name))
fi
./pave.sh --authorized-keys "${FUCHSIA_DIR}/.ssh/authorized_keys" "${args[@]}"
fi