From a4e1180db788f8ab2a2ad194d6d0a4ed84d49686 Mon Sep 17 00:00:00 2001 From: aegntic Date: Thu, 2 Oct 2025 02:29:33 +1000 Subject: [PATCH 1/2] fix: improve Windows OS detection in CLI installation script - Enhanced Windows detection for Git Bash, MSYS2, Cygwin, and WSL environments - Added multiple detection methods: WINDIR, OSTYPE, /proc/version, mount points, Windows executables - Fixed issue where Git Bash on Windows incorrectly detected as Linux - Added debug output to help troubleshoot OS detection issues - Improved extraction tool validation based on detected OS - Fixes #4848 where CLI installation failed due to downloading Linux tar.bz2 instead of Windows zip Closes #4848 Signed-off-by: aegntic --- download_cli.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/download_cli.sh b/download_cli.sh index 21319241aec0..107d3e7717bc 100755 --- a/download_cli.sh +++ b/download_cli.sh @@ -36,6 +36,20 @@ if ! command -v tar >/dev/null 2>&1 && ! command -v unzip >/dev/null 2>&1; then exit 1 fi +# Check for required extraction tools based on detected OS +if [ "$OS" = "windows" ]; then + # Windows uses PowerShell's built-in Expand-Archive - check if PowerShell is available + if ! command -v powershell.exe >/dev/null 2>&1 && ! command -v pwsh >/dev/null 2>&1; then + echo "Warning: PowerShell is recommended to extract Windows packages but was not found." + echo "Falling back to unzip if available." + fi +else + if ! command -v tar >/dev/null 2>&1; then + echo "Error: 'tar' is required to extract packages for $OS. Please install tar and try again." + exit 1 + fi +fi + # --- 2) Variables --- REPO="block/goose" @@ -58,12 +72,33 @@ else fi # --- 3) Detect OS/Architecture --- -OS=$(uname -s | tr '[:upper:]' '[:lower:]') +# Better OS detection for Windows environments +if [[ "${WINDIR:-}" ]] || [[ "${windir:-}" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then + OS="windows" +elif [[ -f "/proc/version" ]] && grep -q "Microsoft\|WSL" /proc/version 2>/dev/null; then + # WSL detection + OS="windows" +elif [[ "$PWD" =~ ^/mnt/[a-zA-Z]/ ]]; then + # WSL mount point detection (like /mnt/c/) + OS="windows" +elif [[ "$OSTYPE" == "darwin"* ]]; then + OS="darwin" +elif command -v powershell.exe >/dev/null 2>&1 || command -v cmd.exe >/dev/null 2>&1; then + # Check if Windows executables are available (another Windows indicator) + OS="windows" +elif [[ "$PWD" =~ ^/[a-zA-Z]/ ]] && [[ -d "/c" || -d "/d" || -d "/e" ]]; then + # Check for Windows-style mount points (like in Git Bash) + OS="windows" +else + # Fallback to uname for other systems + OS=$(uname -s | tr '[:upper:]' '[:lower:]') +fi + ARCH=$(uname -m) # Handle Windows environments (MSYS2, Git Bash, Cygwin, WSL) case "$OS" in - linux|darwin) ;; + linux|darwin|windows) ;; mingw*|msys*|cygwin*) OS="windows" ;; @@ -87,6 +122,16 @@ case "$ARCH" in ;; esac +# Debug output (safely handle undefined variables) +echo "WINDIR: ${WINDIR:-}" +echo "OSTYPE: $OSTYPE" +echo "uname -s: $(uname -s)" +echo "uname -m: $(uname -m)" +echo "PWD: $PWD" + +# Output the detected OS +echo "Detected OS: $OS with ARCH $ARCH" + # Build the filename and URL for the stable release if [ "$OS" = "darwin" ]; then FILE="goose-$ARCH-apple-darwin.tar.bz2" From 285692908a88b4c1d09b68544a3e02eb1dd29938 Mon Sep 17 00:00:00 2001 From: Douwe Osinga Date: Mon, 6 Oct 2025 11:59:13 -0400 Subject: [PATCH 2/2] Removing comment to kick off checks Removed debug output for environment variables. Signed-off-by: aegntic --- download_cli.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/download_cli.sh b/download_cli.sh index 107d3e7717bc..987b6826a446 100755 --- a/download_cli.sh +++ b/download_cli.sh @@ -122,7 +122,6 @@ case "$ARCH" in ;; esac -# Debug output (safely handle undefined variables) echo "WINDIR: ${WINDIR:-}" echo "OSTYPE: $OSTYPE" echo "uname -s: $(uname -s)"