#!/bin/sh # This file will be served from GitHub Pages # Copy contents from install-server.sh but update URLs set -e # Configuration GITHUB_RELEASES="https://github.com/noorle/cli-releases/releases" INSTALL_DIR="${NOORLE_INSTALL:-$HOME/.noorle}" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' error() { printf "${RED}Error: $1${NC}\n" >&2 exit 1 } info() { printf "${GREEN}$1${NC}\n" } warn() { printf "${YELLOW}$1${NC}\n" } # Detect platform and architecture detect_platform() { OS="$(uname -s)" ARCH="$(uname -m)" case "$OS" in Linux*) PLATFORM="linux" ;; Darwin*) PLATFORM="darwin" ;; MINGW*|MSYS*|CYGWIN*) error "Windows detected. Please download from: ${GITHUB_RELEASES}/latest" ;; *) error "Unsupported operating system: $OS" ;; esac case "$ARCH" in x86_64|amd64) ARCH="x64" ;; aarch64|arm64) ARCH="arm64" ;; *) error "Unsupported architecture: $ARCH" ;; esac BINARY_NAME="noorle-${PLATFORM}-${ARCH}" info "Detected platform: $PLATFORM-$ARCH" } # Download and install install_noorle() { mkdir -p "$INSTALL_DIR/bin" # GitHub automatically redirects /latest/download/ to the latest release DOWNLOAD_URL="${GITHUB_RELEASES}/latest/download/${BINARY_NAME}" info "Downloading latest Noorle CLI..." info "Platform binary: ${BINARY_NAME}" if command -v curl >/dev/null 2>&1; then # Follow redirects with -L, show errors with -S if ! curl -fsSL "$DOWNLOAD_URL" -o "$INSTALL_DIR/bin/noorle" --progress-bar; then error "Download failed. Check ${GITHUB_RELEASES}/latest for available versions." fi elif command -v wget >/dev/null 2>&1; then if ! wget -q "$DOWNLOAD_URL" -O "$INSTALL_DIR/bin/noorle" --show-progress; then error "Download failed. Check ${GITHUB_RELEASES}/latest for available versions." fi else error "Neither curl nor wget is available" fi chmod +x "$INSTALL_DIR/bin/noorle" info "Noorle CLI installed to: $INSTALL_DIR/bin/noorle" } # Setup PATH setup_path() { BIN_DIR="$INSTALL_DIR/bin" case ":$PATH:" in *":$BIN_DIR:"*) info "Already in PATH" return ;; esac info "Adding to PATH..." SHELL_NAME="$(basename "$SHELL")" case "$SHELL_NAME" in bash) PROFILE="$HOME/.bashrc" [ -f "$HOME/.bash_profile" ] && PROFILE="$HOME/.bash_profile" ;; zsh) PROFILE="$HOME/.zshrc" ;; fish) PROFILE="$HOME/.config/fish/config.fish" ;; *) PROFILE="$HOME/.profile" ;; esac if [ "$SHELL_NAME" = "fish" ]; then echo "set -gx PATH \$PATH $BIN_DIR" >> "$PROFILE" else echo "export PATH=\"\$PATH:$BIN_DIR\"" >> "$PROFILE" fi warn "PATH updated in $PROFILE" warn "Run: source $PROFILE" } # Main main() { echo "Installing Noorle CLI..." echo detect_platform install_noorle setup_path echo info "✅ Installation complete! 🎉" echo echo "👉 To start using noorle in THIS terminal, run:" info " source ~/.${SHELL##*/}rc" echo echo "Or simply open a new terminal window." echo echo "Then run: noorle --help" } main "$@"