Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(scripts): publish script #354

Merged
merged 2 commits into from
Jun 4, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions .scripts/publish.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env bash
#
# This script is copied from `https://github.com/paritytech/jsonrpc` with some minor tweaks.

set -eu

ORDER=(types proc-macros utils http-client http-server ws-client ws-server jsonrpsee)

function read_toml () {
NAME=""
VERSION=""
NAME=$(grep "^name" ./Cargo.toml | sed -e 's/.*"\(.*\)"/\1/')
VERSION=$(grep "^version" ./Cargo.toml | sed -e 's/.*"\(.*\)"/\1/')
}
function remote_version () {
REMOTE_VERSION=""
REMOTE_VERSION=$(cargo search "$NAME" | grep "^$NAME =" | sed -e 's/.*"\(.*\)".*/\1/')
}

# First display the plan
for CRATE_DIR in ${ORDER[@]}; do
cd $CRATE_DIR > /dev/null
read_toml
echo "$NAME@$VERSION"
cd - > /dev/null
done

read -p ">>>> Really publish?. Press [enter] to continue. "

set -x

cargo clean

set +x

# Then actually perform publishing.
for CRATE_DIR in ${ORDER[@]}; do
cd $CRATE_DIR > /dev/null
read_toml
remote_version
# Seems the latest version matches, skip by default.
if [ "$REMOTE_VERSION" = "$VERSION" ] || [[ "$REMOTE_VERSION" > "$VERSION" ]]; then
RET=""
echo "Seems like $NAME@$REMOTE_VERSION is already published. Continuing in 5s. "
read -t 5 -p ">>>> Type [r][enter] to retry, or [enter] to continue... " RET || true
if [ "$RET" != "r" ]; then
echo "Skipping $NAME@$VERSION"
cd - > /dev/null
continue
fi
fi

# Attempt to publish (allow retries)
while : ; do
# give the user an opportunity to abort or skip before publishing
echo "🚀 Publishing $NAME@$VERSION..."
sleep 3

set +e && set -x
cargo publish $@
RES=$?
set +x && set -e
# Check if it succeeded
if [ "$RES" != "0" ]; then
CHOICE=""
echo "##### Publishing $NAME failed"
read -p ">>>>> Type [s][enter] to skip, or [enter] to retry.. " CHOICE
if [ "$CHOICE" = "s" ]; then
break
fi
else
break
fi
done

# Wait again to make sure that the new version is published and available.
echo "Waiting for $NAME@$VERSION to become available at the registry..."
while : ; do
sleep 3
remote_version
if [ "$REMOTE_VERSION" = "$VERSION" ]; then
echo "🥳 $NAME@$VERSION published succesfully."
sleep 3
break
else
echo "#### Got $NAME@$REMOTE_VERSION but expected $NAME@$VERSION. Retrying..."
fi
done
cd - > /dev/null
done

echo "Tagging jsonrpsee@$VERSION"
set -x
git tag -a v$VERSION -m "Version $VERSION"
sleep 3
git push --tags