#!/usr/bin/env bash # # Use cargo-tree to check our dependencies for crates which we must # not depend on unconditionally. set -eu forbid () { local our_crate="$1" local feature="$2" local forbidden="$3" set +e cargo tree --prefix=none -p "$our_crate" --features "$feature" \ --format=" {p}" | grep "^ $forbidden " # Note that the space in the grep pattern above is necessary to # make sure we don't match prefixes. (The cargo tree output will be # something like " cratename v1.2.3".) local result="${PIPESTATUS[*]}" set -e case "$result" in "0 0") # cargo-tree succeeded, and so did grep: we found the # forbidden package. echo "Uh-oh: $forbidden has shown up in $our_crate/$feature." exit 1 ;; "0 1") # cargo-tree succeeded, and grep failed: we didn't find the # forbidden package. echo "Didn't find $forbidden in $our_crate/$feature. Good." ;; *) # cargo-tree failed (or maybe grep is gruesomely nonstandard) echo "cargo tree failed unexpectedly when checking for $forbidden in $our_crate/$feature" >&2 exit 1 ;; esac } # We can't use these crates in arti/full, since they expose us to the old # OpenSSL (3BSD + SSLeay) license. forbid arti full ring forbid arti full webpki echo "Everything looks fine."