| #!/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. |
| |
| ### create and publish packages from a build directory |
| |
| ## usage: fx publish [--build-dir <DIR>] [--pkg-key <key file>] |
| ## [--far-dir <DIR>] [--update-repo <DIR>] [pkg1 pkg2 ...] |
| ## |
| ## One or more package name arguments may be supplied as the last arguments. |
| ## If no package name is supplied, all packages from the current build output |
| ## will be published. |
| ## |
| ## optional arguments: |
| ## --build-dir Directory containing the build output |
| ## --pkg-key Key used to sign the package's meta FAR |
| ## --fars-dir Directory to be used to build the meta FAR |
| ## --update-repo Directory to be used to publish the meta FAR and |
| ## associated content blobs |
| |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh |
| fx-config-read |
| |
| function usage { |
| fx-command-help publish |
| } |
| |
| # Create a package manager package and then create update files which are |
| # published to the local file system. If no package name is supplied, all |
| # built packages are processed. |
| function main { |
| local build_dir="" |
| local fuchsia_dir="${FUCHSIA_DIR}" |
| local argz=() |
| local c=0 |
| local has_dir=0 |
| |
| # first parse the non-pkg args which should be named |
| while (( "$#" )); do |
| case $1 in |
| # treat build-dir specially since we inject it if not supplied |
| --build-dir) |
| argz+=($1) |
| shift |
| build_dir=$1 |
| argz+=($1) |
| shift |
| has_dir=1 |
| ;; |
| --*) |
| argz+=($1) |
| shift |
| # seems like the current arg is a boolean, skip to the next |
| if [[ $1 == --* ]]; then |
| continue |
| else |
| argz+=($1) |
| shift |
| fi |
| ;; |
| *) |
| break |
| ;; |
| esac |
| done |
| |
| # now process the trailing args which are all interpretted as packages |
| while (( "$#" )); do |
| case $1 in |
| --*) |
| echo "Non-package arg detected in packages section" |
| usage |
| exit 1 |
| ;; |
| *) |
| argz+=("--pkgs") |
| argz+=($1) |
| shift |
| ;; |
| esac |
| done |
| |
| # no build directory, use the default |
| if [[ has_dir -eq 0 ]]; then |
| build_dir="${FUCHSIA_BUILD_DIR}" |
| argz+=("--build-dir" "${build_dir}") |
| elif [[ -z "${build_dir}" ]]; then |
| # the arg was passed, but wasn't acutally set |
| echo >&2 "error: Build directory is not set!" |
| return 1 |
| fi |
| |
| (cd "${FUCHSIA_BUILD_DIR}" && ${fuchsia_dir}/scripts/publish-package.py "${argz[@]}") |
| local rc=$? |
| if [[ $rc -ne 0 ]]; then |
| usage |
| return $rc |
| fi |
| } |
| |
| main "$@" |