Add installation scripts for GoDex Docker and binary setup

This commit is contained in:
Cheikh Seck committed 2026-04-12 14:54:02 +00:00
1 parent dbec26d4b7
commit 83303b0055
2 files changed
+290

No files matched your search

+71
View File
@@ -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"
Executable
+219
View File
@@ -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<cword; i++)); do
if [[ "${words[i]}" == "--config" ]] && [[ -n "${words[i+1]}" ]] && [[ "${words[i+1]}" != --* ]]; then
echo "${words[i+1]}"
return
fi
done
echo "$default_path"
}
godex_get_providers() {
local config_path=$(godex_get_config_path)
if [[ -f "$config_path" ]]; then
grep -E "^ - name:" "$config_path" | sed "s/.*- name://" | tr -d " "
fi
}
godex_get_default_provider() {
local config_path=$(godex_get_config_path)
if [[ -f "$config_path" ]]; then
grep -E "^ - name:" "$config_path" | head -1 | sed "s/.*- name://" | tr -d " "
fi
}
godex_get_models() {
local config_path=$(godex_get_config_path)
local provider_name="${1:-}"
local query="${2:-}"
if [[ -f "$config_path" ]]; then
if [[ -z "$provider_name" ]]; then
provider_name=$(godex_get_default_provider)
fi
godex --completion models "$config_path" "$provider_name" "$query"
fi
}
godex_get_flags_with_desc() {
echo "--config:provider configuration YAML"
echo "--provider:provider name to use"
echo "--model:override provider model"
echo "--hive:enable hive mode with a shared secret"
echo "--wizard:launch provider configuration wizard"
echo "--prompt:run a single prompt non-interactively"
echo "--auto-confirm:auto-run suggested commands"
echo "--version:print version information"
echo "--debug:enable debug mode"
echo "--completion:generate shell completion"
echo "--llama-server:external llama.cpp server URL"
}
_cgodex_completion() {
local cur prev words cword
_init_completion || return
case "$prev" in
--provider)
local providers=$(godex_get_providers)
if [[ -n "$providers" ]]; then
COMPREPLY=($(compgen -W "$providers" -- "$cur"))
fi
return 0
;;
--config)
COMPREPLY=($(compgen -d -S/ -- "$cur"))
COMPREPLY+=($(compgen -f -X '!*.yaml' -X '!*.yml' -- "$cur"))
return 0
;;
--model)
local provider_name=""
local i
for ((i=1; i<cword; i++)); do
if [[ "${words[i]}" == "--provider" ]] && [[ -n "${words[i+1]}" ]] && [[ "${words[i+1]}" != --* ]]; then
provider_name="${words[i+1]}"
break
fi
done
if [[ -z "$provider_name" ]]; then
provider_name=$(godex_get_default_provider)
fi
while IFS= read -r model; do
COMPREPLY+=("$model")
done < <(godex --completion models "$(godex_get_config_path)" "$provider_name" "${cur}")
return 0
;;
esac
if [[ "$cur" == -* ]]; then
local flags=$(godex_get_flags_with_desc | cut -d: -f1)
COMPREPLY=($(compgen -W "$flags" -- "$cur"))
else
COMPREPLY=($(compgen -f -- "$cur"))
fi
}
complete -F _cgodex_completion godex
'
# Install bash completion
if [ -d "/etc/bash_completion.d" ] && [ -w "/etc/bash_completion.d" ]; then
echo "$GODEX_BASH_COMPLETION" > "/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!"