Files
wehub-resource-sync 36b3af2e3d
PR Check / Tests: Unit (macos-latest) (push) Waiting to run
PR Check / Tests: Unit (ubuntu-24.04) (push) Waiting to run
PR Check / Tests: Unit (ubuntu-24.04-arm) (push) Waiting to run
PR Check / Tests: Unit (windows-latest) (push) Waiting to run
PR Check / Code Quality: Format (push) Failing after 1s
PR Check / Code Quality: Lint (darwin) (push) Failing after 0s
PR Check / Code Quality: Lint (freebsd) (push) Failing after 1s
PR Check / Code Quality: Lint (windows) (push) Failing after 1s
PR Check / Code Quality: Lint (linux) (push) Failing after 1s
PR Check / Security: Vulnerability Scan (push) Failing after 0s
Update Documentation / update-docs (push) Failing after 2s
PR Check / Code Quality: Vendor (push) Failing after 1s
PR Check / Code Quality: Coverage (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:22:06 +08:00

117 lines
2.9 KiB
Bash

#!/usr/bin/env bash
# Installs the latest release of witr from GitHub
# Repo: https://github.com/pranshuparmar/witr
set -euo pipefail
REPO="pranshuparmar/witr"
# Standard configurable install prefix (override to avoid sudo):
# INSTALL_PREFIX="$HOME/.local" ./install.sh
INSTALL_PREFIX="${INSTALL_PREFIX:=/usr/local}"
INSTALL_PATH="$INSTALL_PREFIX/bin/witr"
MAN_PATH="$INSTALL_PREFIX/share/man/man1/witr.1"
# Detect OS
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$OS" in
linux)
OS=linux
;;
darwin)
OS=darwin
;;
freebsd)
OS=freebsd
;;
*)
echo "Unsupported OS: $OS" >&2
exit 1
;;
esac
# Detect Architecture
ARCH=$(uname -m)
case "$ARCH" in
x86_64|amd64)
ARCH=amd64
;;
aarch64|arm64)
ARCH=arm64
;;
*)
echo "Unsupported architecture: $ARCH" >&2
exit 1
;;
esac
# Ensure required tools exist
for cmd in curl install; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Missing required command: $cmd"
exit 1
fi
done
# Get latest release tag from GitHub API
LATEST=$(curl -fsSL "https://api.github.com/repos/$REPO/releases/latest" | grep '"tag_name"' | cut -d '"' -f4)
if [[ -z "$LATEST" ]]; then
echo "Could not determine latest release tag." >&2
exit 1
fi
# Construct download URL
URL="https://github.com/$REPO/releases/download/$LATEST/witr-$OS-$ARCH"
TMP=$(mktemp)
MANURL="https://github.com/$REPO/releases/download/$LATEST/witr.1"
MAN_TMP=$(mktemp)
# Cleanup on exit
cleanup() {
rm -f "${TMP:-}" "${MAN_TMP:-}"
}
trap cleanup EXIT
# Download release
curl -fL "$URL" -o "$TMP"
curl -fL "$MANURL" -o "$MAN_TMP"
INSTALL_BIN_DIR=$(dirname "$INSTALL_PATH")
INSTALL_MAN_DIR=$(dirname "$MAN_PATH")
# Decide whether we need sudo (based on whether we can write to the target dirs)
need_sudo=0
if ! mkdir -p "$INSTALL_BIN_DIR" 2>/dev/null; then need_sudo=1; fi
if ! mkdir -p "$INSTALL_MAN_DIR" 2>/dev/null; then need_sudo=1; fi
if [[ "$need_sudo" == "0" ]]; then
[[ -w "$INSTALL_BIN_DIR" ]] || need_sudo=1
[[ -w "$INSTALL_MAN_DIR" ]] || need_sudo=1
fi
SUDO=()
if [[ "$need_sudo" == "1" ]]; then
# checking for sudo because alpine using doas and people like me started to use run0
if command -v sudo >/dev/null 2>&1; then
# echo "sudo is available"
SUDO=(sudo)
elif command -v doas >/dev/null 2>&1; then
# echo "doas is available"
SUDO=(doas)
elif command -v run0 >/dev/null 2>&1; then
# echo "run0 is available"
SUDO=(run0)
fi
fi
# Install
${SUDO[@]+"${SUDO[@]}"} install -m 755 "$TMP" "$INSTALL_PATH"
# Install man page
${SUDO[@]+"${SUDO[@]}"} mkdir -p "$INSTALL_MAN_DIR"
${SUDO[@]+"${SUDO[@]}"} install -m 644 "$MAN_TMP" "$MAN_PATH"
echo "witr installed successfully to $INSTALL_PATH (version: $LATEST, os: $OS, arch: $ARCH)"
echo "Man page installed to $MAN_PATH"