Update E2E tests to match UI changes (#460) #256
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: Run E2E Tests | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - "builder-frontend/**" | |
| - "builder-api/**" | |
| - "library-api/**" | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - "builder-frontend/**" | |
| - "builder-api/**" | |
| - "library-api/**" | |
| env: | |
| PROJECT_ID: "benefit-decision-toolkit-play" | |
| WORKLOAD_IDENTITY_PROVIDER: "projects/1034049717668/locations/global/workloadIdentityPools/github-actions-google-cloud/providers/github" | |
| jobs: | |
| run-e2e-tests: | |
| runs-on: "ubuntu-latest" | |
| # Add these permissions for Workload Identity Federation | |
| permissions: | |
| contents: read | |
| id-token: write | |
| steps: | |
| # Bootstrapping # | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: lts/* | |
| - name: Load ENV files from examples | |
| run: | | |
| mv builder-frontend/.env.example builder-frontend/.env | |
| mv builder-api/.env.example builder-api/.env | |
| mv library-api/.env.example library-api/.env | |
| mv .env.example .env | |
| # 1) Devbox Setup # | |
| - name: Setup devbox | |
| uses: ./.github/actions/devbox-setup | |
| # 2) Prepare app dependencies # | |
| - name: "Cache Maven dependencies" | |
| # Cache Maven dependencies to speed up builds | |
| uses: "actions/cache@v4" | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('builder-api/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven-${{ hashFiles('builder-api/pom.xml') }} | |
| - id: "auth" # Configure Workload Identity Federation and generate an access token | |
| name: "Authenticate to Google Cloud" | |
| uses: "google-github-actions/auth@v2" | |
| with: | |
| workload_identity_provider: "${{ env.WORKLOAD_IDENTITY_PROVIDER }}" | |
| service_account: cicd-build-deploy-api@benefit-decision-toolkit-play.iam.gserviceaccount.com | |
| project_id: ${{ env.PROJECT_ID }} | |
| - name: Cache node modules | |
| uses: actions/cache@v4 | |
| with: | |
| path: builder-frontend/node_modules | |
| key: ${{ runner.os }}-node-${{ hashFiles('builder-frontend/package-lock.json') }} | |
| restore-keys: | | |
| ${{ runner.os }}-node- | |
| - name: Install frontend dependencies | |
| working-directory: builder-frontend | |
| run: devbox run install-builder-frontend-ci | |
| - name: Load E2E emulator data | |
| run: | | |
| rm -rf emulator-data | |
| cp -r e2e/e2e-emulator-data emulator-data | |
| - name: Install Playwright dependencies | |
| run: npm ci | |
| working-directory: e2e | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/package-lock.json') }} | |
| - name: Install Playwright Browsers | |
| timeout-minutes: 20 | |
| working-directory: e2e | |
| run: DEBUG=pw:install npx --no-install playwright install --with-deps chromium | |
| # 3) Run App + E2E Test # | |
| - name: Run all Devbox services | |
| run: devbox services up -b | |
| - name: Show service logs | |
| if: always() | |
| run: | | |
| sleep 5 | |
| ls -la logs || true | |
| tail -n 80 logs/firebase-emulators.log || true | |
| tail -n 80 logs/library-api.log || true | |
| tail -n 80 logs/sync-library-metadata.log || true | |
| tail -n 80 logs/builder-api.log || true | |
| tail -n 80 logs/builder-frontend.log || true | |
| - name: Wait for App to be available | |
| run: | | |
| timeout 90 bash -c ' | |
| until curl --fail --silent --show-error http://127.0.0.1:5173/ > /dev/null; do | |
| echo "Waiting for frontend..." | |
| sleep 1 | |
| done | |
| ' | |
| # - name: Wait for App to be available | |
| # uses: nev7n/wait_for_response@v1 | |
| # with: | |
| # url: "http://127.0.0.1:5173/" | |
| # responseCode: 200 | |
| # timeout: 90000 | |
| # interval: 1000 | |
| - name: Run Playwright tests | |
| run: npx playwright test | |
| working-directory: e2e | |
| - uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: playwright-report | |
| path: e2e/playwright-report/ | |
| retention-days: 30 | |
| - name: Upload process logs on failure | |
| uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: process-logs | |
| path: logs/ | |
| retention-days: 30 | |
| # 4) Cleanup # | |
| - name: Stop all Devbox services | |
| run: devbox services stop |