From 83303b0055d9940dc0398c2d16dfd4c33a412f3d Mon Sep 17 00:00:00 2001 From: Cheikh Seck Date: Sun, 12 Apr 2026 14:54:02 +0000 Subject: [PATCH] Add installation scripts for GoDex Docker and binary setup --- install-docker.sh | 71 +++++++++++++++ install.sh | 219 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100755 install-docker.sh create mode 100755 install.sh diff --git a/install-docker.sh b/install-docker.sh new file mode 100755 index 0000000..b4ceb44 --- /dev/null +++ b/install-docker.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +set -e + +GITHUB_REPO="https://raw.githubusercontent.com/cheikh2shift/godex/main" +IMAGE_NAME="godex-sandbox:latest" + +echo "GoDex Docker Sandbox Installer" +echo "==============================" +echo "" + +INSTALL_DIR="${1:-$HOME/godex-docker}" + +echo "Installing GoDex Docker tools to: $INSTALL_DIR" +echo "" + +mkdir -p "$HOME/.godex" + +mkdir -p "$INSTALL_DIR" +cd "$INSTALL_DIR" + +echo "Downloading docker-compose.yml..." +curl -fsSL "${GITHUB_REPO}/docker-compose.yml" -o docker-compose.yml + +echo "Downloading nginx.conf..." +curl -fsSL "${GITHUB_REPO}/nginx.conf" -o nginx.conf + +echo "Downloading Dockerfile..." +curl -fsSL "${GITHUB_REPO}/Dockerfile" -o Dockerfile + +echo "" +echo "Building Docker image (this may take a few minutes)..." +docker build -t "${IMAGE_NAME}" -f "${INSTALL_DIR}/Dockerfile" . + +echo "" +echo "Setup complete!" +echo "" +echo "To run GoDex in your project directory:" +echo "" +DOLLAR='$' +printf ' USER_ID=%s{USER_ID:-%s(id -u)} GROUP_ID=%s{GROUP_ID:-%s(id -g)} WORKSPACE_DIR="%s{PWD}" docker compose -f %s{HOME}/godex-docker/docker-compose.yml up -d && docker attach godex && docker compose -f %s{HOME}/godex-docker/docker-compose.yml down\n' "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" +echo "" +echo " # Add this alias to ~/.bashrc or ~/.zshrc:" +printf ' alias godex='\''USER_ID=%s{USER_ID:-%s(id -u)} GROUP_ID=%s{GROUP_ID:-%s(id -g)} WORKSPACE_DIR="%s{PWD}" docker compose -f %s{HOME}/godex-docker/docker-compose.yml up -d && docker attach godex && docker compose -f %s{HOME}/godex-docker/docker-compose.yml down'\''\n' "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" +echo "" +echo " # Or add this function for clearer behavior:" +echo " godex() {" +printf ' USER_ID=%s{USER_ID:-%s(id -u)} GROUP_ID=%s{GROUP_ID:-%s(id -g)} WORKSPACE_DIR="%s{PWD}" docker compose -f %s{HOME}/godex-docker/docker-compose.yml up -d \\\n' "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" "$DOLLAR" +echo " && docker attach godex \\" +echo " && docker compose -f ${INSTALL_DIR}/docker-compose.yml down" +echo " }" +echo "" +echo " # Then run from any directory:" +echo " godex" +echo "" +echo "This will:" +echo " - Mount your current directory as the working directory" +echo " - Store config in $HOME/.godex" +echo "" +echo "First run will prompt you to configure your LLM provider." +echo "If the screen looks empty after attaching, press any letter key to trigger TUI redraw." +echo "If Ollama runs on the host, it must listen on 0.0.0.0:11434 for the proxy to reach it." +echo "Optional: snippet (README section):" +echo " https://github.com/cheikh2shift/godex#ollama-host-firewall-optional" +echo "" +echo "Edit provider config stored in $HOME/.godex:" +echo " nano $HOME/.godex/providers.yaml" +echo " vi $HOME/.godex/providers.yaml" +echo " vim $HOME/.godex/providers.yaml" +echo "" +echo -e "\033[0;32mInstall complete.\033[0m" diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..f039110 --- /dev/null +++ b/install.sh @@ -0,0 +1,219 @@ +#!/bin/sh + +set -e + +REPO="cheikh2shift/godex" +INSTALL_DIR="${INSTALL_DIR:-$HOME/.local/bin}" +BINARY_NAME="godex" + +# Detect OS and architecture +OS="$(uname -s | tr '[:upper:]' '[:lower:]')" +ARCH="$(uname -m)" + +case "$ARCH" in + x86_64) + ARCH="amd64" + ;; + aarch64|arm64) + ARCH="arm64" + ;; + *) + echo "Unsupported architecture: $ARCH" + exit 1 + ;; +esac + +# Map OS names +case "$OS" in + darwin) + OS="darwin" + ;; + linux) + OS="linux" + ;; + *) + echo "Unsupported OS: $OS" + exit 1 + ;; +esac + +# If running in CI or explicit override, use the target +if [ -n "$TARGET_OS" ]; then + OS="$TARGET_OS" +fi +if [ -n "$TARGET_ARCH" ]; then + ARCH="$TARGET_ARCH" +fi + +FILENAME="${BINARY_NAME}-${OS}-${ARCH}" +SHA_FILENAME="${FILENAME}.sha256" +if [ "$OS" = "windows" ]; then + FILENAME="${FILENAME}.exe" + SHA_FILENAME="${FILENAME}.sha256" +fi + +# Get latest tag +LATEST_TAG=$(curl -sL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/') +if [ -z "$LATEST_TAG" ]; then + echo "Failed to get latest release version" + exit 1 +fi + +URL="https://github.com/${REPO}/releases/download/v${LATEST_TAG}/${FILENAME}" +SHA_URL="https://github.com/${REPO}/releases/download/v${LATEST_TAG}/${SHA_FILENAME}" + +echo "Downloading ${FILENAME}..." +curl -sSL -o "${FILENAME}" "$URL" + +echo "Downloading SHA256 checksum..." +curl -sSL -o "${SHA_FILENAME}" "$SHA_URL" + +echo "Verifying checksum..." +if command -v sha256sum >/dev/null 2>&1; then + sha256sum -c "${SHA_FILENAME}" +elif command -v shasum >/dev/null 2>&1; then + shasum -a 256 -c "${SHA_FILENAME}" +else + echo "Warning: Neither sha256sum nor shasum found. Skipping checksum verification." + echo "Consider installing coreutils (Linux) or using Homebrew (macOS) for security." +fi + +# Clean up checksum file +rm -f "${SHA_FILENAME}" + +# Rename to generic name for installation +mv "${FILENAME}" "${BINARY_NAME}" +chmod +x "${BINARY_NAME}" + +# Create install directory if it doesn't exist +mkdir -p "$INSTALL_DIR" + +# Move to install directory +if [ -w "$INSTALL_DIR" ]; then + mv "${BINARY_NAME}" "${INSTALL_DIR}/${BINARY_NAME}" + echo "Installed to ${INSTALL_DIR}/${BINARY_NAME}" +else + echo "Cannot write to ${INSTALL_DIR}, installed to current directory" + echo "Move it manually: mv ${BINARY_NAME} ${INSTALL_DIR}/" +fi + +# Setup shell completion +GODEX_BASH_COMPLETION='#!/bin/bash +# shellcheck disable=SC2034 +PROG="godex" + +godex_get_config_path() { + local default_path="${HOME}/.godex/providers.yaml" + for ((i=1; i "/etc/bash_completion.d/godex" + echo "Bash completion installed to /etc/bash_completion.d/godex" +elif [ -n "$BASH_COMPLETION_USER_DIR" ] && [ -d "$BASH_COMPLETION_USER_DIR" ]; then + echo "$GODEX_BASH_COMPLETION" > "${BASH_COMPLETION_USER_DIR}/godex" + echo "Bash completion installed to ${BASH_COMPLETION_USER_DIR}/godex" +elif [ -d "$HOME/.bash_completion.d" ]; then + echo "$GODEX_BASH_COMPLETION" > "$HOME/.bash_completion.d/godex" + echo "Bash completion installed to $HOME/.bash_completion.d/godex" +else + mkdir -p "$HOME/.bash_completion.d" + echo "$GODEX_BASH_COMPLETION" > "$HOME/.bash_completion.d/godex" + echo "Bash completion installed to $HOME/.bash_completion.d/godex" +fi + +echo "Installation complete!"