#!/usr/bin/env bash set -euo pipefail job_name="${1:-adminfront-tests}" mkdir -p reports PLAYWRIGHT_BROWSERS_PATH="${HOME}/.cache/ms-playwright" PLAYWRIGHT_CHROMIUM_COMPLETE="${PLAYWRIGHT_BROWSERS_PATH}/chromium-1208/INSTALLATION_COMPLETE" PLAYWRIGHT_FIREFOX_COMPLETE="${PLAYWRIGHT_BROWSERS_PATH}/firefox-1509/INSTALLATION_COMPLETE" PLAYWRIGHT_WEBKIT_COMPLETE="${PLAYWRIGHT_BROWSERS_PATH}/webkit-2248/INSTALLATION_COMPLETE" if [ -f "$PLAYWRIGHT_CHROMIUM_COMPLETE" ] && [ -f "$PLAYWRIGHT_FIREFOX_COMPLETE" ] && [ -f "$PLAYWRIGHT_WEBKIT_COMPLETE" ]; then playwright_install_cmd=(sh -c 'echo "Playwright browsers already installed"') playwright_install_desc="Playwright browsers already installed" else playwright_install_cmd=(npx playwright install) playwright_install_desc="npx playwright install" fi set +e ( cd adminfront npm ci --ignore-scripts ) 2>&1 | tee reports/adminfront-install.log install_exit_code=${PIPESTATUS[0]} set -e if [ "$install_exit_code" -ne 0 ]; then { echo "# Adminfront Test Failure Report" echo echo "- Workflow: \`${GITHUB_WORKFLOW:-Code Check}\`" echo "- Job: \`${job_name}\`" echo "- Reason: \`Dependency install failed\`" echo "- Exit Code: \`$install_exit_code\`" echo echo "## Command" echo "\`cd adminfront && npm ci --ignore-scripts\`" echo echo "## Install Log Tail (last 200 lines)" echo '```text' tail -n 200 reports/adminfront-install.log echo '```' } > reports/adminfront-test-failure-report.md exit 1 fi set +e ( cd adminfront "${playwright_install_cmd[@]}" ) 2>&1 | tee reports/adminfront-provision.log provision_exit_code=${PIPESTATUS[0]} set -e if [ "$provision_exit_code" -ne 0 ]; then { echo "# Adminfront Test Failure Report" echo echo "- Workflow: \`${GITHUB_WORKFLOW:-Code Check}\`" echo "- Job: \`${job_name}\`" echo "- Reason: \`Browser provisioning failed\`" echo "- Exit Code: \`$provision_exit_code\`" echo echo "## Command" echo "\`cd adminfront && ${playwright_install_desc}\`" echo echo "## Provision Log Tail (last 200 lines)" echo '```text' tail -n 200 reports/adminfront-provision.log echo '```' } > reports/adminfront-test-failure-report.md exit 1 fi set +e port="${PORT:-5173}" echo "==> adminfront using PORT=$port" ( cd adminfront PORT="$port" PLAYWRIGHT_WORKERS="${PLAYWRIGHT_WORKERS:-1}" npm test ) 2>&1 | tee reports/adminfront-test.log test_exit_code=${PIPESTATUS[0]} set -e if [ "$test_exit_code" -ne 0 ]; then { echo "# Adminfront Test Failure Report" echo echo "- Workflow: \`${GITHUB_WORKFLOW:-Code Check}\`" echo "- Job: \`${job_name}\`" echo "- Exit Code: \`$test_exit_code\`" echo echo "## Commands" echo "1. \`cd adminfront\`" echo "2. \`npm ci --ignore-scripts\`" echo "3. \`${playwright_install_desc}\`" echo "4. \`npm test\`" echo echo "## Log Tail (last 200 lines)" echo '```text' tail -n 200 reports/adminfront-test.log echo '```' } > reports/adminfront-test-failure-report.md fi exit "$test_exit_code"