name: Playwright on: workflow_dispatch: inputs: sandbox_provider: description: Sandbox provider required: true type: choice options: - fake - e2b - daytona - box default: fake workflow_call: inputs: sandbox_provider: description: Sandbox provider required: false type: string default: fake publish_report: description: Publish this run to the persistent visual dashboard required: false type: boolean default: false upload_artifacts: description: Retain the report and diagnostics as GitHub artifacts required: false type: boolean default: false secrets: S3_ACCESS_KEY_ID: description: Access key used to publish visual reports required: false S3_SECRET_ACCESS_KEY: description: Secret key used to publish visual reports required: false E2B_API_KEY: description: E2B API key used only when the E2B sandbox is selected required: false DAYTONA_API_KEY: description: Daytona API key used only when the Daytona sandbox is selected required: false BOX_API_KEY: description: Box API key used only when the Box sandbox is selected required: false permissions: contents: read jobs: playwright: name: Web E2E runs-on: ubuntu-latest timeout-minutes: 20 concurrency: group: ${{ inputs.publish_report && 'playwright-publication' || format('playwright-{0}', github.run_id) }} cancel-in-progress: false steps: - uses: actions/checkout@v5 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile - uses: actions/cache@v4 with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} - name: Install Chromium timeout-minutes: 5 # Skip --with-deps: GitHub ubuntu-latest already has Chromium's OS libraries, # and apt-get against azure.archive.ubuntu.com can stall until the job timeout. run: pnpm --filter @rakazo/web exec playwright install chromium - name: Validate E2B credentials if: inputs.sandbox_provider == 'e2b' env: E2B_API_KEY: ${{ secrets.E2B_API_KEY }} run: test -n "$E2B_API_KEY" - name: Validate Daytona credentials if: inputs.sandbox_provider == 'daytona' env: DAYTONA_API_KEY: ${{ secrets.DAYTONA_API_KEY }} run: test -n "$DAYTONA_API_KEY" - name: Validate Box credentials if: inputs.sandbox_provider == 'box' env: BOX_API_KEY: ${{ secrets.BOX_API_KEY }} run: test -n "$BOX_API_KEY" - name: Run Playwright tests id: playwright_tests env: SANDBOX_TEST_PROVIDER: ${{ inputs.sandbox_provider }} E2B_API_KEY: ${{ inputs.sandbox_provider == 'e2b' && secrets.E2B_API_KEY || '' }} DAYTONA_API_KEY: ${{ inputs.sandbox_provider == 'daytona' && secrets.DAYTONA_API_KEY || '' }} BOX_API_KEY: ${{ inputs.sandbox_provider == 'box' && secrets.BOX_API_KEY || '' }} run: pnpm test:e2e -- --sandbox="$SANDBOX_TEST_PROVIDER" - name: Record Playwright result if: always() && inputs.upload_artifacts env: PLAYWRIGHT_RESULT: ${{ steps.playwright_tests.outcome }} run: | mkdir -p test-report/e2e printf '%s\n' "$PLAYWRIGHT_RESULT" > test-report/e2e/outcome.txt - name: Upload Playwright artifacts if: always() && inputs.upload_artifacts uses: actions/upload-artifact@v4 with: name: playwright-artifacts-${{ github.run_id }}-${{ github.run_attempt }} path: | playwright-report apps/web/test-results test-report/e2e retention-days: 7 if-no-files-found: warn - name: Publish Playwright visual report if: always() && inputs.publish_report env: AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: ${{ vars.S3_REGION }} AWS_EC2_METADATA_DISABLED: "true" S3_BUCKET: ${{ vars.S3_BUCKET }} S3_ENDPOINT: ${{ vars.S3_ENDPOINT }} PLAYWRIGHT_PUBLIC_BASE_URL: ${{ vars.PLAYWRIGHT_PUBLIC_BASE_URL }} PLAYWRIGHT_RESULT: ${{ steps.playwright_tests.outcome }} PLAYWRIGHT_RUN_ATTEMPT: ${{ github.run_attempt }} PLAYWRIGHT_RUN_ID: ${{ github.run_id }} PLAYWRIGHT_RUN_NUMBER: ${{ github.run_number }} PLAYWRIGHT_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} PLAYWRIGHT_SHA: ${{ github.sha }} PLAYWRIGHT_EVENT: ${{ github.event_name }} PLAYWRIGHT_BRANCH: ${{ github.ref_name }} run: bash scripts/publish-playwright-report.sh