aboutsummaryrefslogtreecommitdiff
path: root/website/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'website/install.sh')
-rwxr-xr-xwebsite/install.sh88
1 files changed, 88 insertions, 0 deletions
diff --git a/website/install.sh b/website/install.sh
new file mode 100755
index 00000000..e705be08
--- /dev/null
+++ b/website/install.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+set -eu
+
+REPO="ogulcancelik/herdr"
+BIN="herdr"
+INSTALL_DIR="${HERDR_INSTALL_DIR:-$HOME/.local/bin}"
+
+main() {
+ echo ""
+ echo " ,ww"
+ echo " wWWWWWWW_) herdr installer"
+ echo " \`WWWWWW' herdr.dev"
+ echo " II II"
+ echo ""
+
+ # detect platform
+ OS="$(uname -s)"
+ case "$OS" in
+ Linux) os="linux" ;;
+ Darwin) os="macos" ;;
+ *) err "unsupported OS: $OS" ;;
+ esac
+
+ ARCH="$(uname -m)"
+ case "$ARCH" in
+ x86_64|amd64) arch="x86_64" ;;
+ aarch64|arm64) arch="aarch64" ;;
+ *) err "unsupported architecture: $ARCH" ;;
+ esac
+
+ log "detected ${os}/${arch}"
+
+ # check dependencies
+ need curl
+
+ # download the latest binary directly via GitHub's stable redirect.
+ # this avoids the releases API, which can return transient 403s.
+ ASSET="${BIN}-${os}-${arch}"
+ URL="https://github.com/${REPO}/releases/latest/download/${ASSET}"
+
+ log "downloading latest release..."
+ TMP="$(mktemp -d)"
+ trap 'rm -rf "$TMP"' EXIT
+
+ if ! curl -fsSL --retry 3 --connect-timeout 10 --max-time 120 "$URL" -o "${TMP}/${BIN}"; then
+ err "download failed. check https://github.com/${REPO}/releases"
+ fi
+
+ # install
+ mkdir -p "$INSTALL_DIR"
+ mv "${TMP}/${BIN}" "${INSTALL_DIR}/${BIN}"
+ chmod +x "${INSTALL_DIR}/${BIN}"
+
+ log "installed ${BIN} to ${INSTALL_DIR}/${BIN}"
+
+ # check PATH
+ case ":${PATH}:" in
+ *":${INSTALL_DIR}:"*) ;;
+ *)
+ echo ""
+ warn "${INSTALL_DIR} is not in your PATH"
+ echo " add it to your shell config:"
+ echo ""
+ echo " export PATH=\"${INSTALL_DIR}:\$PATH\""
+ echo ""
+ ;;
+ esac
+
+ # verify
+ if command -v "$BIN" >/dev/null 2>&1; then
+ echo ""
+ log "ready. run 'herdr' to get started."
+ fi
+
+ echo ""
+}
+
+log() { echo " \033[32m>\033[0m $1"; }
+warn() { echo " \033[33m!\033[0m $1"; }
+err() { echo " \033[31m✗\033[0m $1" >&2; exit 1; }
+
+need() {
+ if ! command -v "$1" >/dev/null 2>&1; then
+ err "requires '$1' — please install it first"
+ fi
+}
+
+main "$@"