|  | #!/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 | 
|  |  | 
|  | 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 |