From b7d430ee1590feb082648e86b0cdfa74b1cdffa5 Mon Sep 17 00:00:00 2001 From: Advait Paliwal Date: Tue, 24 Mar 2026 13:13:09 -0700 Subject: [PATCH] Add spinner to Unix installer extraction --- scripts/install/install.sh | 42 ++++++++++++++++++++++++++++++++++++-- website/public/install | 42 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/scripts/install/install.sh b/scripts/install/install.sh index 93b2cc3..866d486 100644 --- a/scripts/install/install.sh +++ b/scripts/install/install.sh @@ -13,6 +13,45 @@ step() { printf '==> %s\n' "$1" } +run_with_spinner() { + label="$1" + shift + + if [ ! -t 2 ]; then + step "$label" + "$@" + return + fi + + "$@" & + pid=$! + frame=0 + + set +e + while kill -0 "$pid" 2>/dev/null; do + case "$frame" in + 0) spinner='|' ;; + 1) spinner='/' ;; + 2) spinner='-' ;; + *) spinner='\\' ;; + esac + printf '\r==> %s %s' "$label" "$spinner" >&2 + frame=$(( (frame + 1) % 4 )) + sleep 0.1 + done + wait "$pid" + status=$? + set -e + + printf '\r\033[2K' >&2 + if [ "$status" -ne 0 ]; then + printf '==> %s failed\n' "$label" >&2 + return "$status" + fi + + step "$label" +} + normalize_version() { case "$1" in "" | latest) @@ -187,8 +226,7 @@ download_file "$download_url" "$archive_path" mkdir -p "$INSTALL_APP_DIR" rm -rf "$INSTALL_APP_DIR/$bundle_name" -step "Extracting ${archive_name}" -tar -xzf "$archive_path" -C "$INSTALL_APP_DIR" +run_with_spinner "Extracting ${archive_name}" tar -xzf "$archive_path" -C "$INSTALL_APP_DIR" mkdir -p "$INSTALL_BIN_DIR" step "Linking feynman into $INSTALL_BIN_DIR" diff --git a/website/public/install b/website/public/install index 93b2cc3..866d486 100644 --- a/website/public/install +++ b/website/public/install @@ -13,6 +13,45 @@ step() { printf '==> %s\n' "$1" } +run_with_spinner() { + label="$1" + shift + + if [ ! -t 2 ]; then + step "$label" + "$@" + return + fi + + "$@" & + pid=$! + frame=0 + + set +e + while kill -0 "$pid" 2>/dev/null; do + case "$frame" in + 0) spinner='|' ;; + 1) spinner='/' ;; + 2) spinner='-' ;; + *) spinner='\\' ;; + esac + printf '\r==> %s %s' "$label" "$spinner" >&2 + frame=$(( (frame + 1) % 4 )) + sleep 0.1 + done + wait "$pid" + status=$? + set -e + + printf '\r\033[2K' >&2 + if [ "$status" -ne 0 ]; then + printf '==> %s failed\n' "$label" >&2 + return "$status" + fi + + step "$label" +} + normalize_version() { case "$1" in "" | latest) @@ -187,8 +226,7 @@ download_file "$download_url" "$archive_path" mkdir -p "$INSTALL_APP_DIR" rm -rf "$INSTALL_APP_DIR/$bundle_name" -step "Extracting ${archive_name}" -tar -xzf "$archive_path" -C "$INSTALL_APP_DIR" +run_with_spinner "Extracting ${archive_name}" tar -xzf "$archive_path" -C "$INSTALL_APP_DIR" mkdir -p "$INSTALL_BIN_DIR" step "Linking feynman into $INSTALL_BIN_DIR"