| #!/bin/bash | |
| # Copyright 2017 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. | |
| ### push packages to a device | |
| ## usage: fx push-package [pkg1 pkg2 ...] | |
| ## | |
| ## Push packages to a device. One or more package names may be supplied. If no | |
| ## package name is suppled all packages in the build output will be pushed. The | |
| ## target must be reachable from the host and must already know how to reach | |
| ## the host package server (e.g. fx serve must be running). | |
| ## | |
| ## See https://fuchsia.googlesource.com/docs/+/master/development/workflows/package_update.md | |
| ## for more information about using this workflow. | |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh | |
| fx-config-read | |
| function usage { | |
| fx-command-help push-package | |
| } | |
| function main { | |
| fx-standard-switches "$@" | |
| set -- "${FX_ARGV[@]}" | |
| # if the second arg is set, but 0-length, publish nothing | |
| if [[ $# -eq 1 ]] && [[ -z "${1}" ]]; then | |
| exit 0 | |
| fi | |
| local all_pkgs=($("${FUCHSIA_DIR}/scripts/list-available-packages.py" --build-dir "${FUCHSIA_BUILD_DIR}")) | |
| # pkgs is the last argument | |
| local pkgs=() | |
| if [[ $# -eq 0 ]]; then | |
| pkgs=("${all_pkgs[@]}") | |
| else | |
| for pkg in "$@"; do | |
| for p in "${all_pkgs[@]}"; do | |
| if [[ "$p" == "$pkg" ]]; then | |
| pkgs+=("$p") | |
| continue 2 | |
| fi | |
| done | |
| echo >&2 "Package $pkg will not be pushed. It is not part of the current build, is not a package, or has 'deprecated_system_image=true'." | |
| exit 1 | |
| done | |
| fi | |
| # The target doesn't support expansions, and a local expansion makes a command | |
| # too long to spawn, so sending a loop makes things work ok. | |
| local cmd=" | |
| code=0; | |
| for c in ${pkgs[@]}; do | |
| amber_ctl get_up -n \"\${c}\" -v 0 || code=\$((\$code + \$?)); | |
| manifest_path=\"/pkgfs/packages/\${c}/0/meta/module.json\"; | |
| if [ -s \"\$manifest_path\" ]; then | |
| run module_package_indexer \"\${c}\" 0; | |
| fi | |
| done; | |
| exit \$code | |
| " | |
| fx-command-run shell "${cmd}" | |
| } | |
| main "$@" |