#!/bin/bash TEST_NAME="$1" TEST_REPO="$2" GOLDEN_IMAGE="$3" SSH_KEY="${4:-$HOME/.ssh/id_rsa}" if [ -z "$TEST_NAME" ] || [ -z "$TEST_REPO" ] || [ -z "$GOLDEN_IMAGE" ]; then echo "Usage: $0 [ssh_key]" exit 1 fi VM_NAME="$TEST_NAME-$$" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORK_DIR="/tmp/test-$VM_NAME" mkdir -p "$WORK_DIR" cd "$WORK_DIR" cleanup() { echo "Cleaning up..." "$SCRIPT_DIR/cleanup_vm.sh" "$VM_NAME" 2>/dev/null || true cd /tmp rm -rf "$WORK_DIR" } trap cleanup EXIT echo "Provisioning VM..." VM_IP=$("$SCRIPT_DIR/provision_vm.sh" "$VM_NAME" "$GOLDEN_IMAGE" 60 | tail -1) if [ -z "$VM_IP" ] || [ "$VM_IP" = "ERROR" ]; then echo "ERROR: Failed to provision VM" exit 1 fi echo "VM ready at $VM_IP" echo "Cloning test repository..." git clone "$TEST_REPO" test-repo SPARROWFILE=$(find test-repo -name "main.raku" -o -name "sparrowfile" | head -1) if [ -z "$SPARROWFILE" ]; then echo "ERROR: No sparrowfile found" exit 1 fi echo "Running test: $SPARROWFILE" sparrowdo \ --host="$VM_IP" \ --ssh_user=rocky \ --ssh_private_key="$SSH_KEY" \ --ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \ --no_sudo \ --sparrowfile="$SPARROWFILE" \ --verbose \ --color echo "Test completed successfully"