From 313fbef49e1c99760be999e989b82cc2f7eecef1 Mon Sep 17 00:00:00 2001 From: Kalid Yasin Date: Tue, 28 Jan 2025 10:46:17 +0300 Subject: [PATCH] feat: Improve install script with error handling and robustness - Add error checking for failed downloads/API requests using set -e - Use proper GitHub API parsing instead of fragile sed extraction - Better architecture/OS detection and mapping - Add user feedback messages and progress reporting - Ensure target directory creation before installation - Verify successful extraction before installation This enhances reliability, handles edge cases better, and improves the user experience during installation/updates. --- scripts/install_update_linux.sh | 54 ++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/scripts/install_update_linux.sh b/scripts/install_update_linux.sh index 33003c025..e65f38c17 100755 --- a/scripts/install_update_linux.sh +++ b/scripts/install_update_linux.sh @@ -1,24 +1,48 @@ #!/bin/bash -# allow specifying different destination directory +set -e # Exit on any error + +# Allow custom installation directory DIR="${DIR:-"$HOME/.local/bin"}" -# map different architecture variations to the available binaries +# Map architecture to GitHub's binary naming convention ARCH=$(uname -m) -case $ARCH in - i386|i686) ARCH=x86 ;; - armv6*) ARCH=armv6 ;; - armv7*) ARCH=armv7 ;; - aarch64*) ARCH=arm64 ;; +case "$ARCH" in + i386|i686) ARCH="x86" ;; + armv6*) ARCH="armv6" ;; + armv7*) ARCH="armv7" ;; + aarch64*) ARCH="arm64" ;; + x86_64) ARCH="x86_64" ;; # Explicitly handle common 64-bit esac -# prepare the download URL -GITHUB_LATEST_VERSION=$(curl -L -s -H 'Accept: application/json' https://github.com/jesseduffield/lazydocker/releases/latest | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') -GITHUB_FILE="lazydocker_${GITHUB_LATEST_VERSION//v/}_$(uname -s)_${ARCH}.tar.gz" +OS=$(uname -s | tr '[:upper:]' '[:lower:]') # Ensure lowercase (e.g., "darwin") + +# Fetch latest version using GitHub API +GITHUB_LATEST_VERSION=$(curl -sfL https://api.github.com/repos/jesseduffield/lazydocker/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') +if [ -z "$GITHUB_LATEST_VERSION" ]; then + echo "Failed to fetch latest version." + exit 1 +fi + +# Build URL and download +GITHUB_FILE="lazydocker_${GITHUB_LATEST_VERSION//v/}_${OS}_${ARCH}.tar.gz" GITHUB_URL="https://github.com/jesseduffield/lazydocker/releases/download/${GITHUB_LATEST_VERSION}/${GITHUB_FILE}" -# install/update the local binary -curl -L -o lazydocker.tar.gz $GITHUB_URL -tar xzvf lazydocker.tar.gz lazydocker -install -Dm 755 lazydocker -t "$DIR" -rm lazydocker lazydocker.tar.gz +echo "Downloading lazydocker $GITHUB_LATEST_VERSION for ${OS}_${ARCH}..." +if ! curl -sfL -o lazydocker.tar.gz "$GITHUB_URL"; then + echo "Download failed. Check your OS/architecture or network connection." + exit 1 +fi + +# Extract and install +tar -xzf lazydocker.tar.gz lazydocker +if [ ! -f "lazydocker" ]; then + echo "Extraction failed. Corrupted download?" + exit 1 +fi + +mkdir -p "$DIR" # Ensure directory exists +install -v -m 755 lazydocker -t "$DIR" +rm -f lazydocker lazydocker.tar.gz + +echo "Installed lazydocker to $DIR"