| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #!/bin/bash
- # Docker entrypoint for Playwright E2E tests
- set -euo pipefail
- # Utility functions
- print_status() { echo -e '\033[34m🔧\033[0m' "$1"; }
- print_success() { echo -e '\033[32m✅\033[0m' "$1"; }
- print_error() { echo -e '\033[31m❌\033[0m' "$1"; }
- print_warning() { echo -e '\033[33m⚠️\033[0m' "$1"; }
- validate_environment() {
- print_status "Starting Playwright E2E Tests in Docker"
- print_status "Working directory: $(pwd)"
- print_status "Environment: NODE_ENV=${NODE_ENV:-development}, CI=${CI:-false}"
- if [[ -z "${OPENROUTER_API_KEY:-}" ]]; then
- print_error "OPENROUTER_API_KEY not set"
- exit 1
- fi
- print_success "Environment validation passed"
- }
- setup_environment() {
- print_status "Setting up environment..."
- # Initialize D-Bus machine ID if it doesn't exist
- if [[ ! -f /var/lib/dbus/machine-id ]]; then
- dbus-uuidgen > /var/lib/dbus/machine-id 2>/dev/null || true
- fi
- ####### Set up D-Bus ######
- # This is necessary to enable IPC messaging between core and webview
- runtime_dir="/tmp/runtime-$(id -u)"
- if [[ ! -d "$runtime_dir" ]]; then
- mkdir -p "$runtime_dir"
- chmod 700 "$runtime_dir"
- fi
- export XDG_RUNTIME_DIR="$runtime_dir"
- # Start D-Bus session
- if command -v dbus-launch >/dev/null 2>&1; then
- if dbus_output=$(dbus-launch --sh-syntax 2>/dev/null); then
- eval "$dbus_output"
- export DBUS_SESSION_BUS_ADDRESS
- else
- print_warning "Failed to start D-Bus session, continuing anyway"
- fi
- else
- print_warning "dbus-launch not available, continuing anyway"
- fi
- print_status "Setting up keyring services for VS Code secrets API..."
- ####### Set up Keyrings ######
- # This is needed for VS Code secret storage to work properly
- mkdir -p ~/.cache ~/.local/share/keyrings
- # Set environment variables for keyring
- export XDG_CURRENT_DESKTOP=Unity
- export GNOME_KEYRING_CONTROL=1
- # Start gnome-keyring with empty password (headless mode)
- if command -v gnome-keyring-daemon >/dev/null 2>&1; then
- # Initialize keyring with empty password
- if keyring_output=$(printf '\n' | gnome-keyring-daemon --unlock 2>/dev/null); then
- eval "$keyring_output" 2>/dev/null || true
- fi
-
- # Start keyring daemon
- if keyring_start=$(printf '\n' | gnome-keyring-daemon --start 2>/dev/null); then
- eval "$keyring_start" 2>/dev/null || true
- export GNOME_KEYRING_CONTROL
- print_success "Keyring services initialized"
- else
- print_warning "Failed to start keyring daemon - VS Code will fall back to environment variables"
- export VSCODE_SECRETS_FALLBACK=true
- fi
- else
- print_warning "gnome-keyring-daemon not available - VS Code will fall back to environment variables"
- export VSCODE_SECRETS_FALLBACK=true
- fi
- # Test keyring functionality (optional debugging)
- if command -v secret-tool >/dev/null 2>&1 && [[ "${VSCODE_SECRETS_FALLBACK:-}" != "true" ]]; then
- if secret-tool store --label="test" test-key test-value 2>/dev/null; then
- secret-tool clear test-key test-value 2>/dev/null || true
- print_success "Keyring functionality verified"
- else
- print_warning "Keyring test failed - enabling fallback mode"
- export VSCODE_SECRETS_FALLBACK=true
- fi
- fi
- print_success "Environment setup complete!"
- }
- setup_local_env_secrets() {
- print_status "Setting up .env.local with secrets..."
- # Create .env.local with API key
- echo "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" > /tmp/.env.local
- print_success "Secrets setup in /tmp/.env.local!"
- }
- run_playwright_tests() {
- print_status "Running Playwright tests..."
- # Change to the playwright-e2e directory where node_modules and config are located
- cd /workspace/apps/playwright-e2e
- # Set environment variable for HTML report output directory
- export PLAYWRIGHT_HTML_REPORT="/workspace/apps/playwright-e2e/playwright-report"
- # Build test command
- test_cmd=(
- xvfb-run --auto-servernum --server-num=1
- npx dotenvx run -f /tmp/.env.local --
- playwright test
- --output /workspace/apps/playwright-e2e/test-results
- )
- # Add any additional arguments passed to the container
- test_cmd+=("$@")
- # Run the tests
- if "${test_cmd[@]}"; then
- print_success "Playwright tests completed successfully!"
- return 0
- else
- print_error "Playwright tests failed"
- return 1
- fi
- }
- # Signal handlers
- cleanup() {
- print_warning "Received signal, shutting down gracefully"
- exit 0
- }
- trap cleanup SIGTERM SIGINT
- # Main execution
- main() {
- validate_environment
- setup_environment
- setup_local_env_secrets
- if run_playwright_tests "$@"; then
- exit_code=0
- else
- exit_code=1
- fi
- print_success "Playwright execution completed with exit code: $exit_code"
- exit $exit_code
- }
- # Run main function with all arguments
- main "$@"
|