Skip to content

Commit

Permalink
Functionize check API script
Browse files Browse the repository at this point in the history
Add functions to the `check-for-api-changes.sh` script.

Refactor only, no logic changes.
  • Loading branch information
tcharding committed Jan 29, 2024
1 parent 4fda7f1 commit efac8a1
Showing 1 changed file with 44 additions and 20 deletions.
64 changes: 44 additions & 20 deletions contrib/check-for-api-changes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,51 @@ CMD="cargo +nightly public-api --simplified"
# `sort -n -u` doesn't work for some reason.
SORT="sort --numeric-sort"

# cargo public-api uses nightly so the toolchain must be available.
if ! cargo +nightly --version > /dev/null; then
echo "script requires a nightly toolchain to be installed (possibly >= nightly-2023-05-24)" >&2
exit 1
fi

pushd "$REPO_DIR" > /dev/null
$CMD --no-default-features | $SORT | uniq > "$API_DIR/no-default-features.txt"
$CMD | $SORT | uniq > "$API_DIR/default-features.txt"
$CMD --no-default-features --features=alloc | $SORT | uniq > "$API_DIR/alloc.txt"
$CMD --no-default-features --features=core2 | $SORT | uniq > "$API_DIR/core2.txt"
$CMD --all-features | $SORT | uniq > "$API_DIR/all-features.txt"

if [[ $(git status --porcelain api) ]]; then
echo "You have introduced changes to the public API, commit the changes to api/ currently in your working directory" >&2
main() {
# cargo public-api uses nightly so the toolchain must be available.
if ! cargo +nightly --version > /dev/null; then
echo "script requires a nightly toolchain to be installed (possibly >= nightly-2023-05-24)" >&2
exit 1
fi

generate_api_files
check_for_changes
}

generate_api_files() {
pushd "$REPO_DIR" > /dev/null

$CARGO | $SORT | uniq > "$API_DIR/default-features.txt"

$CARGO --no-default-features | $SORT | uniq > "$API_DIR/no-default-features.txt"
$CARGO --no-default-features --features=alloc | $SORT | uniq > "$API_DIR/alloc.txt"
$CARGO --no-default-features --features=core2 | $SORT | uniq > "$API_DIR/core2.txt"

$CARGO --all-features | $SORT | uniq > "$API_DIR/all-features.txt"

popd > /dev/null
exit 1
else
echo "No changes to the current public API"
}

# Check if there are changes (dirty git index) to the `api/` directory.
check_for_changes() {
pushd "$REPO_DIR" > /dev/null

if [[ $(git status --porcelain api) ]]; then
git diff --color=always

echo
echo "You have introduced changes to the public API, commit the changes to api/ currently in your working directory" >&2
exit 1

else
echo "No changes to the current public API"
fi

popd > /dev/null
fi
}

#
# Main script
#
main "$@"
exit 0

0 comments on commit efac8a1

Please sign in to comment.