97 lines
3.2 KiB
Bash
97 lines
3.2 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -e -o pipefail
|
||
|
|
|
||
|
|
MSRV=1.56.1
|
||
|
|
FUZZ_DURATION=60
|
||
|
|
FUZZ_PAUSE=2
|
||
|
|
|
||
|
|
if [[ ${1:0:1} == - || $1 == help ]] || (( $# > 1 )); then
|
||
|
|
echo "A script to make it easy to check & lint & test everything." >&2
|
||
|
|
echo "It assumes rustup is installed and that cargo +release works." >&2
|
||
|
|
echo >&2
|
||
|
|
echo "Usage: $0 ([setup|MSRV|check|test|ignored|clippy|miri|fuzz|bench|shellcheck|help])" >&2
|
||
|
|
echo "If no argument is provided, all parts except ignored and help are run," >&2
|
||
|
|
echo "but setup is only done if auto-detection fails." >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# should have been a Makefile
|
||
|
|
|
||
|
|
# core check, Minimum supported Rust version
|
||
|
|
if [[ $1 == setup ]] || ! rustup show | grep --silent "$MSRV"; then
|
||
|
|
rustup install "$MSRV" --no-self-update
|
||
|
|
fi
|
||
|
|
if [[ -z $1 || $1 == msrv ]]; then
|
||
|
|
# FIXME modify Cargo.toml like on CI, and then restore it and Cargo.lock afterwards
|
||
|
|
cargo "+$MSRV" build --all-features
|
||
|
|
fi
|
||
|
|
|
||
|
|
# check all feature combinations, stable
|
||
|
|
if [[ $1 == setup ]] || ! rustup show | grep --silent stable; then
|
||
|
|
rustup install stable --no-self-update
|
||
|
|
fi
|
||
|
|
if [[ -z $1 || $1 == check ]]; then
|
||
|
|
cargo +stable check --examples --tests --no-default-features
|
||
|
|
cargo +stable check --examples --tests --no-default-features --features std
|
||
|
|
cargo +stable check --examples --tests --no-default-features --features ascii
|
||
|
|
cargo +stable check --examples --tests --all-features
|
||
|
|
fi
|
||
|
|
|
||
|
|
# tests, stable
|
||
|
|
if [[ -z $1 || $1 == test ]]; then
|
||
|
|
cargo +stable test --all-features -- --quiet
|
||
|
|
elif [[ $1 == ignored ]]; then
|
||
|
|
cargo +stable test --all-features -- --quiet --ignored
|
||
|
|
fi
|
||
|
|
|
||
|
|
# clippy, nightly
|
||
|
|
if [[ $1 == setup ]] || ! rustup show | grep --silent nightly; then
|
||
|
|
rustup install nightly --no-self-update
|
||
|
|
fi
|
||
|
|
if [[ $1 == setup ]] || ! cargo +nightly help clippy >/dev/null 2>/dev/null; then
|
||
|
|
rustup component add clippy --toolchain nightly
|
||
|
|
fi
|
||
|
|
if [[ -z $1 || $1 == clippy ]]; then
|
||
|
|
cargo +nightly clippy --all-features --tests --benches --examples
|
||
|
|
fi
|
||
|
|
|
||
|
|
# miri, nightly
|
||
|
|
if [[ $1 == setup ]] || ! cargo +nightly help miri >/dev/null 2>/dev/null; then
|
||
|
|
rustup component add miri --toolchain nightly
|
||
|
|
cargo +nightly miri setup
|
||
|
|
fi
|
||
|
|
if [[ -z $1 || $1 == miri ]]; then
|
||
|
|
cargo +nightly miri test --all-features -- --quiet
|
||
|
|
fi
|
||
|
|
|
||
|
|
# fuzzing tests, nightly
|
||
|
|
if [[ $1 == setup ]] || ! command -V cargo-fuzz >/dev/null 2>/dev/null; then
|
||
|
|
cargo +nightly install cargo-fuzz
|
||
|
|
fi
|
||
|
|
if [[ -z $1 || $1 == fuzz ]]; then
|
||
|
|
cargo +nightly fuzz build
|
||
|
|
for fuzztest in $(cargo +nightly fuzz list); do
|
||
|
|
sleep "$FUZZ_PAUSE"
|
||
|
|
echo "Fuzzing $fuzztest"
|
||
|
|
timeout "$FUZZ_DURATION" \
|
||
|
|
cargo +nightly fuzz run "$fuzztest" \
|
||
|
|
|| true
|
||
|
|
echo
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
# benchmarks, nightly
|
||
|
|
if [[ -z $1 || $1 == bench ]]; then
|
||
|
|
cargo +nightly check --benches --no-default-features
|
||
|
|
cargo +nightly check --benches --no-default-features --features std
|
||
|
|
cargo +nightly check --benches --no-default-features --features ascii
|
||
|
|
cargo +nightly check --benches --all-features
|
||
|
|
# need nocapture to not hide error if setup fails
|
||
|
|
cargo +nightly bench --all-features -- --nocapture
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ $1 == shellcheck || $1 == selfcheck ]] \
|
||
|
|
|| ([[ -z $1 ]] && command -V shellcheck >/dev/null 2>/dev/null); then
|
||
|
|
shellcheck "$0"
|
||
|
|
fi
|