|
| 1 | +#!/usr/bin/env bash |
| 2 | +# diffmind installer |
| 3 | +# Usage: |
| 4 | +# curl -fsSL https://github.com/thinkgrid-labs/diffmind/releases/latest/download/install.sh | bash |
| 5 | +# |
| 6 | +# Options (env vars): |
| 7 | +# VERSION — pin a specific release tag, e.g. VERSION=v0.6.0 |
| 8 | +# INSTALL_DIR — override install location (default: /usr/local/bin) |
| 9 | + |
| 10 | +set -euo pipefail |
| 11 | + |
| 12 | +REPO="thinkgrid-labs/diffmind" |
| 13 | +BIN="diffmind" |
| 14 | +INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}" |
| 15 | +VERSION="${VERSION:-latest}" |
| 16 | + |
| 17 | +# ── Detect platform ────────────────────────────────────────────────────────── |
| 18 | + |
| 19 | +OS=$(uname -s) |
| 20 | +ARCH=$(uname -m) |
| 21 | + |
| 22 | +case "$OS" in |
| 23 | + Darwin) |
| 24 | + case "$ARCH" in |
| 25 | + x86_64) TARGET="x86_64-apple-darwin" ;; |
| 26 | + arm64|aarch64) TARGET="aarch64-apple-darwin" ;; |
| 27 | + *) echo "error: unsupported macOS architecture: $ARCH" >&2; exit 1 ;; |
| 28 | + esac |
| 29 | + ;; |
| 30 | + Linux) |
| 31 | + case "$ARCH" in |
| 32 | + x86_64) TARGET="x86_64-unknown-linux-gnu" ;; |
| 33 | + aarch64) TARGET="aarch64-unknown-linux-gnu" ;; |
| 34 | + *) echo "error: unsupported Linux architecture: $ARCH" >&2; exit 1 ;; |
| 35 | + esac |
| 36 | + ;; |
| 37 | + *) |
| 38 | + echo "error: unsupported OS '$OS'." >&2 |
| 39 | + echo " For Windows, download the .zip from:" >&2 |
| 40 | + echo " https://github.com/$REPO/releases/latest" >&2 |
| 41 | + exit 1 |
| 42 | + ;; |
| 43 | +esac |
| 44 | + |
| 45 | +# ── Resolve download URL ───────────────────────────────────────────────────── |
| 46 | + |
| 47 | +if [ "$VERSION" = "latest" ]; then |
| 48 | + BASE_URL="https://github.com/$REPO/releases/latest/download" |
| 49 | +else |
| 50 | + BASE_URL="https://github.com/$REPO/releases/download/$VERSION" |
| 51 | +fi |
| 52 | + |
| 53 | +ARCHIVE="${BIN}-${TARGET}.tar.gz" |
| 54 | +URL="${BASE_URL}/${ARCHIVE}" |
| 55 | + |
| 56 | +# ── Download & extract ─────────────────────────────────────────────────────── |
| 57 | + |
| 58 | +TMP=$(mktemp -d) |
| 59 | +trap 'rm -rf "$TMP"' EXIT |
| 60 | + |
| 61 | +echo " Detected $OS / $ARCH → $TARGET" |
| 62 | +echo " Fetching $URL" |
| 63 | +echo "" |
| 64 | + |
| 65 | +if ! curl -fSL --progress-bar "$URL" -o "$TMP/$ARCHIVE"; then |
| 66 | + echo "" >&2 |
| 67 | + echo "error: download failed. Check that version '$VERSION' exists at:" >&2 |
| 68 | + echo " https://github.com/$REPO/releases" >&2 |
| 69 | + exit 1 |
| 70 | +fi |
| 71 | + |
| 72 | +tar -xzf "$TMP/$ARCHIVE" -C "$TMP" |
| 73 | + |
| 74 | +if [ ! -f "$TMP/$BIN" ]; then |
| 75 | + echo "error: binary '$BIN' not found in archive" >&2 |
| 76 | + exit 1 |
| 77 | +fi |
| 78 | + |
| 79 | +chmod +x "$TMP/$BIN" |
| 80 | + |
| 81 | +# ── Install ────────────────────────────────────────────────────────────────── |
| 82 | + |
| 83 | +if [ -w "$INSTALL_DIR" ]; then |
| 84 | + mv "$TMP/$BIN" "$INSTALL_DIR/$BIN" |
| 85 | +else |
| 86 | + echo " Installing to $INSTALL_DIR (sudo required)" |
| 87 | + sudo mv "$TMP/$BIN" "$INSTALL_DIR/$BIN" |
| 88 | +fi |
| 89 | + |
| 90 | +# ── Done ───────────────────────────────────────────────────────────────────── |
| 91 | + |
| 92 | +echo "" |
| 93 | +echo " ✓ diffmind installed → $INSTALL_DIR/$BIN" |
| 94 | +echo "" |
| 95 | +"$INSTALL_DIR/$BIN" --version |
| 96 | +echo "" |
| 97 | +echo " Next steps:" |
| 98 | +echo " diffmind download # download AI model (one-time setup)" |
| 99 | +echo " diffmind --branch main # review your current branch" |
| 100 | +echo "" |
0 commit comments