#!/bin/bash # Run frontend test with optional port exposure # Usage: ./run-test-frontend.sh [--expose-port {on|off}] # Default: off (no ports exposed to host) set -e EXPOSE_PORT="off" COMPOSE_FILE="docker-compose-frontend.yml" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --expose-port) EXPOSE_PORT="$2" shift 2 ;; --expose-port=*) EXPOSE_PORT="${1#*=}" shift ;; *) echo "Unknown option: $1" echo "Usage: $0 [--expose-port {on|off}]" exit 1 ;; esac done # Validate expose-port value if [[ "$EXPOSE_PORT" != "on" && "$EXPOSE_PORT" != "off" ]]; then echo "Error: --expose-port must be 'on' or 'off'" exit 1 fi # Select compose file based on expose-port if [[ "$EXPOSE_PORT" == "on" ]]; then COMPOSE_FILE="docker-compose-frontend-expose.yml" echo "๐Ÿ”Œ Port exposure: ON" else echo "๐Ÿ”Œ Port exposure: OFF" fi echo "๐Ÿ“ฆ Using compose file: $COMPOSE_FILE" echo "๐Ÿš€ Running HarborForge Frontend Test..." # Clean any previous containers first docker compose -f "$COMPOSE_FILE" down 2>/dev/null || true # Start services docker compose -f "$COMPOSE_FILE" up -d # Wait for frontend to be ready echo "โณ Waiting for services..." MAX_RETRIES=30 RETRY_COUNT=0 until docker run --rm --network harborforgetest_test-network curlimages/curl -s -o /dev/null -w "%{http_code}" http://frontend:3000/ 2>/dev/null | grep -q "200" || [ $RETRY_COUNT -eq $MAX_RETRIES ]; do echo " Waiting for frontend... ($RETRY_COUNT/$MAX_RETRIES)" sleep 2 RETRY_COUNT=$((RETRY_COUNT+1)) done if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then echo "โŒ Frontend failed to start" docker compose -f "$COMPOSE_FILE" logs docker compose -f "$COMPOSE_FILE" down -v exit 1 fi echo "โœ… Services ready!" # Run test docker compose -f "$COMPOSE_FILE" run --rm test TEST_EXIT_CODE=$? echo "" echo "๐Ÿงน Cleaning up containers and volumes..." docker compose -f "$COMPOSE_FILE" down -v if [ $TEST_EXIT_CODE -eq 0 ]; then echo "โœ… Test passed!" else echo "โŒ Test failed with exit code: $TEST_EXIT_CODE" fi exit $TEST_EXIT_CODE