| #!/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 "$@" |
| |