Files
emcli/skills/emcli/scripts/install.sh
T
steve bd06b4b900
release / release (push) Successful in 40s
chore(release): default installer to v0.5.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 20:38:01 +01:00

91 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# install.sh — download the emcli binary from the project's release assets and
# put it on your PATH. Detects OS/arch, verifies the checksum when available.
#
# Usage:
# bash install.sh
#
# Environment overrides:
# EMCLI_VERSION release tag to fetch (default: v0.5.0)
# EMCLI_BASE_URL repo base URL (default: https://gitea.dcglab.co.uk/steve/emcli)
# EMCLI_INSTALL_DIR where to put the binary (default: $HOME/.local/bin)
#
# Release assets follow this naming scheme:
# emcli_<version>_<os>_<arch>[.exe] e.g. emcli_0.5.0_linux_amd64
# checksums.txt (sha256, one "<sum> <asset>" line per asset)
set -euo pipefail
VERSION="${EMCLI_VERSION:-v0.5.0}"
BASE_URL="${EMCLI_BASE_URL:-https://gitea.dcglab.co.uk/steve/emcli}"
INSTALL_DIR="${EMCLI_INSTALL_DIR:-$HOME/.local/bin}"
die() { printf 'install.sh: %s\n' "$1" >&2; exit 1; }
# --- detect OS -------------------------------------------------------------
case "$(uname -s)" in
Linux) OS=linux ;;
Darwin) OS=darwin ;;
MINGW*|MSYS*|CYGWIN*) OS=windows ;;
*) die "unsupported OS: $(uname -s)" ;;
esac
# --- detect arch -----------------------------------------------------------
case "$(uname -m)" in
x86_64|amd64) ARCH=amd64 ;;
arm64|aarch64) ARCH=arm64 ;;
*) die "unsupported architecture: $(uname -m)" ;;
esac
EXT=""
[ "$OS" = windows ] && EXT=".exe"
VER_NO_V="${VERSION#v}"
ASSET="emcli_${VER_NO_V}_${OS}_${ARCH}${EXT}"
URL="${BASE_URL}/releases/download/${VERSION}/${ASSET}"
DEST="${INSTALL_DIR}/emcli${EXT}"
# --- pick a downloader -----------------------------------------------------
download() { # download <url> <dest>
if command -v curl >/dev/null 2>&1; then
curl -fSL "$1" -o "$2"
elif command -v wget >/dev/null 2>&1; then
wget -qO "$2" "$1"
else
die "need curl or wget to download"
fi
}
mkdir -p "$INSTALL_DIR"
printf 'Downloading %s\n from %s\n' "$ASSET" "$URL"
download "$URL" "$DEST" || die "download failed (is ${VERSION} published yet?)"
chmod +x "$DEST"
# --- verify checksum if a checksums.txt is published -----------------------
if command -v sha256sum >/dev/null 2>&1; then
sums="$(mktemp)"
if download "${BASE_URL}/releases/download/${VERSION}/checksums.txt" "$sums" 2>/dev/null; then
want="$(awk -v a="$ASSET" '$2 == a || $2 == "*"a {print $1}' "$sums" | head -n1)"
if [ -n "$want" ]; then
got="$(sha256sum "$DEST" | awk '{print $1}')"
[ "$want" = "$got" ] || die "checksum mismatch for ${ASSET} (expected ${want}, got ${got})"
echo "checksum ok"
fi
fi
rm -f "$sums"
fi
printf 'Installed emcli to %s\n' "$DEST"
# --- PATH hint -------------------------------------------------------------
case ":$PATH:" in
*":$INSTALL_DIR:"*) ;;
*) printf 'Note: %s is not on your PATH. Add it, e.g.:\n export PATH="%s:$PATH"\n' "$INSTALL_DIR" "$INSTALL_DIR" ;;
esac
# --- confirm it runs -------------------------------------------------------
"$DEST" version || die "binary downloaded but failed to run"
echo "Done. Remember: emcli needs EMCLI_KEY set in the environment to do anything."