mirror of
https://github.com/getnora-io/nora.git
synced 2026-04-12 12:40:31 +00:00
99 lines
3.2 KiB
Bash
99 lines
3.2 KiB
Bash
#!/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
|