mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-05-08 14:25:10 +02:00
Add test script
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
#!/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.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 (triggers pre_install which creates the remoteterm user)
|
||||
pacman -Syu --noconfirm >/dev/null 2>&1
|
||||
pacman -U --noconfirm /pkg/*.pkg.tar.zst
|
||||
|
||||
# Create the state directory (systemd StateDirectory= would do this on a real host)
|
||||
mkdir -p /var/lib/remoteterm-meshcore
|
||||
chown remoteterm:remoteterm /var/lib/remoteterm-meshcore
|
||||
|
||||
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"
|
||||
Reference in New Issue
Block a user