name: check-e2e on: push: branches: - master pull_request: branches: - master jobs: check-e2e: permissions: contents: "read" id-token: "write" continue-on-error: true strategy: matrix: browser: [chromium, firefox, visual, heartwood] timeout-minutes: 30 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Evict playwright snapshot cache when pushing to master run: | if [ ${{ matrix.browser }} = "visual" ] && [ ${{ github.ref }} = "refs/heads/master" ]; then echo "Deleting ${{ runner.os }}-snapshots cache" gh extension install actions/gh-actions-cache gh actions-cache delete ${{ runner.os }}-snapshots --confirm || true echo "Done" fi env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: actions/setup-node@v3 with: node-version: "18.12.1" - name: Install dependencies run: npm ci - name: Cache Playwright browsers uses: actions/cache@v3 id: playwright-dep-cache with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ hashFiles('package-lock.json') }} - name: Cache Playwright visual snapshots uses: actions/cache@v3 id: playwright-snapshot-cache with: path: tests/visual/snapshots/**/* key: ${{ runner.os }}-snapshots - name: Install Playwright browsers if: steps.playwright-dep-cache.outputs.cache-hit != 'true' run: npx playwright install chromium firefox - id: auth uses: google-github-actions/auth@v1 with: workload_identity_provider: "projects/281042598092/locations/global/workloadIdentityPools/github-actions/providers/google-cloud" service_account: "github-actions@radicle-services.iam.gserviceaccount.com" - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@v1 - name: Start http-api test server run: | if [ ${{ matrix.browser }} = "heartwood" ]; then mkdir -p tests/artifacts ./scripts/run-httpd-with-fixtures --non-interactive --binary 2>&1 | tee tests/artifacts/httpd-${{ matrix.browser }}.log & else ./scripts/run-http-api-with-fixtures --non-interactive --detach fi - name: Run Playwright tests run: | if [ ${{ matrix.browser }} = "visual" ] && [ ${{ github.ref }} = "refs/heads/master" ]; then npm run test:e2e -- --project ${{ matrix.browser }} --update-snapshots; elif [ ${{ matrix.browser }} = "heartwood" ]; then HEARTWOOD=true npm run test:e2e -- --project chromium; else npm run test:e2e -- --project ${{ matrix.browser }}; fi # If a build succeeds, clear any artifacts from failed retries, so they # don't end up in the visual diff archive. - name: Cleanup artifacts if: success() run: | rm -rf tests/artifacts/* # We don't care about logs in visual snapshot tests, only the images. - name: Cleanup artifacts if: always() run: | if [ ${{ matrix.browser }} = "visual" ]; then shopt -s globstar; rm -rf tests/artifacts/**/*.log; fi - name: Upload artifacts uses: actions/upload-artifact@v3 if: always() with: name: test-artifacts-${{ runner.os }} retention-days: 30 if-no-files-found: "ignore" path: | tests/artifacts/**/*