Files
desktop/apps/hanzo-desktop/src-tauri/download-binaries.sh
zeekay 28c1f1912f Fix E2E tests: add EMBEDDINGS_SERVER_URL and update download script
- Add EMBEDDINGS_SERVER_URL env var to E2E workflow (required by hanzo-node)
- Export EMBEDDINGS_SERVER_URL in node start step
- Update local download-binaries.sh to use R2 URLs (download.hanzo.ai)
2026-01-11 22:23:18 -08:00

160 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# Download external binaries from download.hanzo.ai (Cloudflare R2)
# This script downloads the required binaries for the Hanzo Desktop app
# instead of committing large executables to git
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BINARIES_DIR="$SCRIPT_DIR/external-binaries"
LLM_MODELS_DIR="$SCRIPT_DIR/llm-models"
# Detect platform
OS="$(uname -s)"
ARCH="$(uname -m)"
case "$OS" in
Darwin*)
PLATFORM="apple-darwin"
;;
Linux*)
PLATFORM="unknown-linux-gnu"
;;
MINGW*|MSYS*|CYGWIN*)
PLATFORM="pc-windows-msvc"
;;
*)
echo "Unsupported OS: $OS"
exit 1
;;
esac
case "$ARCH" in
x86_64|amd64)
ARCH_NAME="x86_64"
;;
arm64|aarch64)
ARCH_NAME="aarch64"
;;
*)
echo "Unsupported architecture: $ARCH"
exit 1
;;
esac
TARGET="${ARCH_NAME}-${PLATFORM}"
echo "Detected platform: $TARGET"
# Create directories
mkdir -p "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources"
mkdir -p "$BINARIES_DIR/ollama"
mkdir -p "$LLM_MODELS_DIR"
# Hanzo Node version
HANZO_NODE_VERSION="v1.13.0"
# Download and extract Hanzo Node from R2
echo "Downloading Hanzo Node ${HANZO_NODE_VERSION} for ${TARGET}..."
HANZO_NODE_URL="https://download.hanzo.ai/hanzo-node/binaries/production/${TARGET}/${HANZO_NODE_VERSION}.zip"
if [ ! -f "$BINARIES_DIR/hanzo-node/hanzo-node-${TARGET}" ]; then
echo "Downloading from: $HANZO_NODE_URL"
if curl -L -f -o "$BINARIES_DIR/hanzo-node/hanzo-node.zip" "$HANZO_NODE_URL"; then
unzip -o "$BINARIES_DIR/hanzo-node/hanzo-node.zip" -d "$BINARIES_DIR/hanzo-node/"
# Rename hanzo-node to hanzo-node-<target>
if [ -f "$BINARIES_DIR/hanzo-node/hanzo-node" ]; then
mv "$BINARIES_DIR/hanzo-node/hanzo-node" \
"$BINARIES_DIR/hanzo-node/hanzo-node-${TARGET}"
chmod +x "$BINARIES_DIR/hanzo-node/hanzo-node-${TARGET}"
fi
# Rename the tools to include target suffix
if [ -f "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/deno" ]; then
mv "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/deno" \
"$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/deno-${TARGET}"
chmod +x "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/deno-${TARGET}"
fi
if [ -f "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/uv" ]; then
mv "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/uv" \
"$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/uv-${TARGET}"
chmod +x "$BINARIES_DIR/hanzo-node/hanzo-tools-runner-resources/uv-${TARGET}"
fi
rm "$BINARIES_DIR/hanzo-node/hanzo-node.zip"
echo "Downloaded Hanzo Node successfully with bundled tools"
else
echo "Failed to download Hanzo Node binary"
exit 1
fi
else
echo "Hanzo Node already downloaded"
fi
# Download Ollama
OLLAMA_VERSION="v0.12.9"
if [[ "$PLATFORM" == "apple-darwin" ]]; then
OLLAMA_ARCHIVE="ollama-darwin.tgz"
elif [[ "$PLATFORM" == "unknown-linux-gnu" ]]; then
OLLAMA_ARCHIVE="ollama-linux-${ARCH_NAME}.tgz"
else
OLLAMA_ARCHIVE="ollama-windows-${ARCH_NAME}.zip"
fi
if [ ! -f "$BINARIES_DIR/ollama/ollama-${TARGET}" ]; then
echo "Downloading Ollama ${OLLAMA_VERSION}..."
url="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/${OLLAMA_ARCHIVE}"
if curl -L -f -o "$BINARIES_DIR/ollama/${OLLAMA_ARCHIVE}" "$url"; then
cd "$BINARIES_DIR/ollama"
if [[ "$OLLAMA_ARCHIVE" == *.tgz ]]; then
tar -xzf "$OLLAMA_ARCHIVE"
if [ -f "ollama" ]; then
mv ollama "ollama-${TARGET}"
elif [ -f "bin/ollama" ]; then
mv bin/ollama "ollama-${TARGET}"
rm -rf bin
fi
elif [[ "$OLLAMA_ARCHIVE" == *.zip ]]; then
unzip -o "$OLLAMA_ARCHIVE"
if [ -f "ollama.exe" ]; then
mv ollama.exe "ollama-${TARGET}"
fi
fi
rm "$OLLAMA_ARCHIVE"
chmod +x "ollama-${TARGET}"
cd "$SCRIPT_DIR"
echo "Downloaded Ollama ${OLLAMA_VERSION} successfully"
else
echo "Failed to download Ollama ${OLLAMA_VERSION}"
exit 1
fi
else
echo "Ollama already downloaded"
fi
# Download embedding model from R2
EMBEDDING_MODEL="embeddinggemma-300M-BF16.gguf"
if [ ! -f "$LLM_MODELS_DIR/$EMBEDDING_MODEL" ]; then
echo "Downloading embedding model..."
EMBEDDING_URL="https://download.hanzo.ai/llm-models/${EMBEDDING_MODEL}"
if curl -L -f -o "$LLM_MODELS_DIR/$EMBEDDING_MODEL" "$EMBEDDING_URL"; then
echo "Downloaded embedding model successfully"
else
echo "Failed to download embedding model"
exit 1
fi
else
echo "Embedding model already downloaded"
fi
echo ""
echo "Binary download complete!"
echo "Binaries are located in: $BINARIES_DIR"
echo "LLM models are located in: $LLM_MODELS_DIR"