| 1 | #!/bin/sh |
| 2 | # wynba installer: download the right binary from GitHub releases and install it. |
| 3 | # Usage: |
| 4 | # curl -fsSL https://raw.githubusercontent.com/flaxodotdev/wynba/main/install.sh | sh |
| 5 | # curl -fsSL .../install.sh | sh -s -- --prefix /tmp/test --version v0.1.0 |
| 6 | set -eu |
| 7 | |
| 8 | REPO="flaxodotdev/wynba" |
| 9 | BIN="wynba" |
| 10 | VERSION="latest" |
| 11 | PREFIX="" |
| 12 | |
| 13 | usage() { |
| 14 | echo "Usage: install.sh [--prefix DIR] [--version TAG]" >&2 |
| 15 | echo " --prefix DIR install directory for the binary (default: /usr/local if writable, else ~/.local)" >&2 |
| 16 | echo " --version TAG release tag to install (default: latest)" >&2 |
| 17 | } |
| 18 | |
| 19 | while [ $# -gt |
| 20 | case "$1" in |
| 21 | --prefix) PREFIX="${2 |
| 22 | --prefix=*) PREFIX= |
| 23 | --version) VERSION="${2 |
| 24 | --version=*) VERSION= |
| 25 | -h|--help) usage; |
| 26 | *) echo "Unknown argument: $1 |
| 27 | esac |
| 28 | done |
| 29 | |
| 30 | if [ "$VERSION" |
| 31 | if command -v curl |
| 32 | TAG="$(curl |
| 33 | elif command -v wget |
| 34 | TAG="$(wget |
| 35 | else |
| 36 | echo "Error: need curl or wget to resolve the latest release." >&2 |
| 37 | exit 1 |
| 38 | fi |
| 39 | if [ -z "${TAG |
| 40 | echo "Error: could not resolve latest release for ${REPO |
| 41 | exit 1 |
| 42 | fi |
| 43 | VERSION="$TAG" |
| 44 | fi |
| 45 | |
| 46 | OS="$(uname -s |
| 47 | ARCH="$(uname -m |
| 48 | case "$OS" in |
| 49 | darwin) OS="apple-darwin |
| 50 | linux) OS="unknown-linux-gnu |
| 51 | mingw*|msys*| |
| 52 | *) echo "Unsupported OS: $OS |
| 53 | esac |
| 54 | case "$ARCH" in |
| 55 | x86_64|amd64) ARCH= |
| 56 | arm64|aarch64) ARCH= |
| 57 | *) echo "Unsupported architecture: $ARCH |
| 58 | esac |
| 59 | |
| 60 | ASSET="${BIN}- |
| 61 | case "$OS" in |
| 62 | pc-windows-gnu) ASSET="${ |
| 63 | esac |
| 64 | URL="https://github.com/${REPO} |
| 65 | |
| 66 | TMP="$(mktemp -t |
| 67 | trap 'rm -f "$TMP"' EXIT |
| 68 | |
| 69 | echo "Downloading ${ASSET} |
| 70 | if command -v curl |
| 71 | curl -fsSL "$URL |
| 72 | elif command -v wget |
| 73 | wget -qO "$TMP |
| 74 | else |
| 75 | echo "Error: need curl or wget to download." >&2 |
| 76 | exit 1 |
| 77 | fi |
| 78 | chmod +x "$TMP" |
| 79 | |
| 80 | if [ -z "$PREFIX |
| 81 | if [ -w "/usr/local/bin" |
| 82 | PREFIX="/usr/local" |
| 83 | else |
| 84 | PREFIX="$HOME/.local" |
| 85 | fi |
| 86 | fi |
| 87 | BINDIR="${PREFIX}/bin |
| 88 | mkdir -p "$BINDIR" |
| 89 | |
| 90 | DEST="${BINDIR}/ |
| 91 | case "$OS" in |
| 92 | pc-windows-gnu) DEST="${ |
| 93 | esac |
| 94 | |
| 95 | if mv "$TMP" |
| 96 | : |
| 97 | else |
| 98 | echo "Need elevated permissions to write to ${BINDIR |
| 99 | sudo mv "$TMP |
| 100 | fi |
| 101 | chmod +x "$DEST" |
| 102 | trap - EXIT INT |
| 103 | |
| 104 | echo "Installed ${BIN} |
| 105 | case ":$PATH:" |
| 106 | *":${BINDIR} |
| 107 | *) echo "Note: ${ |
| 108 | esac |
| 109 | "$DEST" |