#!/usr/bin/env sh # Install Rain from GitHub Releases. # Usage: curl -fsSL https://raw.githubusercontent.com/yugal109/rain-releases/main/install.sh | sh set -e REPO="yugal109/rain-releases" PREFIX="${PREFIX:-$HOME/.local}" INSTALL_SHARE="$PREFIX/share/rain" INSTALL_BIN="$PREFIX/bin" VERSION="${RAIN_VERSION:-latest}" os="$(uname -s | tr '[:upper:]' '[:lower:]')" arch="$(uname -m)" case "$arch" in arm64|aarch64) arch="arm64" ;; x86_64|amd64) arch="x64" ;; *) echo "Unsupported architecture: $arch" >&2; exit 1 ;; esac case "$os" in darwin) asset="rain-macos-${arch}.tar.gz" ;; linux) asset="rain-linux-${arch}.tar.gz" ;; *) echo "Unsupported OS: $os" >&2 exit 1 ;; esac if [ "$VERSION" = "latest" ]; then url=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/${VERSION}" \ | grep "browser_download_url.*${asset}\"" \ | head -1 \ | cut -d '"' -f 4) else url="https://github.com/${REPO}/releases/download/v${VERSION}/${asset}" fi [ -n "$url" ] || { echo "No release found for ${asset}." >&2 echo "See https://github.com/${REPO}/releases" >&2 exit 1 } tmpdir=$(mktemp -d) trap 'rm -rf "$tmpdir"' EXIT echo "Downloading $asset ..." curl -fsSL "$url" | tar -xz -C "$tmpdir" mkdir -p "$INSTALL_BIN" "$INSTALL_SHARE" RAIN_SRC=$(find "$tmpdir" -path '*/bin/rain' -type f | head -1) [ -n "$RAIN_SRC" ] || { echo "install.sh: unexpected archive layout (expected */bin/rain)" >&2 exit 1 } RAIN_EXE="$INSTALL_SHARE/rain" cp "$RAIN_SRC" "$RAIN_EXE" VERSION_FILE=$(find "$tmpdir" -name VERSION -type f | head -1) [ -n "$VERSION_FILE" ] && cp "$VERSION_FILE" "$INSTALL_SHARE/VERSION" chmod +x "$RAIN_EXE" ln -sf "$RAIN_EXE" "$INSTALL_BIN/rain" echo "Rain installed to $INSTALL_BIN/rain" if ! echo ":$PATH:" | grep -q ":$INSTALL_BIN:"; then echo "Add to PATH: export PATH=\"$INSTALL_BIN:\$PATH\"" fi