install.sh raw
1 #!/bin/bash
2 set -e
3
4 BASE_URL="https://git.smesh.lol/moxie-releases"
5 INSTALL_DIR="${MOXIE_INSTALL_DIR:-/opt/moxie}"
6
7 ARCH=$(uname -m)
8 case "$ARCH" in
9 x86_64) ARCH=amd64 ;;
10 aarch64) ARCH=arm64 ;;
11 *) echo "error: unsupported arch $ARCH" >&2; exit 1 ;;
12 esac
13
14 OS=$(uname -s | tr '[:upper:]' '[:lower:]')
15 if [ "$OS" != "linux" ]; then
16 echo "error: only linux supported, got $OS" >&2
17 exit 1
18 fi
19
20 PATTERN="moxie-v.*-${OS}-${ARCH}\\.tar\\.gz"
21
22 echo "fetching release list ..." >&2
23 PAGE=$(curl -sL "$BASE_URL")
24 FILES=$(echo "$PAGE" | grep -oP '(?<=href="/moxie-releases/blob/)[^"]+\.tar\.gz' | grep -E "$PATTERN" || true)
25
26 if [ -z "$FILES" ]; then
27 echo "error: no releases found for ${OS}/${ARCH}" >&2
28 exit 1
29 fi
30
31 LATEST=$(echo "$FILES" | sed 's/moxie-v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \2 \3 &/' | sort -k1,1n -k2,2n -k3,3n | tail -1 | awk '{print $4}')
32
33 echo "latest: $LATEST" >&2
34 echo "downloading ..." >&2
35
36 DL=$(mktemp -d)
37 trap "rm -rf $DL" EXIT
38
39 curl -fsSL "${BASE_URL}/raw/${LATEST}" -o "${DL}/${LATEST}"
40
41 SUDO=""
42 if [ ! -w "$(dirname "$INSTALL_DIR")" ] && [ "$(id -u)" != "0" ]; then
43 SUDO=sudo
44 fi
45
46 if [ -d "$INSTALL_DIR" ]; then
47 echo "removing old installation ..." >&2
48 $SUDO rm -rf "$INSTALL_DIR"
49 fi
50
51 $SUDO mkdir -p "$INSTALL_DIR"
52 $SUDO tar xzf "${DL}/${LATEST}" --strip-components=1 -C "$INSTALL_DIR"
53
54 if [ ! -x "$INSTALL_DIR/bin/moxie" ]; then
55 echo "error: install failed - moxie binary not found" >&2
56 exit 1
57 fi
58
59 echo "" >&2
60 echo "installed to $INSTALL_DIR" >&2
61 echo "" >&2
62 echo "add to your shell profile:" >&2
63 echo " export PATH=\"$INSTALL_DIR/bin:\$PATH\"" >&2
64 echo " export MOXIEROOT=\"$INSTALL_DIR\"" >&2
65 echo "" >&2
66 echo "moxie requires LLVM 19 (libLLVM-19, libclang)." >&2
67