mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-05-01 11:02:56 +02:00
113 lines
3.6 KiB
Bash
Executable File
113 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# test_aur_package.sh — Build the AUR package in one Arch container, then
|
|
# install and run it in a clean Arch container with port 8000 exposed.
|
|
#
|
|
# Usage:
|
|
# ./scripts/quality/test_aur_package.sh [--port PORT]
|
|
#
|
|
# The script streams application logs until you Ctrl-C.
|
|
|
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
PORT=8000
|
|
if [ "${1:-}" = "--port" ]; then PORT="${2:-8000}"; fi
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m'
|
|
|
|
ARTIFACT_DIR="$(mktemp -d)"
|
|
INSTALL_CONTAINER="remoteterm-aur-test-$$"
|
|
|
|
cleanup() {
|
|
echo
|
|
echo -e "${YELLOW}Cleaning up...${NC}"
|
|
docker rm -f "$INSTALL_CONTAINER" 2>/dev/null || true
|
|
rm -rf "$ARTIFACT_DIR"
|
|
echo -e "${GREEN}Done.${NC}"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# ── Phase 1: Build ────────────────────────────────────────────────────────────
|
|
|
|
echo -e "${BOLD}=== Phase 1: Build AUR package ===${NC}"
|
|
|
|
docker run --rm \
|
|
-v "$REPO_ROOT/pkg/aur:/pkg:ro" \
|
|
-v "$ARTIFACT_DIR:/out" \
|
|
archlinux:latest bash -c '
|
|
set -euo pipefail
|
|
|
|
pacman -Syu --noconfirm base-devel git curl >/dev/null 2>&1
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh >/dev/null 2>&1
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
pacman -S --noconfirm nodejs npm >/dev/null 2>&1
|
|
|
|
useradd -m builder
|
|
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
|
|
|
BUILD_DIR=/home/builder/build
|
|
mkdir -p "$BUILD_DIR"
|
|
cp /pkg/PKGBUILD /pkg/remoteterm-meshcore.install \
|
|
/pkg/remoteterm-meshcore.service /pkg/remoteterm-meshcore.sysusers \
|
|
/pkg/remoteterm-meshcore.tmpfiles /pkg/remoteterm.env "$BUILD_DIR/"
|
|
chown -R builder:builder "$BUILD_DIR"
|
|
|
|
echo "Building package..."
|
|
su builder -c "export PATH=\"$HOME/.local/bin:\$PATH\" && cd $BUILD_DIR && makepkg -sf --noconfirm" 2>&1
|
|
|
|
cp "$BUILD_DIR"/remoteterm-meshcore-*.pkg.tar.zst /out/
|
|
echo "Package artifact copied to /out/"
|
|
ls -lh /out/*.pkg.tar.zst
|
|
'
|
|
|
|
PKG_FILE="$(ls "$ARTIFACT_DIR"/*.pkg.tar.zst 2>/dev/null | head -1)"
|
|
if [ -z "$PKG_FILE" ]; then
|
|
echo -e "${RED}Build failed — no .pkg.tar.zst produced${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Built: $(basename "$PKG_FILE") ($(du -h "$PKG_FILE" | cut -f1))${NC}"
|
|
echo
|
|
|
|
# ── Phase 2: Install and run ─────────────────────────────────────────────────
|
|
|
|
echo -e "${BOLD}=== Phase 2: Install and run ===${NC}"
|
|
|
|
docker run -d \
|
|
--name "$INSTALL_CONTAINER" \
|
|
-p "$PORT:8000" \
|
|
-v "$ARTIFACT_DIR:/pkg:ro" \
|
|
archlinux:latest bash -c '
|
|
set -euo pipefail
|
|
|
|
# Install the package (sysusers.d creates the remoteterm user, tmpfiles.d creates the data dir)
|
|
pacman -Syu --noconfirm >/dev/null 2>&1
|
|
pacman -U --noconfirm /pkg/*.pkg.tar.zst
|
|
|
|
# In a container there is no systemd to trigger sysusers/tmpfiles automatically,
|
|
# so run them manually.
|
|
systemd-sysusers
|
|
systemd-tmpfiles --create
|
|
|
|
echo "============================================"
|
|
echo " RemoteTerm installed — starting server"
|
|
echo "============================================"
|
|
|
|
# Run as the remoteterm service user, matching the systemd unit
|
|
exec su -s /bin/bash remoteterm -c "cd /opt/remoteterm-meshcore && exec .venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000"
|
|
' >/dev/null
|
|
|
|
echo -e "${CYAN}Container:${NC} $INSTALL_CONTAINER"
|
|
echo -e "${CYAN}Listening:${NC} http://localhost:$PORT"
|
|
echo -e "${CYAN}Health: ${NC} http://localhost:$PORT/api/health"
|
|
echo
|
|
echo -e "${YELLOW}Streaming logs (Ctrl-C to stop and clean up)...${NC}"
|
|
echo
|
|
|
|
docker logs -f "$INSTALL_CONTAINER"
|