2026-01-22 18:10:30 +01:00
|
|
|
#!/bin/sh
|
2026-02-12 12:17:37 +01:00
|
|
|
# rtk installer - https://github.com/rtk-ai/rtk
|
2026-02-03 08:19:29 +00:00
|
|
|
# Usage: curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
|
2026-01-22 18:10:30 +01:00
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
2026-02-12 12:17:37 +01:00
|
|
|
REPO="rtk-ai/rtk"
|
2026-01-22 18:10:30 +01:00
|
|
|
BINARY_NAME="rtk"
|
2026-02-17 10:28:51 +01:00
|
|
|
INSTALL_DIR="${RTK_INSTALL_DIR:-$HOME/.local/bin}"
|
2026-01-22 18:10:30 +01:00
|
|
|
|
|
|
|
|
# Colors
|
|
|
|
|
RED='\033[0;31m'
|
|
|
|
|
GREEN='\033[0;32m'
|
|
|
|
|
YELLOW='\033[1;33m'
|
|
|
|
|
NC='\033[0m' # No Color
|
|
|
|
|
|
|
|
|
|
info() {
|
|
|
|
|
printf "${GREEN}[INFO]${NC} %s\n" "$1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
warn() {
|
|
|
|
|
printf "${YELLOW}[WARN]${NC} %s\n" "$1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
error() {
|
|
|
|
|
printf "${RED}[ERROR]${NC} %s\n" "$1"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Detect OS
|
|
|
|
|
detect_os() {
|
|
|
|
|
case "$(uname -s)" in
|
|
|
|
|
Linux*) OS="linux";;
|
|
|
|
|
Darwin*) OS="darwin";;
|
|
|
|
|
*) error "Unsupported operating system: $(uname -s)";;
|
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Detect architecture
|
|
|
|
|
detect_arch() {
|
|
|
|
|
case "$(uname -m)" in
|
|
|
|
|
x86_64|amd64) ARCH="x86_64";;
|
|
|
|
|
arm64|aarch64) ARCH="aarch64";;
|
|
|
|
|
*) error "Unsupported architecture: $(uname -m)";;
|
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Get latest release version
|
|
|
|
|
get_latest_version() {
|
|
|
|
|
VERSION=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
|
|
|
error "Failed to get latest version"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Build target triple
|
|
|
|
|
get_target() {
|
|
|
|
|
case "$OS" in
|
|
|
|
|
linux)
|
2026-02-28 18:38:52 +01:00
|
|
|
case "$ARCH" in
|
|
|
|
|
x86_64) TARGET="x86_64-unknown-linux-musl";;
|
|
|
|
|
aarch64) TARGET="aarch64-unknown-linux-gnu";;
|
|
|
|
|
esac
|
2026-01-22 18:10:30 +01:00
|
|
|
;;
|
|
|
|
|
darwin)
|
|
|
|
|
TARGET="${ARCH}-apple-darwin"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Download and install
|
|
|
|
|
install() {
|
|
|
|
|
info "Detected: $OS $ARCH"
|
|
|
|
|
info "Target: $TARGET"
|
|
|
|
|
info "Version: $VERSION"
|
|
|
|
|
|
|
|
|
|
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${BINARY_NAME}-${TARGET}.tar.gz"
|
|
|
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
|
ARCHIVE="${TEMP_DIR}/${BINARY_NAME}.tar.gz"
|
|
|
|
|
|
|
|
|
|
info "Downloading from: $DOWNLOAD_URL"
|
|
|
|
|
if ! curl -fsSL "$DOWNLOAD_URL" -o "$ARCHIVE"; then
|
|
|
|
|
error "Failed to download binary"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
info "Extracting..."
|
|
|
|
|
tar -xzf "$ARCHIVE" -C "$TEMP_DIR"
|
|
|
|
|
|
2026-02-17 10:28:51 +01:00
|
|
|
mkdir -p "$INSTALL_DIR"
|
|
|
|
|
mv "${TEMP_DIR}/${BINARY_NAME}" "${INSTALL_DIR}/"
|
2026-01-22 18:10:30 +01:00
|
|
|
|
|
|
|
|
chmod +x "${INSTALL_DIR}/${BINARY_NAME}"
|
|
|
|
|
|
|
|
|
|
# Cleanup
|
|
|
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
|
|
|
|
|
|
info "Successfully installed ${BINARY_NAME} to ${INSTALL_DIR}/${BINARY_NAME}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Verify installation
|
|
|
|
|
verify() {
|
|
|
|
|
if command -v "$BINARY_NAME" >/dev/null 2>&1; then
|
|
|
|
|
info "Verification: $($BINARY_NAME --version)"
|
|
|
|
|
else
|
2026-02-17 10:28:51 +01:00
|
|
|
warn "Binary installed but not in PATH. Add to your shell profile:"
|
|
|
|
|
warn " export PATH=\"\$HOME/.local/bin:\$PATH\""
|
2026-01-22 18:10:30 +01:00
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main() {
|
|
|
|
|
info "Installing $BINARY_NAME..."
|
|
|
|
|
|
|
|
|
|
detect_os
|
|
|
|
|
detect_arch
|
|
|
|
|
get_target
|
|
|
|
|
get_latest_version
|
|
|
|
|
install
|
|
|
|
|
verify
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
info "Installation complete! Run '$BINARY_NAME --help' to get started."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main
|