blob: 25c657d7e19873f80d95f5107d56f16c36066634 [file] [log] [blame]
#!/bin/bash
# Copyright 2018 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=Software delivery
### run bootserver for paving
## usage: fx pave [--build|--no-build] [-1|--keep-running] [extra bootserver arguments]
##
## --build | --no-build build (or not) the images required to pave.
## -1 | --keep-running perform a single pave and exit or keep the bootserver
## running after the first paving
## extra bootserver args arguments passed directly to bootserver
##
## Start a bootserver for paving a device, optionally performing a build of the
## system images before.
##
## Defaults are defined by the "incremental" feature:
## 'fx --enable=incremental pave' defaults to "--build" and "-1"
## 'fx --disable=incremental pave' defaults to "--no-build" and "--keep-running"
##
## For bootserver specific arguments, use 'fx pave --help'
set -e
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
fx-config-read
function main {
local single_run=false
local build=false
if is_feature_enabled "incremental"; then
# In incremental workflows, these defaults have changed.
# Keep old behavior if incremental is not enabled.
single_run=true
build=true
fi
local pave_args=()
local help=false
while (( $# )); do
case "$1" in
--help)
help=true
;;
--no-build)
build=false
;;
--build)
build=true
;;
--keep-running)
single_run=false
;;
-1)
single_run=true
;;
*)
pave_args+=("$1")
;;
esac
shift
done
if $help; then
if ! $build; then
# bootserver options cannot be shown if depedencies cannot be built, so
# if --no-build flag is used, just show the simple help.
fx-command-help
exit 0
fi
fx-command-help 2>&1 | grep -v "fx pave --help" >&2
fx-info
fx-info "Building and executing 'pave.sh --help' to show bootserver specific options."
fx-info "Press Ctrl+C to interrupt."
fx-info
pave_args=(--help)
else
if $single_run; then
pave_args+=( "-1" )
fi
name="$(get-device-name)" || exit $?
if [[ -n "$name" ]]; then
pave_args+=("-n" "${name}")
fi
if ! fx-is-bringup; then
authkeys_path="$(get-ssh-authkeys)" || {
fx-error "Cannot continue without a valid authorized keys file."
exit 1
}
pave_args+=(--authorized-keys "${authkeys_path}")
fi
fi
if $build; then
local artifacts=($(fx-command-run list-build-artifacts pave)) || exit $?
fx-info "Building/refreshing targets ${artifacts[@]}"
fx-command-run build "${artifacts[@]}"
fi
if [[ ! -f "${FUCHSIA_BUILD_DIR}/pave.sh" ]]; then
fx-error "'pave.sh' script does not exist."
fx-error "Run 'fx pave --build' or 'fx build' to build it and"
fx-error "all the required artifacts to pave a device."
exit 1
fi
exec "${FUCHSIA_BUILD_DIR}/pave.sh" "${pave_args[@]}"
}
main "$@"