diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 552b9ac3..057457a2 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -1,89 +1,41 @@ -name: E2E Tests +- name: Build server + run: npm run build --workspace=apps/server -on: - pull_request: - branches: - - '*' - push: - branches: - - main - - master +- name: Set up Git user + run: | + git config --global user.name "GitHub CI" + git config --global user.email "ci@example.com" -jobs: - e2e: - runs-on: ubuntu-latest - timeout-minutes: 15 +- name: Start backend server + run: npm run start --workspace=apps/server & + env: + PORT: 3008 + NODE_ENV: test + # Use a deterministic API key so Playwright can log in reliably + AUTOMAKER_API_KEY: test-api-key-for-e2e-tests + # Reduce log noise in CI + AUTOMAKER_HIDE_API_KEY: 'true' + # Avoid real API calls during CI + AUTOMAKER_MOCK_AGENT: 'true' + # Simulate containerized environment to skip sandbox confirmation dialogs + IS_CONTAINERIZED: 'true' - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup project - uses: ./.github/actions/setup-project - with: - check-lockfile: 'true' - rebuild-node-pty-path: 'apps/server' - - - name: Install Playwright browsers - run: npx playwright install --with-deps chromium - working-directory: apps/ui - - - name: Build server - run: npm run build --workspace=apps/server - - - name: Start backend server - run: npm run start --workspace=apps/server & - env: - PORT: 3008 - NODE_ENV: test - # Use a deterministic API key so Playwright can log in reliably - AUTOMAKER_API_KEY: test-api-key-for-e2e-tests - # Reduce log noise in CI - AUTOMAKER_HIDE_API_KEY: 'true' - # Avoid real API calls during CI - AUTOMAKER_MOCK_AGENT: 'true' - # Simulate containerized environment to skip sandbox confirmation dialogs - IS_CONTAINERIZED: 'true' - - - name: Wait for backend server - run: | - echo "Waiting for backend server to be ready..." - for i in {1..30}; do - if curl -s http://localhost:3008/api/health > /dev/null 2>&1; then - echo "Backend server is ready!" - exit 0 - fi - echo "Waiting... ($i/30)" - sleep 1 - done - echo "Backend server failed to start!" - exit 1 - - - name: Run E2E tests - # Playwright automatically starts the Vite frontend via webServer config - # (see apps/ui/playwright.config.ts) - no need to start it manually - run: npm run test --workspace=apps/ui - env: - CI: true - VITE_SERVER_URL: http://localhost:3008 - VITE_SKIP_SETUP: 'true' - # Keep UI-side login/defaults consistent - AUTOMAKER_API_KEY: test-api-key-for-e2e-tests - - - name: Upload Playwright report - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: apps/ui/playwright-report/ - retention-days: 7 - - - name: Upload test results (screenshots, traces, videos) - uses: actions/upload-artifact@v4 - if: always() - with: - name: test-results - path: | - apps/ui/test-results/ - retention-days: 7 - if-no-files-found: ignore +- name: Wait for backend server + run: | + echo "Waiting for backend server to be ready..." + for i in {1..60}; do + if curl -s -f http://localhost:3008/api/health > /dev/null 2>&1; then + echo "Backend server is ready!" + curl -s http://localhost:3008/api/health | jq . 2>/dev/null || echo "Health check response: $(curl -s http://localhost:3008/api/health 2>/dev/null || echo 'No response')" + exit 0 + fi + echo "Waiting... ($i/60)" + sleep 1 + done + echo "Backend server failed to start!" + echo "Checking server status..." + ps aux | grep -E "(node|tsx)" | grep -v grep || echo "No node processes found" + netstat -tlnp 2>/dev/null | grep :3008 || echo "Port 3008 not listening" + echo "Testing health endpoint..." + curl -v http://localhost:3008/api/health 2>&1 || echo "Health endpoint failed" + exit 1 diff --git a/apps/ui/tests/projects/open-existing-project.spec.ts b/apps/ui/tests/projects/open-existing-project.spec.ts index 42473497..8135538e 100644 --- a/apps/ui/tests/projects/open-existing-project.spec.ts +++ b/apps/ui/tests/projects/open-existing-project.spec.ts @@ -104,7 +104,11 @@ test.describe('Open Project', () => { json.settings.projects = [testProject, ...existingProjects]; } } - await route.fulfill({ response, json }); + await route.fulfill({ + status: response.status(), + headers: response.headers(), + json, + }); }); // Now navigate to the app