provisioning/scripts/ensure-typedialog.sh
2026-01-08 21:22:57 +00:00

223 lines
6.6 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# ensure-typedialog.sh
# Ensures TypeDialog is installed and available in PATH
# Used by setup commands and scripts that depend on TypeDialog
#
# Usage:
# source ensure-typedialog.sh # Load as functions
# ensure_typedialog_installed # Check and install if needed
# ensure_typedialog_component tui # Ensure specific component
set -euo pipefail
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
INSTALLER_SCRIPT="${SCRIPT_DIR}/install-typedialog.sh"
# ============================================================================
# Helper Functions
# ============================================================================
print_info() {
echo -e "${BLUE} $1${NC}" >&2
}
print_success() {
echo -e "${GREEN}$1${NC}" >&2
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}" >&2
}
print_error() {
echo -e "${RED}$1${NC}" >&2
}
check_command() {
command -v "$1" &> /dev/null
}
# ============================================================================
# TypeDialog Installation Checks
# ============================================================================
ensure_typedialog_installed() {
local force=${1:-false}
if check_command "typedialog"; then
local version=$(typedialog --version 2>/dev/null | head -1)
print_success "TypeDialog available ($version)"
return 0
fi
if [[ "$force" == "true" ]]; then
print_warning "TypeDialog not found - installing..."
if [[ ! -f "$INSTALLER_SCRIPT" ]]; then
print_error "TypeDialog installer not found at: $INSTALLER_SCRIPT"
return 1
fi
# Run installer
if bash "$INSTALLER_SCRIPT" --components all --skip-validation 2>&1 | grep -E "(✅|❌|⚠️)" >&2; then
if check_command "typedialog"; then
print_success "TypeDialog installed successfully"
return 0
else
print_error "Installation completed but typedialog not in PATH"
return 1
fi
else
print_error "TypeDialog installation failed"
return 1
fi
else
print_warning "TypeDialog not found (--force to install)"
return 1
fi
}
ensure_typedialog_component() {
local component=$1
local component_binary="typedialog"
case "$component" in
cli) component_binary="typedialog" ;;
tui) component_binary="typedialog-tui" ;;
web) component_binary="typedialog-web" ;;
ag) component_binary="typedialog-ag" ;;
ai) component_binary="typedialog-ai" ;;
prov-gen) component_binary="typedialog-prov-gen" ;;
*)
print_error "Unknown component: $component"
return 1
;;
esac
if check_command "$component_binary"; then
local version=$("$component_binary" --version 2>/dev/null | head -1 || echo "unknown")
print_success "TypeDialog $component available ($version)"
return 0
else
print_warning "TypeDialog $component not available"
return 1
fi
}
ensure_typedialog_backends() {
local required_backends=${1:-"cli"} # Default to CLI
print_info "Checking required backends: $required_backends"
IFS=',' read -ra backends <<< "$required_backends"
local missing=()
for backend in "${backends[@]}"; do
backend=$(echo "$backend" | xargs) # trim
if ! ensure_typedialog_component "$backend"; then
missing+=("$backend")
fi
done
if [[ ${#missing[@]} -gt 0 ]]; then
print_warning "Missing backends: ${missing[*]}"
return 1
fi
print_success "All required backends available"
return 0
}
# ============================================================================
# Version Checking
# ============================================================================
check_typedialog_version() {
if ! check_command "typedialog"; then
print_error "TypeDialog not installed"
return 1
fi
local installed=$(typedialog --version 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
local required=$(grep -A 2 'name = "typedialog"' "${PROJECT_ROOT}/core/versions.ncl" 2>/dev/null | grep 'current = "' | sed 's/.*current = "\([^"]*\)".*/\1/' || echo "unknown")
echo "$installed"
if [[ "$installed" == "$required" ]] || [[ "$required" == "unknown" ]]; then
return 0
fi
print_warning "Version mismatch: installed=$installed, expected=$required"
return 1
}
# ============================================================================
# Main Entry Point (when run as script)
# ============================================================================
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
# Script mode
case "${1:-check}" in
check)
ensure_typedialog_installed false
;;
install|ensure)
ensure_typedialog_installed true
;;
component)
ensure_typedialog_component "${2:-cli}"
;;
backends)
ensure_typedialog_backends "${2:-cli}"
;;
version)
check_typedialog_version
;;
help)
cat <<EOF
${BLUE}ensure-typedialog.sh${NC}
Helper script to ensure TypeDialog is installed and available
Usage (as script):
ensure-typedialog.sh check # Check if installed (non-blocking)
ensure-typedialog.sh install # Install if missing (blocking)
ensure-typedialog.sh component COMP # Check specific component
ensure-typedialog.sh backends BACKEND # Check backends (comma-separated)
ensure-typedialog.sh version # Show installed version
Usage (as library):
source ensure-typedialog.sh
ensure_typedialog_installed true # Install if missing
ensure_typedialog_component tui # Check TUI backend
ensure_typedialog_backends "cli,tui" # Check multiple backends
check_typedialog_version # Get version
Examples:
# In another script:
source provisioning/scripts/ensure-typedialog.sh
ensure_typedialog_installed true || exit 1
# From command line:
./ensure-typedialog.sh install
./ensure-typedialog.sh backends "cli,tui,web"
EOF
;;
*)
print_error "Unknown command: $1"
echo "Use: $0 help"
exit 1
;;
esac
fi