Add cloud/VPS firstboot path test (17 checks)
Validates the full TARGET=cloud module pipeline: - pre-baked var validation - GPU skip on headless - offline package repo path (SHARE/packages) - .env generation with quoted values - hostname, tailscale skip, deploy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
18586d3f09
commit
efa64a4574
1 changed files with 207 additions and 0 deletions
207
firstboot/cloud-path-test.sh
Executable file
207
firstboot/cloud-path-test.sh
Executable file
|
|
@ -0,0 +1,207 @@
|
|||
#!/bin/sh
|
||||
# Cloud/VPS Firstboot Path Test
|
||||
# Validates the full module pipeline with TARGET=cloud pre-baked vars.
|
||||
# No root required. Runs in a tmpdir sandbox.
|
||||
#
|
||||
# Usage: sh firstboot/cloud-path-test.sh
|
||||
|
||||
set -eu
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
TESTDIR="${SCRIPT_DIR}/tmp/cloud-path-test-$$"
|
||||
mkdir -p "$TESTDIR"
|
||||
|
||||
# ── Mock filesystem ──
|
||||
mkdir -p "$TESTDIR/home/clawdie/clawdie-ai/node_modules"
|
||||
mkdir -p "$TESTDIR/etc/pkg/repos"
|
||||
mkdir -p "$TESTDIR/etc/profile.d"
|
||||
mkdir -p "$TESTDIR/var/log"
|
||||
mkdir -p "$TESTDIR/var/cache/pkg/bastille"
|
||||
mkdir -p "$TESTDIR/usr/local/share/clawdie-iso/packages"
|
||||
|
||||
# Mock clawdie-ai
|
||||
cat > "$TESTDIR/home/clawdie/clawdie-ai/package.json" <<'PKG'
|
||||
{"name":"clawdie-ai","version":"1.0.2","scripts":{"install-all":"echo '[npm] Services ready'"}}
|
||||
PKG
|
||||
|
||||
# Mock tarball
|
||||
tar -czf "$TESTDIR/clawdie-ai.tar.gz" -C "$TESTDIR" home/clawdie/clawdie-ai 2>/dev/null || true
|
||||
|
||||
PASS=0
|
||||
FAIL=0
|
||||
check() {
|
||||
if [ "$1" = "0" ]; then
|
||||
echo " PASS: $2"
|
||||
PASS=$((PASS + 1))
|
||||
else
|
||||
echo " FAIL: $2"
|
||||
FAIL=$((FAIL + 1))
|
||||
fi
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " Cloud/VPS Firstboot Path Test"
|
||||
echo " Simulates TARGET=cloud with pre-baked vars (no wizard)"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
|
||||
# ── Cloud pre-baked vars (minimum required) ──
|
||||
export TARGET="cloud"
|
||||
export ASSISTANT_NAME="CloudClawdie"
|
||||
export AGENT_DOMAIN="clawdie.cloud"
|
||||
export AGENT_GENDER="f"
|
||||
export TZ="Europe/Ljubljana"
|
||||
|
||||
# ── Optional cloud vars ──
|
||||
export FEATURE_TAILSCALE="NO"
|
||||
export FEATURE_GITEA="YES"
|
||||
export CODE_HOSTING_MODE="gitea"
|
||||
export FEATURE_GIT="YES"
|
||||
export LOCAL_LLM_PROVIDER="none"
|
||||
export FEATURE_OLLAMA="NO"
|
||||
export FEATURE_LLAMA_CPP="NO"
|
||||
export FEATURE_OLLAMA_HPP="NO"
|
||||
export DEFAULT_PKG_BRANCH="latest"
|
||||
export SSH_PUBLIC_KEY=""
|
||||
export PI_TUI_PROVIDER=""
|
||||
export PI_TUI_MODEL=""
|
||||
export FEATURE_TELEGRAM="NO"
|
||||
export TELEGRAM_BOT_TOKEN=""
|
||||
export TELEGRAM_CHAT_ID=""
|
||||
export TAILSCALE_AUTHKEY=""
|
||||
export ZAI_API_KEY=""
|
||||
export OPENROUTER_API_KEY=""
|
||||
export ANTHROPIC_API_KEY=""
|
||||
export EMBED_BASE_URL=""
|
||||
export EMBED_MODEL=""
|
||||
|
||||
# ── Test guards ──
|
||||
export SHELL_ENV_TEST=1
|
||||
export SHELL_PKG_TEST=1
|
||||
export SHELL_GPU_TEST=1
|
||||
export SHELL_NVIDIA_TEST=1
|
||||
export SHELL_SYSTEM_TEST=1
|
||||
export SHELL_TAILSCALE_TEST=1
|
||||
export SHELL_DEPLOY_TEST=1
|
||||
|
||||
# ── Sandbox overrides ──
|
||||
export CLAWDIE_HOME="$TESTDIR/home/clawdie"
|
||||
export CLAWDIE_AI_DIR="$CLAWDIE_HOME/clawdie-ai"
|
||||
export CLAWDIE_TARBALL="$TESTDIR/clawdie-ai.tar.gz"
|
||||
export PKG_CONF_DIR="$TESTDIR/etc/pkg/repos"
|
||||
export FREEBSD_REPO_CONF="$PKG_CONF_DIR/FreeBSD.conf"
|
||||
export CLAWDIE_USB_REPO_CONF="$PKG_CONF_DIR/Clawdie-USB.conf"
|
||||
export USB_PKG_PATH="$TESTDIR/usr/local/share/clawdie-iso/packages"
|
||||
export BASTILLE_PKG_CACHE="$TESTDIR/var/cache/pkg/bastille"
|
||||
export RC_CONF="$TESTDIR/etc/rc.conf"
|
||||
export HOSTNAME_FILE="$TESTDIR/etc/hostname"
|
||||
export PROFILE_DIR="$TESTDIR/etc/profile.d"
|
||||
export LOG_FILE="$TESTDIR/var/log/cloud-test.log"
|
||||
export PROGRESS_FILE="$TESTDIR/var/log/cloud-test.progress"
|
||||
export ENV_FILE="$CLAWDIE_HOME/.env"
|
||||
|
||||
touch "$LOG_FILE" "$PROGRESS_FILE" "$RC_CONF"
|
||||
|
||||
# ── Source all modules ──
|
||||
. "$SCRIPT_DIR/firstboot/shell-env.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-pkg.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-gpu.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-nvidia.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-system.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-tailscale.sh" 2>/dev/null
|
||||
. "$SCRIPT_DIR/firstboot/shell-deploy.sh" 2>/dev/null
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo "[1/7] Cloud validation"
|
||||
_ok=0
|
||||
[ -n "${ASSISTANT_NAME:-}" ] || _ok=1
|
||||
[ -n "${AGENT_DOMAIN:-}" ] || _ok=1
|
||||
[ -n "${TZ:-}" ] || _ok=1
|
||||
check "$_ok" "Required pre-baked vars present (ASSISTANT_NAME, AGENT_DOMAIN, TZ)"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[2/7] GPU detection (headless — should not crash)"
|
||||
export DETECTED_GPU=""
|
||||
clawdie_shell_gpu_detect 2>/dev/null
|
||||
check "0" "GPU detect completed on headless system"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[3/7] Package config"
|
||||
clawdie_shell_pkg_setup 2>/dev/null
|
||||
[ -f "$FREEBSD_REPO_CONF" ]; check "$?" "FreeBSD repo config written"
|
||||
[ -f "$CLAWDIE_USB_REPO_CONF" ]; check "$?" "USB repo config written"
|
||||
if grep -q "usr/local/share/clawdie-iso/packages" "$CLAWDIE_USB_REPO_CONF" 2>/dev/null; then
|
||||
check "0" "USB repo points to SHARE/packages (offline path correct)"
|
||||
else
|
||||
check "1" "USB repo points to SHARE/packages (offline path correct)"
|
||||
fi
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[4/7] Env generation"
|
||||
clawdie_shell_env_generate 2>/dev/null
|
||||
[ -f "$ENV_FILE" ]; check "$?" ".env file created"
|
||||
|
||||
# Check key vars are in .env (quotes included in format)
|
||||
for var_check in \
|
||||
'ASSISTANT_NAME="CloudClawdie"' \
|
||||
'AGENT_DOMAIN="clawdie.cloud"' \
|
||||
'TZ="Europe/Ljubljana"' \
|
||||
'CODE_HOSTING_MODE="gitea"' \
|
||||
'FEATURE_GITEA="YES"' \
|
||||
'FEATURE_TAILSCALE="NO"'; do
|
||||
if grep -qF "$var_check" "$ENV_FILE" 2>/dev/null; then
|
||||
check "0" "$var_check in .env"
|
||||
else
|
||||
check "1" "$var_check in .env"
|
||||
fi
|
||||
done
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[5/7] System config"
|
||||
clawdie_shell_system_config >/dev/null 2>&1
|
||||
[ -f "$HOSTNAME_FILE" ]; check "$?" "Hostname file created"
|
||||
if [ -f "$HOSTNAME_FILE" ]; then
|
||||
_hn=$(cat "$HOSTNAME_FILE")
|
||||
if echo "$_hn" | grep -q "clawdie.cloud"; then
|
||||
check "0" "Hostname = $_hn"
|
||||
else
|
||||
check "1" "Hostname = $_hn (expected *clawdie.cloud*)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[6/7] Tailscale (disabled)"
|
||||
clawdie_shell_tailscale_setup >/dev/null 2>&1
|
||||
check "0" "Tailscale skipped (FEATURE_TAILSCALE=NO)"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "[7/7] Deploy"
|
||||
clawdie_shell_deploy 2>/dev/null
|
||||
[ -f "$CLAWDIE_AI_DIR/package.json" ]; check "$?" "Clawdie-AI deployed"
|
||||
[ -f "$CLAWDIE_AI_DIR/.env" ]; check "$?" ".env copied into clawdie-ai"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " PASS: $PASS FAIL: $FAIL"
|
||||
echo "============================================================"
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$TESTDIR"
|
||||
|
||||
if [ "$FAIL" -eq 0 ]; then
|
||||
echo ""
|
||||
echo " All cloud path checks passed."
|
||||
exit 0
|
||||
else
|
||||
echo ""
|
||||
echo " $FAIL check(s) failed — review output above."
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Add table
Reference in a new issue