#!/usr/bin/env bash set -euo pipefail REPO="MDietermann/Archduino" BASE_URL="${ARCHDUINO_RELEASE_BASE:-https://gitlab.hive-brain.de}" API_URL="${BASE_URL}/api/v1" err() { echo "bootstrap: error: $*" >&2; exit 1; } msg() { echo "==> $*"; } # Arch gate [ -f /etc/arch-release ] || err "Archduino v1 supports Arch Linux only." # Arch detect case "$(uname -m)" in x86_64) ARCH="amd64" ;; aarch64) ARCH="arm64" ;; *) err "unsupported architecture: $(uname -m)" ;; esac # Prereqs msg "Installing prerequisites (sudo, git, curl, ca-certificates)" sudo pacman -Sy --needed --noconfirm sudo git curl ca-certificates # Discover latest release msg "Querying latest release from Gitea" API_ENDPOINT="${API_URL}/repos/${REPO}/releases/latest" RELEASE_JSON=$(curl -fsSL "$API_ENDPOINT") || err "failed to fetch ${API_ENDPOINT}" # Extract tag_name without requiring jq TAG=$(printf '%s' "$RELEASE_JSON" | grep -o '"tag_name":[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/') [ -n "$TAG" ] || err "could not parse tag_name from release metadata" VERSION="${TAG#v}" msg "Latest release: ${TAG}" # Download TMP=$(mktemp -d) trap 'rm -rf "$TMP"' EXIT TARBALL="archduino_${VERSION}_linux_${ARCH}.tar.gz" CHECKSUMS="checksums.txt" DL_BASE="${BASE_URL}/${REPO}/releases/download/${TAG}" msg "Downloading ${TARBALL}" curl -fsSL -o "${TMP}/${TARBALL}" "${DL_BASE}/${TARBALL}" || err "tarball download failed" curl -fsSL -o "${TMP}/${CHECKSUMS}" "${DL_BASE}/${CHECKSUMS}" || err "checksums download failed" # Verify msg "Verifying checksum" (cd "$TMP" && sha256sum --check --ignore-missing "$CHECKSUMS") || err "checksum verification failed" # Extract msg "Extracting" tar -xzf "${TMP}/${TARBALL}" -C "$TMP" # Install msg "Installing to /usr/local/bin (sudo)" sudo install -m 0755 "${TMP}/archduino" /usr/local/bin/archduino msg "Installing shell completions" sudo install -Dm 0644 "${TMP}/completions/archduino.bash" /usr/share/bash-completion/completions/archduino sudo install -Dm 0644 "${TMP}/completions/_archduino" /usr/share/zsh/site-functions/_archduino sudo install -Dm 0644 "${TMP}/completions/archduino.fish" /usr/share/fish/vendor_completions.d/archduino.fish msg "Launching: archduino install $*" exec /usr/local/bin/archduino install "$@"