#!/bin/sh # decli installer — inspect before running: https://decli.dev/install # Target version: v2.3.0 set -eu echo "→ decli installer (v2.3.0)" echo " macOS only · uv required · pnpm optional for web" if ! command -v uv >/dev/null 2>&1; then echo "Install uv first: https://docs.astral.sh/uv/" echo " curl -LsSf https://astral.sh/uv/install.sh | sh" exit 1 fi # Local checkout wins (developers) if [ -f "pyproject.toml" ] && grep -q 'name = "decli"' pyproject.toml 2>/dev/null; then echo "→ installing from local checkout" uv sync uv run decli --help >/dev/null echo "✓ decli ready — run: uv run decli go setup" exit 0 fi INSTALL_DIR="${DECLI_INSTALL_DIR:-$HOME/dev/decli}" REPO_URL="https://github.com/derozic/decli.git" if [ -d "$INSTALL_DIR/.git" ]; then echo "→ updating existing clone at $INSTALL_DIR" git -C "$INSTALL_DIR" fetch --tags --quiet || true git -C "$INSTALL_DIR" checkout main 2>/dev/null || true git -C "$INSTALL_DIR" pull --ff-only 2>/dev/null || true else echo "→ cloning derozic/decli → $INSTALL_DIR" mkdir -p "$(dirname "$INSTALL_DIR")" git clone --depth 1 "$REPO_URL" "$INSTALL_DIR" fi cd "$INSTALL_DIR" # Prefer release tag when present if git rev-parse "refs/tags/v2.3.0" >/dev/null 2>&1; then git checkout "v2.3.0" 2>/dev/null || true fi uv sync uv run decli --help >/dev/null echo "" echo "✓ decli v2.3.0 ready" echo " cd $INSTALL_DIR && uv run decli go setup" echo " Docs: https://decli.dev/docs/desk" echo " Download page: https://decli.dev/download"