mirror of
https://github.com/cheikh2shift/godex.git
synced 2026-10-21 10:40:08 -05:00
Add installation scripts for GoDex Docker and binary setup
This commit is contained in:
1 parent
dbec26d4b7
commit
83303b0055
2 files changed
+290
No files matched your search
Executable
+71
@@ -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
@@ -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!"
|
||||
Reference in new issue
Block a user