Files
SpacetimeDB/tools/publish-crates.sh
Zeke Foppa c7d825c1d0 Fix tools/publish-crates.sh (#3268)
# Description of Changes

Fixes two problems introduced in #3185:
1. The `--directories` option on `find-publish-list.py` was not printing
directories
2. The `publish-crates.sh` script was using an undefined variable.

# API and ABI breaking changes

No breaking changes

# Expected complexity level and risk

1

# Testing

This was used to publish crates in the release yesterday.

Co-authored-by: Zeke Foppa <bfops@users.noreply.github.com>
2025-10-02 17:06:37 +00:00

106 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")/.."
DRY_RUN=0
ALLOW_DIRTY=0
SKIP_ALREADY_PUBLISHED=0
# Use usernames here to help prevent users from getting spam
NEW_CRATE_OWNERS=("cloutiertyler" "bfops" "jdetter")
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run)
DRY_RUN=1
;;
--allow-dirty)
ALLOW_DIRTY=1
;;
--skip-already-published)
SKIP_ALREADY_PUBLISHED=1
echo "Skipping already published crates."
;;
*)
echo "Invalid argument: $1"
exit 1
;;
esac
shift
done
if [ $DRY_RUN -ne 1 ]; then
echo "You are about to publish to crates.io (dry run is false.)"
echo "We are also going to do a test install after publishing. This will remove any version of spacetimedb-cli you may have installed."
echo
echo "Press [Enter] to continue."
read -r
fi
BASEDIR=$(pwd)
declare -a ROOTS=(spacetimedb spacetimedb-sdk)
declare -a CRATES=($(python3 tools/find-publish-list.py --recursive --quiet --directories "${ROOTS[@]}"))
echo Crates to publish: "${CRATES[@]}"
echo
for path in "${CRATES[@]}"; do
if [ ! -d "${path}" ]; then
echo "This crate does not exist: ${path}"
exit 1
fi
done
i=0
for path in "${CRATES[@]}"; do
i=$(($i+1))
cd "${path}"
PUBLISH_CMD="cargo publish"
[[ $DRY_RUN -eq 1 ]] && PUBLISH_CMD+=" --dry-run"
[[ $ALLOW_DIRTY -eq 1 ]] && PUBLISH_CMD+=" --allow-dirty"
echo "[$i/${#CRATES[@]}] Publishing crate at $path with command: $PUBLISH_CMD"
if ! OUTPUT=$($PUBLISH_CMD 2>&1); then
if [ $SKIP_ALREADY_PUBLISHED -eq 1 ] && echo "$OUTPUT" | grep -q "already exists"; then
echo "WARNING: Crate at $path is already published at this version. Skipping..."
else
echo "ERROR: Failed to publish crate at $path. Check logs:"
echo "$OUTPUT"
exit 1
fi
fi
crate="$(basename "$path")"
# Add owners
echo "Adding owners for $crate..."
for owner in "${NEW_CRATE_OWNERS[@]}"; do
if ! OUTPUT=$(cargo owner --add "$owner" 2>&1); then
if echo "$OUTPUT" | grep -q "already" ; then
echo "$owner already is an owner of the crate."
else
echo "Unknown error adding owner $owner:"
echo "$OUTPUT"
exit 1
fi
else
echo "Added $owner as an owner of $crate."
fi
done
echo
done
echo "Doing a test install."
set +e
cargo uninstall spacetimedb-cli > /dev/null
set -e
echo
if cargo install spacetimedb-cli; then
echo "Installation was successful. Congrats on publishing to crates.io!"
else
echo "ERROR: Installation failed! Check the build log for details. This typically means you forgot to update the version of a dependency."
fi