hatch-surf/scripts/hatch-setup.sh
CTO 9ff4876b56 feat: add comprehensive CLI documentation and release workflow
- Add CLI reference documentation with command examples
- Add CLI quick reference card for quick lookups
- Add troubleshooting guide for common issues
- Add GitHub Actions release workflow for binary builds
- Add CHANGELOG.md for release tracking
- Add webhook integration examples
- Add setup and verification script
- Update README with installation instructions and CLI overview

Addresses ELF-169: Document CLI and add standalone binary releases

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-23 10:35:10 +02:00

280 lines
7.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

#!/bin/bash
# Hatch CLI Setup and Verification Script
# This script helps users install and verify the Hatch CLI
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
local status=$1
local message=$2
case $status in
"OK")
echo -e "${GREEN}${NC} $message"
;;
"WARN")
echo -e "${YELLOW}${NC} $message"
;;
"ERROR")
echo -e "${RED}${NC} $message"
;;
"INFO")
echo -e "${BLUE}${NC} $message"
;;
esac
}
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to get latest release version from GitHub
get_latest_version() {
if command_exists curl; then
curl -s https://api.github.com/repos/elfoundation/hatch/releases/latest | grep -o '"tag_name": "[^"]*"' | cut -d'"' -f4
elif command_exists wget; then
wget -qO- https://api.github.com/repos/elfoundation/hatch/releases/latest | grep -o '"tag_name": "[^"]*"' | cut -d'"' -f4
else
echo "unknown"
fi
}
# Function to detect platform
detect_platform() {
local os=$(uname -s | tr '[:upper:]' '[:lower:]')
local arch=$(uname -m)
case $os in
linux)
case $arch in
x86_64|amd64)
echo "linux-amd64"
;;
aarch64|arm64)
echo "linux-arm64"
;;
*)
echo "linux-unknown"
;;
esac
;;
darwin)
case $arch in
x86_64|amd64)
echo "darwin-amd64"
;;
arm64)
echo "darwin-arm64"
;;
*)
echo "darwin-unknown"
;;
esac
;;
mingw*|msys*|cygwin*)
echo "windows-amd64"
;;
*)
echo "unknown"
;;
esac
}
# Function to install hatch
install_hatch() {
local platform=$(detect_platform)
local version=$(get_latest_version)
if [ "$platform" = "unknown" ]; then
print_status "ERROR" "Unsupported platform: $(uname -s) $(uname -m)"
echo "Please install manually from https://github.com/elfoundation/hatch/releases"
exit 1
fi
if [ "$version" = "unknown" ] || [ -z "$version" ]; then
print_status "WARN" "Could not determine latest version"
print_status "INFO" "Please check https://github.com/elfoundation/hatch/releases"
exit 1
fi
local binary_name="hatch-${platform}"
local download_url="https://github.com/elfoundation/hatch/releases/download/${version}/${binary_name}"
if [ "$platform" = "windows-amd64" ]; then
binary_name="hatch-windows-amd64.exe"
download_url="https://github.com/elfoundation/hatch/releases/download/${version}/${binary_name}"
fi
print_status "INFO" "Detected platform: ${platform}"
print_status "INFO" "Latest version: ${version}"
print_status "INFO" "Download URL: ${download_url}"
# Create temporary directory
local temp_dir=$(mktemp -d)
local temp_file="${temp_dir}/${binary_name}"
print_status "INFO" "Downloading hatch..."
# Download binary
if command_exists curl; then
curl -L -o "$temp_file" "$download_url"
elif command_exists wget; then
wget -O "$temp_file" "$download_url"
else
print_status "ERROR" "Neither curl nor wget found. Please install one."
exit 1
fi
if [ ! -f "$temp_file" ]; then
print_status "ERROR" "Failed to download binary"
exit 1
fi
# Make executable (Unix only)
if [[ "$platform" != windows-* ]]; then
chmod +x "$temp_file"
fi
# Determine installation directory
local install_dir=""
if [ -d "/usr/local/bin" ] && [ -w "/usr/local/bin" ]; then
install_dir="/usr/local/bin"
elif [ -d "$HOME/.local/bin" ]; then
install_dir="$HOME/.local/bin"
# Ensure PATH includes ~/.local/bin
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
print_status "WARN" "Adding ~/.local/bin to PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.bashrc"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.zshrc" 2>/dev/null || true
fi
else
install_dir="$HOME/.local/bin"
mkdir -p "$install_dir"
fi
local install_path="${install_dir}/hatch"
# Install binary
if [ -w "$install_dir" ]; then
mv "$temp_file" "$install_path"
else
print_status "INFO" "Using sudo to install to ${install_dir}"
sudo mv "$temp_file" "$install_path"
fi
# Clean up
rm -rf "$temp_dir"
print_status "OK" "Hatch installed to ${install_path}"
# Verify installation
if command_exists hatch; then
print_status "OK" "Hatch is in PATH"
hatch version
else
print_status "WARN" "Hatch installed but not in PATH"
print_status "INFO" "You may need to restart your shell or add ${install_dir} to PATH"
fi
}
# Function to verify installation
verify_installation() {
print_status "INFO" "Verifying Hatch installation..."
# Check if hatch is installed
if ! command_exists hatch; then
print_status "ERROR" "Hatch is not installed or not in PATH"
echo "Please install hatch first:"
echo " $0 install"
exit 1
fi
# Check version
print_status "INFO" "Checking version..."
if hatch version; then
print_status "OK" "Version check passed"
else
print_status "ERROR" "Version check failed"
exit 1
fi
# Check help
print_status "INFO" "Checking help..."
if hatch --help > /dev/null 2>&1; then
print_status "OK" "Help command works"
else
print_status "ERROR" "Help command failed"
exit 1
fi
# Check if server is running
print_status "INFO" "Checking server connectivity..."
if curl -s http://localhost:8080/healthz > /dev/null 2>&1; then
print_status "OK" "Server is running and accessible"
# Test capture command (dry run)
print_status "INFO" "Testing CLI commands..."
# Test inspect (will fail if no endpoints, but that's OK)
if hatch inspect default -limit 1 > /dev/null 2>&1; then
print_status "OK" "CLI commands working"
else
print_status "WARN" "CLI commands may have issues (server might not have data)"
fi
else
print_status "WARN" "Server not running at http://localhost:8080"
print_status "INFO" "Start server with: hatch serve"
fi
print_status "OK" "Installation verification complete"
}
# Function to show usage
show_usage() {
echo "Hatch CLI Setup and Verification Script"
echo ""
echo "Usage: $0 [command]"
echo ""
echo "Commands:"
echo " install Download and install the latest hatch binary"
echo " verify Verify hatch installation and connectivity"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 install # Install hatch"
echo " $0 verify # Verify installation"
echo ""
echo "Manual installation:"
echo " 1. Download from https://github.com/elfoundation/hatch/releases"
echo " 2. chmod +x hatch-*"
echo " 3. sudo mv hatch-* /usr/local/bin/hatch"
}
# Main script
main() {
local command=${1:-help}
case $command in
install)
install_hatch
;;
verify)
verify_installation
;;
help|*)
show_usage
;;
esac
}
main "$@"