fleet-memory/hindsight-docs/static/get-cli
2025-12-11 16:22:04 +01:00

187 lines
6.3 KiB
Bash
Executable file
Raw 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
set -e
# Hindsight CLI installer
# Usage: curl -fsSL https://hindsight.vectorize.io/get-cli | bash
REPO_URL="https://github.com/vectorize-io/hindsight"
INSTALL_DIR="${HINDSIGHT_INSTALL_DIR:-$HOME/.local/bin}"
BINARY_NAME="hindsight"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_banner() {
echo ""
# ANSI logo
echo -e " \033[38;2;9;127;184m▄\033[0m\033[48;2;8;130;178m\033[38;2;5;133;186m▄\033[0m \033[48;2;10;143;160m\033[38;2;10;143;165m▄\033[0m\033[38;2;7;140;156m▄\033[0m "
echo -e " \033[38;2;8;125;192m▄\033[0m \033[38;2;3;132;191m▀\033[0m\033[38;2;2;133;192m▄\033[0m \033[38;2;3;132;180m▄\033[0m\033[38;2;1;137;184m▄\033[0m\033[38;2;3;133;174m▄\033[0m \033[38;2;3;142;176m▄\033[0m\033[38;2;4;142;169m▀\033[0m \033[38;2;10;144;164m▄\033[0m "
echo -e "\033[38;2;6;121;195m▀\033[0m\033[38;2;5;128;203m▀\033[0m\033[48;2;5;124;195m\033[38;2;3;125;200m▄\033[0m\033[38;2;2;126;196m▄\033[0m\033[48;2;3;128;188m\033[38;2;1;131;196m▄\033[0m\033[48;2;0;152;219m\033[38;2;2;131;191m▄\033[0m\033[38;2;1;141;196m▀\033[0m\033[38;2;1;135;183m▀\033[0m\033[38;2;1;148;198m▀\033[0m\033[48;2;1;156;202m\033[38;2;2;135;180m▄\033[0m\033[48;2;4;134;169m\033[38;2;1;137;177m▄\033[0m\033[38;2;3;138;173m▄\033[0m\033[48;2;6;137;165m\033[38;2;2;140;170m▄\033[0m\033[38;2;7;144;169m▀\033[0m\033[38;2;7;139;158m▀\033[0m"
echo -e " \033[48;2;2;128;202m\033[38;2;2;124;201m▄\033[0m\033[48;2;1;130;201m\033[38;2;0;135;212m▄\033[0m\033[38;2;2;128;196m▄\033[0m \033[48;2;2;142;204m\033[38;2;7;138;199m▄\033[0m \033[38;2;1;135;186m▄\033[0m\033[48;2;1;142;186m\033[38;2;2;144;194m▄\033[0m\033[48;2;3;138;176m\033[38;2;2;134;176m▄\033[0m "
echo -e " \033[48;2;8;118;200m\033[38;2;8;121;209m▄\033[0m\033[38;2;3;121;203m▀\033[0m \033[38;2;3;122;192m▀\033[0m\033[38;2;1;138;216m▀\033[0m\033[48;2;0;138;210m\033[38;2;3;128;198m▄\033[0m\033[48;2;0;126;188m\033[38;2;2;131;198m▄\033[0m\033[48;2;0;142;205m\033[38;2;3;132;193m▄\033[0m\033[38;2;1;140;196m▀\033[0m \033[38;2;4;134;175m▀\033[0m\033[48;2;13;135;167m\033[38;2;8;136;174m▄\033[0m "
echo ""
echo -e " ${BLUE}HINDSIGHT CLI INSTALLER${NC}"
echo ""
}
# Detect platform
detect_platform() {
local os=$(uname -s)
local arch=$(uname -m)
case "$os" in
Darwin)
if [[ "$arch" == "arm64" ]] || [[ "$arch" == "aarch64" ]]; then
echo "darwin-arm64"
elif [[ "$arch" == "x86_64" ]]; then
echo "darwin-amd64"
else
print_error "Unsupported macOS architecture: $arch"
exit 1
fi
;;
Linux)
if [[ "$arch" == "x86_64" ]]; then
echo "linux-amd64"
elif [[ "$arch" == "aarch64" ]] || [[ "$arch" == "arm64" ]]; then
echo "linux-arm64"
else
print_error "Unsupported Linux architecture: $arch"
exit 1
fi
;;
*)
print_error "Unsupported operating system: $os"
exit 1
;;
esac
}
# Get latest version from GitHub API
get_latest_version() {
local api_url="https://api.github.com/repos/vectorize-io/hindsight/releases/latest"
local version=""
if command -v curl > /dev/null 2>&1; then
version=$(curl -fsSL "$api_url" | grep '"tag_name":' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/')
elif command -v wget > /dev/null 2>&1; then
version=$(wget -qO- "$api_url" | grep '"tag_name":' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/')
fi
if [[ -z "$version" ]]; then
print_error "Failed to get latest version from GitHub" >&2
exit 1
fi
echo "$version"
}
# Download binary
download_binary() {
local platform=$1
local version=$2
local download_url="${REPO_URL}/releases/download/${version}/hindsight-${platform}"
local tmp_file="/tmp/hindsight-$$"
print_info "Downloading Hindsight CLI ${version} for $platform..." >&2
if command -v curl > /dev/null 2>&1; then
curl -fsSL "$download_url" -o "$tmp_file"
elif command -v wget > /dev/null 2>&1; then
wget -q "$download_url" -O "$tmp_file"
else
print_error "Neither curl nor wget found. Please install one of them." >&2
exit 1
fi
echo "$tmp_file"
}
# Install binary
install_binary() {
local tmp_file=$1
# Create install directory if it doesn't exist
mkdir -p "$INSTALL_DIR"
# Move binary to install directory
mv "$tmp_file" "$INSTALL_DIR/$BINARY_NAME"
chmod +x "$INSTALL_DIR/$BINARY_NAME"
print_success "Installed to: $INSTALL_DIR/$BINARY_NAME"
}
# Check if directory is in PATH
check_path() {
if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
print_warning "$INSTALL_DIR is not in your PATH"
echo ""
echo "Add it to your PATH by adding this line to your shell profile:"
echo ""
# Detect shell
if [[ -n "$BASH_VERSION" ]]; then
echo " echo 'export PATH=\"$INSTALL_DIR:\$PATH\"' >> ~/.bashrc"
echo " source ~/.bashrc"
elif [[ -n "$ZSH_VERSION" ]]; then
echo " echo 'export PATH=\"$INSTALL_DIR:\$PATH\"' >> ~/.zshrc"
echo " source ~/.zshrc"
else
echo " export PATH=\"$INSTALL_DIR:\$PATH\""
fi
echo ""
fi
}
# Main installation flow
main() {
print_banner
# Detect platform
platform=$(detect_platform)
print_info "Detected platform: $platform"
# Get latest version
version=$(get_latest_version)
print_info "Latest version: $version"
# Download binary
tmp_file=$(download_binary "$platform" "$version")
# Install binary
install_binary "$tmp_file"
# Check PATH
check_path
print_success "Installation complete!"
echo ""
print_info "Try it out: $BINARY_NAME --help"
echo ""
print_info "Configure the API URL:"
echo " export HINDSIGHT_API_URL=http://localhost:8888"
echo ""
}
# Run installation
main