diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..99f7227 --- /dev/null +++ b/install.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env sh +# NORA installer — https://getnora.io/install.sh +# Usage: curl -fsSL https://getnora.io/install.sh | sh + +set -e + +REPO="getnora-io/nora" +BINARY="nora" +INSTALL_DIR="/usr/local/bin" + +# ── Detect OS and architecture ────────────────────────────────────────────── + +OS="$(uname -s)" +ARCH="$(uname -m)" + +case "$OS" in + Linux) os="linux" ;; + Darwin) os="darwin" ;; + *) + echo "Unsupported OS: $OS" + echo "Please download manually: https://github.com/$REPO/releases/latest" + exit 1 + ;; +esac + +case "$ARCH" in + x86_64 | amd64) arch="amd64" ;; + aarch64 | arm64) arch="arm64" ;; + *) + echo "Unsupported architecture: $ARCH" + echo "Please download manually: https://github.com/$REPO/releases/latest" + exit 1 + ;; +esac + +ASSET="${BINARY}-${os}-${arch}" + +# ── Get latest release version ────────────────────────────────────────────── + +VERSION="$(curl -fsSL "https://api.github.com/repos/$REPO/releases/latest" \ + | grep '"tag_name"' \ + | sed 's/.*"tag_name": *"\([^"]*\)".*/\1/')" + +if [ -z "$VERSION" ]; then + echo "Failed to get latest version" + exit 1 +fi + +echo "Installing NORA $VERSION ($os/$arch)..." + +# ── Download binary and checksum ──────────────────────────────────────────── + +BASE_URL="https://github.com/$REPO/releases/download/$VERSION" +TMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TMP_DIR"' EXIT + +echo "Downloading $ASSET..." +curl -fsSL "$BASE_URL/$ASSET" -o "$TMP_DIR/$BINARY" +curl -fsSL "$BASE_URL/$ASSET.sha256" -o "$TMP_DIR/$ASSET.sha256" + +# ── Verify checksum ───────────────────────────────────────────────────────── + +echo "Verifying checksum..." +EXPECTED="$(awk '{print $1}' "$TMP_DIR/$ASSET.sha256")" +ACTUAL="$(sha256sum "$TMP_DIR/$BINARY" | awk '{print $1}')" + +if [ "$EXPECTED" != "$ACTUAL" ]; then + echo "Checksum mismatch!" + echo " Expected: $EXPECTED" + echo " Actual: $ACTUAL" + exit 1 +fi + +echo "Checksum OK" + +# ── Install ───────────────────────────────────────────────────────────────── + +chmod +x "$TMP_DIR/$BINARY" + +if [ -w "$INSTALL_DIR" ]; then + mv "$TMP_DIR/$BINARY" "$INSTALL_DIR/$BINARY" +elif command -v sudo >/dev/null 2>&1; then + sudo mv "$TMP_DIR/$BINARY" "$INSTALL_DIR/$BINARY" +else + # Fallback to ~/.local/bin + INSTALL_DIR="$HOME/.local/bin" + mkdir -p "$INSTALL_DIR" + mv "$TMP_DIR/$BINARY" "$INSTALL_DIR/$BINARY" + echo "Installed to $INSTALL_DIR/$BINARY" + echo "Make sure $INSTALL_DIR is in your PATH" +fi + +# ── Done ──────────────────────────────────────────────────────────────────── + +echo "" +echo "NORA $VERSION installed to $INSTALL_DIR/$BINARY" +echo "" +nora --version 2>/dev/null || true