blob: 1b86e9fe48386f86bd6eab4d3de5fffd0e6f49a9 [file] [log] [blame]
#!/bin/bash
# Copyright 2021 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=Source tree
### updates external Rust dependencies with latest from crates.io
## usage: fx update-rust-3p-outdated
## Updates third_party/rust_crates/Cargo.toml based on the latest versions from
## crates.io and configuration in //third_party/rust_crates/outdated.toml.
##
## See https://fuchsia.dev/fuchsia-src/development/languages/rust/third_party.md
## for more details.
##
## Flags:
##
## --no-build Don't build update_crates or cargo-gnaw, use cached versions.
## --no-vendor Don't run `fx update-rustc-third-party` after updating crate versions.
set -e
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read
# Parse arguments
while [[ $# -ge 1 ]]; do
case "$1" in
-h|--help)
fx-command-help
exit 0
;;
--no-build)
SKIP_BUILD="true"
SKIP_BUILD_ARG="--no-build"
;;
--no-vendor)
SKIP_VENDOR="true"
;;
-*)
echo "Cannot understand option $1"
exit 1
;;
esac
shift
done
declare -x PATH="$PREBUILT_CMAKE_DIR/cmake/bin:$PATH"
UPDATE_CRATES_TARGET="host-tools/update_crates"
UPDATE_CRATES_BIN="${FUCHSIA_BUILD_DIR}/${UPDATE_CRATES_TARGET}"
if [[ -n "$SKIP_BUILD" ]]; then
if [ ! -f "$UPDATE_CRATES_BIN" ]; then
fx-error "--no-build was specified, but $UPDATE_CRATES_BIN does not exist."
fx-error "Rerun without --no-build to build update_crates."
exit 1
fi
else
fx-command-run build ${UPDATE_CRATES_TARGET} || ( \
fx-error "Failed to build update_crates, see previous error message."; \
fx-error "To retry an old build of update_crates, specify --no-build."; \
exit 1
)
fi
# run cargo-outdated and update Cargo.toml with output
echo "Running update_crates..."
(cd "$FUCHSIA_DIR"; "$UPDATE_CRATES_BIN" \
--manifest-path "${FUCHSIA_DIR}/third_party/rust_crates/Cargo.toml" \
--overrides "$FUCHSIA_DIR/third_party/rust_crates/outdated.toml" \
update \
--cargo "$PREBUILT_RUST_DIR/bin/cargo" \
--outdated-dir "$PREBUILT_RUST_CARGO_OUTDATED_DIR" \
--config-path "${FUCHSIA_DIR}/third_party/rust_crates/.cargo/config.toml")
# run the vendor script
if [[ -z "$SKIP_VENDOR" ]]; then
fx-command-run update-rustc-third-party $SKIP_BUILD_ARG || ( \
fx-error "Failed to run fx update-rustc-third-party.";
exit 1
)
fi
echo "Running update_crates again to check..."
(cd "$FUCHSIA_DIR"; "$UPDATE_CRATES_BIN" \
--manifest-path "${FUCHSIA_DIR}/third_party/rust_crates/Cargo.toml" \
--overrides "$FUCHSIA_DIR/third_party/rust_crates/outdated.toml" \
check)