#!/bin/sh # wynba installer: download the right binary from GitHub releases and install it. # Usage: # curl -fsSL https://raw.githubusercontent.com/flaxodotdev/wynba/main/install.sh | sh # curl -fsSL .../install.sh | sh -s -- --prefix /tmp/test --version v0.1.0 set -eu REPO="flaxodotdev/wynba" BIN="wynba" VERSION="latest" PREFIX="" usage() { echo "Usage: install.sh [--prefix DIR] [--version TAG]" >&2 echo " --prefix DIR install directory for the binary (default: /usr/local if writable, else ~/.local)" >&2 echo " --version TAG release tag to install (default: latest)" >&2 } while [ $# -gt 0 ]; do case "$1" in --prefix) PREFIX="${2:-}"; shift 2 ;; --prefix=*) PREFIX="${1#--prefix=}"; shift ;; --version) VERSION="${2:-}"; shift 2 ;; --version=*) VERSION="${1#--version=}"; shift ;; -h|--help) usage; exit 0 ;; *) echo "Unknown argument: $1" >&2; usage; exit 1 ;; esac done if [ "$VERSION" = "latest" ]; then if command -v curl >/dev/null 2>&1; then TAG="$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep -m1 '"tag_name"' | cut -d'"' -f4 || true)" elif command -v wget >/dev/null 2>&1; then TAG="$(wget -qO- "https://api.github.com/repos/${REPO}/releases/latest" | grep -m1 '"tag_name"' | cut -d'"' -f4 || true)" else echo "Error: need curl or wget to resolve the latest release." >&2 exit 1 fi if [ -z "${TAG:-}" ]; then echo "Error: could not resolve latest release for ${REPO}." >&2 exit 1 fi VERSION="$TAG" fi OS="$(uname -s | tr '[:upper:]' '[:lower:]')" ARCH="$(uname -m)" case "$OS" in darwin) OS="apple-darwin" ;; linux) OS="unknown-linux-gnu" ;; mingw*|msys*|cygwin*|windowsnt) OS="pc-windows-gnu"; ARCH="x86_64" ;; *) echo "Unsupported OS: $OS" >&2; exit 1 ;; esac case "$ARCH" in x86_64|amd64) ARCH="x86_64" ;; arm64|aarch64) ARCH="aarch64" ;; *) echo "Unsupported architecture: $ARCH" >&2; exit 1 ;; esac ASSET="${BIN}-${ARCH}-${OS}" case "$OS" in pc-windows-gnu) ASSET="${ASSET}.exe" ;; esac URL="https://github.com/${REPO}/releases/download/${VERSION}/${ASSET}" TMP="$(mktemp -t wynba-install.XXXXXX 2>/dev/null || mktemp /tmp/wynba-install.XXXXXX)" trap 'rm -f "$TMP"' EXIT INT TERM echo "Downloading ${ASSET} (${VERSION})..." if command -v curl >/dev/null 2>&1; then curl -fsSL "$URL" -o "$TMP" elif command -v wget >/dev/null 2>&1; then wget -qO "$TMP" "$URL" else echo "Error: need curl or wget to download." >&2 exit 1 fi chmod +x "$TMP" if [ -z "$PREFIX" ]; then if [ -w "/usr/local/bin" ]; then PREFIX="/usr/local" else PREFIX="$HOME/.local" fi fi BINDIR="${PREFIX}/bin" mkdir -p "$BINDIR" DEST="${BINDIR}/${BIN}" case "$OS" in pc-windows-gnu) DEST="${DEST}.exe" ;; esac if mv "$TMP" "$DEST" 2>/dev/null; then : else echo "Need elevated permissions to write to ${BINDIR}, trying sudo..." sudo mv "$TMP" "$DEST" fi chmod +x "$DEST" trap - EXIT INT TERM echo "Installed ${BIN} ${VERSION} to ${DEST}" case ":$PATH:" in *":${BINDIR}:"*) ;; *) echo "Note: ${BINDIR} is not on your PATH. Add: export PATH=\"${BINDIR}:\$PATH\"" >&2 ;; esac "$DEST" --version 2>/dev/null || true