#!/bin/sh set -eu BASE_URL="https://umka.day/cli" INSTALL_DIR="${UMKA_INSTALL_DIR:-$HOME/.umka/bin}" download() { url="$1" dest="$2" if command -v curl >/dev/null 2>&1; then code=$(curl -fsSL -o "$dest" -w '%{http_code}' "$url") if [ "$code" != "200" ]; then echo "Error: download failed (HTTP $code)" >&2 echo "URL: $url" >&2 exit 1 fi elif command -v wget >/dev/null 2>&1; then wget -qO "$dest" "$url" || { echo "Error: download failed" >&2 echo "URL: $url" >&2 exit 1 } else echo "Error: curl or wget is required" >&2 exit 1 fi } main() { version="${1:-latest}" platform="$(uname -s | tr '[:upper:]' '[:lower:]')" arch="$(uname -m)" case "$platform" in linux) platform="linux" ;; darwin) platform="darwin" ;; *) echo "Error: unsupported platform: $platform" >&2 exit 1 ;; esac case "$arch" in x86_64|amd64) arch="x86_64" ;; aarch64|arm64) arch="aarch64" ;; *) echo "Error: unsupported architecture: $arch" >&2 exit 1 ;; esac binary="umka-${platform}-${arch}" echo "Downloading umka (${version}) for ${platform}/${arch}..." tmpdir="$(mktemp -d)" trap 'rm -rf "$tmpdir"' EXIT download "${BASE_URL}/${version}/${binary}" "$tmpdir/umka" download "${BASE_URL}/${version}/${binary}.sha256" "$tmpdir/umka.sha256" expected="$(cat "$tmpdir/umka.sha256" | tr -d '[:space:]')" if command -v sha256sum >/dev/null 2>&1; then actual="$(sha256sum "$tmpdir/umka" | cut -d' ' -f1)" elif command -v shasum >/dev/null 2>&1; then actual="$(shasum -a 256 "$tmpdir/umka" | cut -d' ' -f1)" else echo "Warning: cannot verify checksum (sha256sum/shasum not found)" >&2 actual="$expected" fi if [ "$actual" != "$expected" ]; then echo "Error: checksum mismatch" >&2 echo " expected: $expected" >&2 echo " got: $actual" >&2 exit 1 fi chmod +x "$tmpdir/umka" mkdir -p "$INSTALL_DIR" mv "$tmpdir/umka" "$INSTALL_DIR/umka" echo "Installed umka to $INSTALL_DIR/umka" case ":$PATH:" in *":$INSTALL_DIR:"*) ;; *) echo "" echo "Add umka to your PATH:" echo " export PATH=\"$INSTALL_DIR:\$PATH\"" ;; esac } main "$@"