#!/bin/bash # Test a prepackaged container # Usage: ./test-container.sh set -e if [ $# -lt 2 ]; then echo "Usage: $0 " echo "" echo "Example:" echo " $0 k484 ./k484-package" exit 1 fi APP_ID="$1" PACKAGE_DIR="$2" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" echo "๐Ÿงช Testing container: $APP_ID" echo "๐Ÿ“ฆ Package directory: $PACKAGE_DIR" echo "" # Check if package directory exists if [ ! -d "$PACKAGE_DIR" ]; then echo "โŒ Package directory not found: $PACKAGE_DIR" exit 1 fi # Determine container runtime RUNTIME="auto" if command -v podman >/dev/null 2>&1 && podman info >/dev/null 2>&1; then RUNTIME="podman" elif command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then RUNTIME="docker" else echo "โŒ No container runtime available!" exit 1 fi echo "๐Ÿณ Using runtime: $RUNTIME" echo "" # Check for Dockerfile if [ ! -f "$PACKAGE_DIR/Dockerfile" ]; then echo "โŒ Dockerfile not found in $PACKAGE_DIR" exit 1 fi # Build container image IMAGE_NAME="${APP_ID}:dev" echo "๐Ÿ”จ Building container image: $IMAGE_NAME" $RUNTIME build -t "$IMAGE_NAME" "$PACKAGE_DIR" || { echo "โŒ Failed to build container image" exit 1 } echo "โœ… Image built successfully" echo "" # Create test manifest MANIFEST_DIR="$PROJECT_ROOT/apps/$APP_ID" mkdir -p "$MANIFEST_DIR" MANIFEST_FILE="$MANIFEST_DIR/manifest.yml" cat > "$MANIFEST_FILE" </dev/null 2>&1; then echo "โš ๏ธ Backend not running at $BACKEND_URL" echo " Start backend first:" echo " cd $PROJECT_ROOT/core" echo " ARCHIPELAGO_DEV_MODE=true cargo run --bin archipelago" echo "" echo " Or install via RPC manually:" echo " curl -X POST $BACKEND_URL/rpc/v1 \\" echo " -H 'Content-Type: application/json' \\" echo " -d '{\"method\":\"container-install\",\"params\":{\"manifest_path\":\"$MANIFEST_FILE\"}}'" exit 0 fi # Install via RPC echo "๐Ÿ“ฅ Installing container via RPC..." RESPONSE=$(curl -s -X POST "$BACKEND_URL/rpc/v1" \ -H "Content-Type: application/json" \ -d "{\"method\":\"container-install\",\"params\":{\"manifest_path\":\"$MANIFEST_FILE\"}}") if echo "$RESPONSE" | grep -q '"error"'; then echo "โŒ Installation failed:" echo "$RESPONSE" | jq '.' 2>/dev/null || echo "$RESPONSE" exit 1 fi CONTAINER_NAME=$(echo "$RESPONSE" | jq -r '.result' 2>/dev/null || echo "") echo "โœ… Container installed: $CONTAINER_NAME" echo "" # Start container echo "๐Ÿš€ Starting container..." curl -s -X POST "$BACKEND_URL/rpc/v1" \ -H "Content-Type: application/json" \ -d "{\"method\":\"container-start\",\"params\":{\"app_id\":\"$APP_ID\"}}" >/dev/null sleep 2 # Check status echo "๐Ÿ“Š Container status:" STATUS=$(curl -s -X POST "$BACKEND_URL/rpc/v1" \ -H "Content-Type: application/json" \ -d "{\"method\":\"container-status\",\"params\":{\"app_id\":\"$APP_ID\"}}") echo "$STATUS" | jq '.' 2>/dev/null || echo "$STATUS" echo "" # Get logs echo "๐Ÿ“‹ Container logs (last 20 lines):" LOGS=$(curl -s -X POST "$BACKEND_URL/rpc/v1" \ -H "Content-Type: application/json" \ -d "{\"method\":\"container-logs\",\"params\":{\"app_id\":\"$APP_ID\",\"lines\":20}}") echo "$LOGS" | jq -r '.[]' 2>/dev/null || echo "$LOGS" echo "" echo "โœ… Test complete!" echo "" echo "To clean up:" echo " curl -X POST $BACKEND_URL/rpc/v1 \\" echo " -H 'Content-Type: application/json' \\" echo " -d '{\"method\":\"container-remove\",\"params\":{\"app_id\":\"$APP_ID\"}}'" echo " $RUNTIME rmi $IMAGE_NAME"