30 lines
906 B
Bash
30 lines
906 B
Bash
|
#!/bin/bash
|
||
|
|
||
|
set -euo pipefail
|
||
|
|
||
|
component="${1}"
|
||
|
|
||
|
if ! rustup component add "${component}" 2>/dev/null; then
|
||
|
# If the component is unavailable on the latest nightly,
|
||
|
# use the latest toolchain with the component available.
|
||
|
# Refs: https://github.com/rust-lang/rustup-components-history#the-web-part
|
||
|
target=$(curl -sSf "https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/${component}")
|
||
|
echo "'${component}' is unavailable on the default toolchain, use the toolchain 'nightly-${target}' instead"
|
||
|
|
||
|
rustup update "nightly-${target}" --no-self-update
|
||
|
rustup default "nightly-${target}"
|
||
|
|
||
|
echo "Query rust and cargo versions:"
|
||
|
rustup -V
|
||
|
rustc -V
|
||
|
cargo -V
|
||
|
|
||
|
rustup component add "${component}"
|
||
|
fi
|
||
|
|
||
|
echo "Query component versions:"
|
||
|
case "${component}" in
|
||
|
clippy | miri) cargo "${component}" -V ;;
|
||
|
rustfmt) "${component}" -V ;;
|
||
|
esac
|