E2E Tests #146
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: E2E Tests | |
| on: | |
| # Runs on PRs so we can gate merges on E2E results | |
| pull_request: | |
| branches: ["main", "master"] | |
| # Runs after unit tests complete successfully on push | |
| workflow_run: | |
| workflows: ["Run Tests"] | |
| types: | |
| - completed | |
| branches: ["main", "master"] | |
| jobs: | |
| e2e-tests: | |
| runs-on: ubuntu-latest | |
| if: ${{ github.event_name == 'pull_request' || github.event.workflow_run.conclusion == 'success' }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: '22.x' | |
| cache: 'npm' | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.11' | |
| cache: 'pip' | |
| cache-dependency-path: 'e2e-tests/requirements.txt' | |
| - name: Install Node dependencies | |
| run: npm ci | |
| - name: Install Python dependencies | |
| run: | | |
| cd e2e-tests | |
| pip install -r requirements.txt | |
| - name: Build FossFLOW library | |
| run: npm run build:lib | |
| - name: Build FossFLOW app | |
| run: npm run build:app | |
| - name: Install serve globally | |
| run: npm install -g serve | |
| - name: Start Selenium Chrome in background | |
| run: | | |
| docker run -d \ | |
| --name selenium-chrome \ | |
| --network host \ | |
| --shm-size=2g \ | |
| selenium/standalone-chrome:latest | |
| echo "Waiting for Selenium to be ready..." | |
| timeout 60 bash -c 'until curl -sf http://localhost:4444/status; do sleep 2; done' || { | |
| echo "Selenium failed to start" | |
| docker logs selenium-chrome | |
| exit 1 | |
| } | |
| echo "Selenium is ready" | |
| curl -s http://localhost:4444/status | jq '.' || true | |
| - name: Start FossFLOW server in background | |
| run: | | |
| cd packages/fossflow-app/build | |
| nohup serve -s . -l 3000 > /tmp/server.log 2>&1 & | |
| echo $! > /tmp/server.pid | |
| echo "Server PID: $(cat /tmp/server.pid)" | |
| echo "Waiting for server to start..." | |
| timeout 60 bash -c 'until curl -sf http://localhost:3000; do sleep 2; done' || { | |
| echo "Server failed to start" | |
| echo "Server logs:" | |
| cat /tmp/server.log | |
| kill $(cat /tmp/server.pid) 2>/dev/null || true | |
| exit 1 | |
| } | |
| echo "Server is ready" | |
| echo "Server PID saved to /tmp/server.pid" | |
| env: | |
| CI: true | |
| - name: Verify connectivity before tests | |
| run: | | |
| echo "Testing app connectivity..." | |
| curl -sf http://localhost:3000 || echo "App not accessible" | |
| echo "Testing Selenium connectivity..." | |
| curl -sf http://localhost:4444/status || echo "Selenium not accessible" | |
| - name: Run E2E tests | |
| run: | | |
| cd e2e-tests | |
| pytest -v --tb=short | |
| env: | |
| FOSSFLOW_TEST_URL: http://localhost:3000 | |
| WEBDRIVER_URL: http://localhost:4444 | |
| - name: Stop Selenium and FossFLOW server | |
| if: always() | |
| run: | | |
| echo "Stopping Selenium container..." | |
| docker stop selenium-chrome 2>/dev/null || true | |
| docker rm selenium-chrome 2>/dev/null || true | |
| if [ -f /tmp/server.pid ]; then | |
| echo "Stopping server (PID: $(cat /tmp/server.pid))" | |
| kill $(cat /tmp/server.pid) 2>/dev/null || true | |
| echo "Server logs:" | |
| cat /tmp/server.log || true | |
| fi | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: e2e-test-results | |
| path: e2e-tests/target/ | |
| if-no-files-found: ignore | |
| retention-days: 7 |