From 6446ef294c1ec0dc9ab9450d659e51dc4b30526f Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Tue, 14 Nov 2023 20:44:19 +0100 Subject: [PATCH] publishing: check if the current version is already there or not This can happen when a publishing step failed --- util/publish.sh | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/util/publish.sh b/util/publish.sh index 71830f1f915..7207ba7fb91 100755 --- a/util/publish.sh +++ b/util/publish.sh @@ -5,6 +5,22 @@ if test "$1" != "--do-it"; then ARG="--dry-run --allow-dirty" fi +# Function to check if the crate is already published +is_already_published() { + local crate_name=$1 + local crate_version=$2 + + # Use the crates.io API to get the latest version of the crate + local latest_published_version + latest_published_version=$(curl -s https://crates.io/api/v1/crates/$crate_name | jq -r '.crate.max_version') + + if [ "$latest_published_version" = "$crate_version" ]; then + return 0 + else + return 1 + fi +} + # Figure out any dependencies between the util via Cargo.toml # We store this as edges in a graph with each line: # [dependent] [dependency] @@ -35,12 +51,19 @@ TOTAL_ORDER=$(echo -e $PARTIAL_ORDER | tsort | tac) # Remove the ROOT node from the start TOTAL_ORDER=${TOTAL_ORDER#ROOT} +CRATE_VERSION=$(grep '^version' Cargo.toml | head -n1 | cut -d '"' -f2) + set -e for dir in src/uuhelp_parser/ src/uucore_procs/ src/uucore/ src/uu/stdbuf/src/libstdbuf/; do ( cd "$dir" + CRATE_NAME=$(grep '^name =' "Cargo.toml" | head -n1 | cut -d '"' -f2) #shellcheck disable=SC2086 - cargo publish $ARG + if ! is_already_published "$CRATE_NAME" "$CRATE_VERSION"; then + cargo publish $ARG + else + echo "Skip: $CRATE_NAME $CRATE_VERSION already published" + fi ) sleep 2s done @@ -48,8 +71,13 @@ done for p in $TOTAL_ORDER; do ( cd "src/uu/$p" + CRATE_NAME=$(grep '^name =' "Cargo.toml" | head -n1 | cut -d '"' -f2) #shellcheck disable=SC2086 - cargo publish $ARG + if ! is_already_published "$CRATE_NAME" "$CRATE_VERSION"; then + cargo publish $ARG + else + echo "Skip: $CRATE_NAME $CRATE_VERSION already published" + fi ) done