#!/usr/bin/env bash # # Check if all published crates configure what features to document on docs.rs. # Not documenting one or all features is allowed but needs to be configured explicitly. set -euo pipefail : "${CARGO:=cargo}" readarray -t offending_crates < <( "$CARGO" metadata --format-version 1 | jq -r ' .packages[] | select( (.id | startswith("path+file:///")) and (.publish == null or .publish == true or .publish != []) and ( .metadata.docs.rs == null or ( .metadata.docs.rs["all-features"] == null and .metadata.docs.rs.features == null ) ) ) | .name' ) count=${#offending_crates[@]} if [ "$count" -gt 0 ]; then for crate in "${offending_crates[@]}" do echo "No features configured for package.metadata.docs.rs in Cargo.toml of $crate." done printf "\nFound %d offending crate%s.\n" "$count" "$([ "$count" -ne 1 ] && echo s)" echo "Read https://docs.rs/about/metadata for more information." exit 1 else echo "Hurray! All crates configure what feature(s) to (not) document in docs.rs." exit 0 fi