#!/bin/sh set -eu RELEASE_REPO="kestroll-org/cli-releases" INSTALL_DIR="${KESTROLL_INSTALL_DIR:-$HOME/.local/bin}" NON_INTERACTIVE="${KESTROLL_NON_INTERACTIVE:-0}" fail() { echo "kestroll installer: $*" >&2 exit 1 } command -v curl >/dev/null 2>&1 || fail "curl is required" command -v tar >/dev/null 2>&1 || fail "tar is required" case "$(uname -s)" in Darwin) os="darwin" ;; Linux) os="linux" ;; *) fail "unsupported operating system: $(uname -s)" ;; esac case "$(uname -m)" in arm64|aarch64) arch="arm64" ;; x86_64|amd64) arch="amd64" ;; *) fail "unsupported architecture: $(uname -m)" ;; esac asset="kestroll-${os}-${arch}.tar.gz" if [ -n "${KESTROLL_VERSION:-}" ]; then version="${KESTROLL_VERSION}" case "$version" in v*) ;; *) version="v${version}" ;; esac release_url="https://github.com/${RELEASE_REPO}/releases/download/${version}" else release_url="https://github.com/${RELEASE_REPO}/releases/latest/download" fi tmp_dir=$(mktemp -d 2>/dev/null || mktemp -d -t kestroll) trap 'rm -rf "$tmp_dir"' EXIT HUP INT TERM echo "Downloading Kestroll CLI for ${os}/${arch}..." curl -fsSL --proto '=https' --tlsv1.2 "${release_url}/${asset}" -o "${tmp_dir}/${asset}" curl -fsSL --proto '=https' --tlsv1.2 "${release_url}/checksums.txt" -o "${tmp_dir}/checksums.txt" expected=$(awk -v name="$asset" '$2 == name || $2 == "*" name { print $1; exit }' "${tmp_dir}/checksums.txt") [ -n "$expected" ] || fail "release checksum is missing for ${asset}" if command -v sha256sum >/dev/null 2>&1; then actual=$(sha256sum "${tmp_dir}/${asset}" | awk '{print $1}') elif command -v shasum >/dev/null 2>&1; then actual=$(shasum -a 256 "${tmp_dir}/${asset}" | awk '{print $1}') else fail "sha256sum or shasum is required" fi [ "$actual" = "$expected" ] || fail "checksum verification failed" tar -xzf "${tmp_dir}/${asset}" -C "$tmp_dir" [ -f "${tmp_dir}/kestroll" ] || fail "release archive did not contain kestroll" chmod 755 "${tmp_dir}/kestroll" mkdir -p "$INSTALL_DIR" install_tmp="${INSTALL_DIR}/.kestroll-install-$$" cp "${tmp_dir}/kestroll" "$install_tmp" chmod 755 "$install_tmp" mv -f "$install_tmp" "${INSTALL_DIR}/kestroll" case ":$PATH:" in *:"$INSTALL_DIR":*) ;; *) profile="" case "${SHELL:-}" in */zsh) profile="${ZDOTDIR:-$HOME}/.zshrc" ;; */bash) profile="$HOME/.bashrc" ;; esac interactive=1 case "$NON_INTERACTIVE" in 1|true|TRUE|yes|YES) interactive=0 ;; esac if [ "$interactive" = "1" ] && [ -n "$profile" ] && [ -r /dev/tty ]; then printf 'Add %s to PATH in %s? [Y/n] ' "$INSTALL_DIR" "$profile" >/dev/tty read answer /dev/null 2>&1; then printf '\n%s\n' "$path_line" >> "$profile" fi ;; esac fi echo "Add Kestroll to this shell with:" echo " export PATH=\"${INSTALL_DIR}:\$PATH\"" ;; esac echo "Installed Kestroll CLI to ${INSTALL_DIR}/kestroll" "${INSTALL_DIR}/kestroll" --version