| #!/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 | |
| ## --mono-versions Base the repository versioning on monotonically | |
| ## increasing values instead of time since epoch | |
| 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 { | |
| fx-standard-switches "$@" | |
| set -- "${FX_ARGV[@]}" | |
| local build_dir="" | |
| local fuchsia_dir="${FUCHSIA_DIR}" | |
| local argz=() | |
| local c=0 | |
| local has_dir=0 | |
| local mono_version=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 | |
| ;; | |
| --mono-versions) | |
| mono_version=1 | |
| shift | |
| ;; | |
| --*) | |
| 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 | |
| if [[ mono_version -eq 1 ]]; then | |
| argz+=("--ver-scheme" "mono") | |
| else | |
| argz+=("--ver-scheme" "time") | |
| fi | |
| # 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 "$@" |