Archon/scripts/install.sh
Cole Medin ae346c2a67 feat: prepare for open-source migration to coleam00/Archon
- Replace all dynamous-community/remote-coding-agent references with coleam00/Archon
- Replace all ghcr.io/dynamous-community/remote-coding-agent with ghcr.io/coleam00/archon
- Change license from proprietary Dynamous to MIT
- Fix cd directory name in docs (remote-coding-agent → Archon)
- Remove hardcoded local paths from skills and docs
- Add Windows x64 binary to release pipeline (cross-compiled from Linux)
- Add --minify --bytecode flags to binary compilation
- Create PowerShell install script (scripts/install.ps1)
- Fix isBinaryBuild() detection for Bun 1.3.5+ (use import.meta.dir virtual FS check)
- Scaffold Astro Starlight docs site at website/ (Astro 6 + Starlight 0.38)
- Add deploy-docs.yml workflow for GitHub Pages
- Update test.yml branch triggers (develop → dev)
- Add install section with curl/PowerShell/Homebrew/Docker to README
- Add badges and archon.diy docs link to README
- Create SECURITY.md with vulnerability disclosure policy
- Update CONTRIBUTING.md for public audience
- Add website/ and eslint ignores for Astro-generated files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 10:47:22 -05:00

254 lines
6.8 KiB
Bash
Executable file

#!/usr/bin/env bash
# scripts/install.sh
# Install Archon CLI from GitHub releases
#
# Usage:
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
#
# Options (via environment variables):
# VERSION - Specific version to install (default: latest)
# INSTALL_DIR - Installation directory (default: /usr/local/bin)
# SKIP_CHECKSUM - Set to "true" to skip checksum verification (not recommended)
#
# Examples:
# # Install latest
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
#
# # Install specific version
# VERSION=v0.2.0 curl -fsSL ... | bash
#
# # Install to custom directory
# INSTALL_DIR=~/.local/bin curl -fsSL ... | bash
set -euo pipefail
# Configuration
REPO="coleam00/Archon"
BINARY_NAME="archon"
VERSION="${VERSION:-latest}"
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
success() { echo -e "${GREEN}[OK]${NC} $1"; }
# Detect OS and architecture
detect_platform() {
local os arch
os="$(uname -s | tr '[:upper:]' '[:lower:]')"
arch="$(uname -m)"
case "$os" in
darwin)
os="darwin"
;;
linux)
os="linux"
;;
mingw*|msys*|cygwin*)
error "Windows is not supported. Please use WSL2 or see documentation."
exit 1
;;
*)
error "Unsupported OS: $os"
exit 1
;;
esac
case "$arch" in
x86_64|amd64)
arch="x64"
;;
arm64|aarch64)
arch="arm64"
;;
*)
error "Unsupported architecture: $arch"
exit 1
;;
esac
echo "${os}-${arch}"
}
# Get download URL for the binary
get_download_url() {
local platform="$1"
local version="$2"
if [ "$version" = "latest" ]; then
echo "https://github.com/${REPO}/releases/latest/download/${BINARY_NAME}-${platform}"
else
echo "https://github.com/${REPO}/releases/download/${version}/${BINARY_NAME}-${platform}"
fi
}
# Get checksums URL
get_checksums_url() {
local version="$1"
if [ "$version" = "latest" ]; then
echo "https://github.com/${REPO}/releases/latest/download/checksums.txt"
else
echo "https://github.com/${REPO}/releases/download/${version}/checksums.txt"
fi
}
# Verify checksum
verify_checksum() {
local binary_path="$1"
local platform="$2"
local checksums_url="$3"
# Allow explicit skip with clear warning
if [ "${SKIP_CHECKSUM:-false}" = "true" ]; then
warn "Checksum verification SKIPPED by user request (SKIP_CHECKSUM=true)"
warn "This binary has NOT been verified - use at your own risk"
return 0
fi
info "Verifying checksum..."
local checksums
if ! checksums=$(curl -fsSL "$checksums_url" 2>/dev/null); then
error "Could not download checksums file from $checksums_url"
error "Cannot verify binary integrity."
error "To install anyway (not recommended): SKIP_CHECKSUM=true curl -fsSL ... | bash"
exit 1
fi
local expected_hash
expected_hash=$(echo "$checksums" | grep "${BINARY_NAME}-${platform}" | awk '{print $1}')
if [ -z "$expected_hash" ]; then
error "Could not find checksum for ${BINARY_NAME}-${platform} in checksums file"
error "This may indicate a corrupted or incomplete release."
error "To install anyway (not recommended): SKIP_CHECKSUM=true curl -fsSL ... | bash"
exit 1
fi
local actual_hash
if command -v sha256sum >/dev/null 2>&1; then
actual_hash=$(sha256sum "$binary_path" | awk '{print $1}')
elif command -v shasum >/dev/null 2>&1; then
actual_hash=$(shasum -a 256 "$binary_path" | awk '{print $1}')
else
error "No sha256sum or shasum available for checksum verification"
error "Please install sha256sum (coreutils) or use shasum"
error "To install anyway (not recommended): SKIP_CHECKSUM=true curl -fsSL ... | bash"
exit 1
fi
if [ "$expected_hash" != "$actual_hash" ]; then
error "Checksum verification failed!"
error "Expected: $expected_hash"
error "Actual: $actual_hash"
error "The downloaded binary may be corrupted or tampered with."
exit 1
fi
success "Checksum verified"
}
# Main installation
main() {
echo ""
echo " ╔═══════════════════════════════════════╗"
echo " ║ Archon CLI Installer ║"
echo " ╚═══════════════════════════════════════╝"
echo ""
# Detect platform
info "Detecting platform..."
local platform
platform=$(detect_platform)
success "Platform: $platform"
# Get download URL
local download_url checksums_url
download_url=$(get_download_url "$platform" "$VERSION")
checksums_url=$(get_checksums_url "$VERSION")
info "Version: $VERSION"
info "Download URL: $download_url"
# Create temp directory
local tmp_dir
tmp_dir=$(mktemp -d)
trap "rm -rf '$tmp_dir'" EXIT
local binary_path="$tmp_dir/$BINARY_NAME"
# Download binary
info "Downloading binary..."
if ! curl -fsSL "$download_url" -o "$binary_path"; then
error "Failed to download binary from $download_url"
exit 1
fi
success "Downloaded successfully"
# Verify checksum
verify_checksum "$binary_path" "$platform" "$checksums_url"
# Make executable
chmod +x "$binary_path"
# Install
info "Installing to $INSTALL_DIR/$BINARY_NAME..."
# Create install directory if needed
if [ ! -d "$INSTALL_DIR" ]; then
if ! mkdir -p "$INSTALL_DIR" 2>/dev/null; then
warn "Need sudo to create $INSTALL_DIR"
sudo mkdir -p "$INSTALL_DIR"
fi
fi
# Install binary
if ! mv "$binary_path" "$INSTALL_DIR/$BINARY_NAME" 2>/dev/null; then
warn "Need sudo to install to $INSTALL_DIR"
sudo mv "$binary_path" "$INSTALL_DIR/$BINARY_NAME"
fi
success "Installed to $INSTALL_DIR/$BINARY_NAME"
# Verify installation
echo ""
info "Verifying installation..."
local version_output
if version_output=$("$INSTALL_DIR/$BINARY_NAME" version 2>&1); then
echo "$version_output"
success "Installation complete!"
else
warn "Binary installed but version check failed:"
echo "$version_output"
warn "The binary may not work correctly. Please verify manually with: $INSTALL_DIR/$BINARY_NAME version"
fi
# Check if in PATH
if ! command -v "$BINARY_NAME" >/dev/null 2>&1; then
echo ""
warn "$INSTALL_DIR is not in your PATH"
echo "Add it with:"
echo " export PATH=\"$INSTALL_DIR:\$PATH\""
echo ""
echo "Or add to your shell config (~/.bashrc, ~/.zshrc, etc.)"
fi
echo ""
echo "Get started:"
echo " archon workflow list"
echo " archon workflow run assist \"What workflows are available?\""
echo ""
}
main "$@"