DONOTMERGE feat: add retry logic for session cookie creation with token refresh #1111
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: "CI: Tests E2E" | |
| description: "End-to-end testing with Playwright across multiple browsers, deploys test reports to Cloudflare Pages" | |
| on: | |
| push: | |
| branches: [main, master, core/*, desktop/*] | |
| pull_request: | |
| branches-ignore: | |
| [wip/*, draft/*, temp/*, vue-nodes-migration, sno-playwright-*] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| setup: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| cache-key: ${{ steps.cache-key.outputs.key }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| # Setup Test Environment, build frontend but do not start server yet | |
| - name: Setup ComfyUI server | |
| uses: ./.github/actions/setup-comfyui-server | |
| - name: Setup frontend | |
| uses: ./.github/actions/setup-frontend | |
| with: | |
| include_build_step: true | |
| - name: Setup Playwright | |
| uses: ./.github/actions/setup-playwright # Setup Playwright and cache browsers | |
| # Save the entire workspace as cache for later test jobs to restore | |
| - name: Generate cache key | |
| id: cache-key | |
| run: echo "key=$(date +%s)" >> $GITHUB_OUTPUT | |
| - name: Save cache | |
| uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 | |
| with: | |
| path: . | |
| key: comfyui-setup-${{ steps.cache-key.outputs.key }} | |
| # Sharded chromium tests | |
| playwright-tests-chromium-sharded: | |
| needs: setup | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shardIndex: [1, 2, 3, 4, 5, 6, 7, 8] | |
| shardTotal: [8] | |
| steps: | |
| # download built frontend repo from setup job | |
| - name: Wait for cache propagation | |
| run: sleep 10 | |
| - name: Restore cached setup | |
| uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 | |
| with: | |
| fail-on-cache-miss: true | |
| path: . | |
| key: comfyui-setup-${{ needs.setup.outputs.cache-key }} | |
| # Setup Test Environment for this runner, start server, use cached built frontend ./dist from 'setup' job | |
| - name: Setup ComfyUI server | |
| uses: ./.github/actions/setup-comfyui-server | |
| with: | |
| launch_server: true | |
| - name: Setup nodejs, pnpm, reuse built frontend | |
| uses: ./.github/actions/setup-frontend | |
| - name: Setup Playwright | |
| uses: ./.github/actions/setup-playwright | |
| # Run sharded tests and upload sharded reports | |
| - name: Run Playwright tests (Shard ${{ matrix.shardIndex }}/${{ matrix.shardTotal }}) | |
| id: playwright | |
| run: pnpm exec playwright test --project=chromium --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --reporter=blob | |
| env: | |
| PLAYWRIGHT_BLOB_OUTPUT_DIR: ./blob-report | |
| - name: Upload blob report | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: blob-report-chromium-${{ matrix.shardIndex }} | |
| path: blob-report/ | |
| retention-days: 1 | |
| playwright-tests: | |
| # Ideally, each shard runs test in 6 minutes, but allow up to 15 minutes | |
| timeout-minutes: 15 | |
| needs: setup | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| browser: [chromium-2x, chromium-0.5x, mobile-chrome] | |
| steps: | |
| # download built frontend repo from setup job | |
| - name: Wait for cache propagation | |
| run: sleep 10 | |
| - name: Restore cached setup | |
| uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 | |
| with: | |
| fail-on-cache-miss: true | |
| path: . | |
| key: comfyui-setup-${{ needs.setup.outputs.cache-key }} | |
| # Setup Test Environment for this runner, start server, use cached built frontend ./dist from 'setup' job | |
| - name: Setup ComfyUI server | |
| uses: ./.github/actions/setup-comfyui-server | |
| with: | |
| launch_server: true | |
| - name: Setup nodejs, pnpm, reuse built frontend | |
| uses: ./.github/actions/setup-frontend | |
| - name: Setup Playwright | |
| uses: ./.github/actions/setup-playwright | |
| # Run tests and upload reports | |
| - name: Run Playwright tests (${{ matrix.browser }}) | |
| id: playwright | |
| run: | | |
| # Run tests with both HTML and JSON reporters | |
| PLAYWRIGHT_JSON_OUTPUT_NAME=playwright-report/report.json \ | |
| pnpm exec playwright test --project=${{ matrix.browser }} \ | |
| --reporter=list \ | |
| --reporter=html \ | |
| --reporter=json | |
| - name: Upload Playwright report | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: playwright-report-${{ matrix.browser }} | |
| path: ./playwright-report/ | |
| retention-days: 30 | |
| # Merge sharded test reports | |
| merge-reports: | |
| needs: [playwright-tests-chromium-sharded] | |
| runs-on: ubuntu-latest | |
| if: ${{ !cancelled() }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| # Setup Test Environment, we only need playwright to merge reports | |
| - name: Setup frontend | |
| uses: ./.github/actions/setup-frontend | |
| - name: Setup Playwright | |
| uses: ./.github/actions/setup-playwright | |
| - name: Download blob reports | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ./all-blob-reports | |
| pattern: blob-report-chromium-* | |
| merge-multiple: true | |
| - name: Merge into HTML Report | |
| run: | | |
| # Generate HTML report | |
| pnpm exec playwright merge-reports --reporter=html ./all-blob-reports | |
| # Generate JSON report separately with explicit output path | |
| PLAYWRIGHT_JSON_OUTPUT_NAME=playwright-report/report.json \ | |
| pnpm exec playwright merge-reports --reporter=json ./all-blob-reports | |
| - name: Upload HTML report | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playwright-report-chromium | |
| path: ./playwright-report/ | |
| retention-days: 30 | |
| #### BEGIN Deployment and commenting (non-forked PRs only) | |
| # when using pull_request event, we have permission to comment directly | |
| # if its a forked repo, we need to use workflow_run event in a separate workflow (pr-playwright-deploy.yaml) | |
| # Post starting comment for non-forked PRs | |
| comment-on-pr-start: | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| - name: Get start time | |
| id: start-time | |
| run: echo "time=$(date -u '+%m/%d/%Y, %I:%M:%S %p')" >> $GITHUB_OUTPUT | |
| - name: Post starting comment | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| run: | | |
| chmod +x scripts/cicd/pr-playwright-deploy-and-comment.sh | |
| ./scripts/cicd/pr-playwright-deploy-and-comment.sh \ | |
| "${{ github.event.pull_request.number }}" \ | |
| "${{ github.head_ref }}" \ | |
| "starting" \ | |
| "${{ steps.start-time.outputs.time }}" | |
| # Deploy and comment for non-forked PRs only | |
| deploy-and-comment: | |
| needs: [playwright-tests, merge-reports] | |
| runs-on: ubuntu-latest | |
| if: always() && github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false | |
| permissions: | |
| pull-requests: write | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| - name: Download all playwright reports | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: playwright-report-* | |
| path: reports | |
| - name: Deploy reports and comment on PR | |
| env: | |
| CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| GITHUB_TOKEN: ${{ github.token }} | |
| run: | | |
| bash ./scripts/cicd/pr-playwright-deploy-and-comment.sh \ | |
| "${{ github.event.pull_request.number }}" \ | |
| "${{ github.head_ref }}" \ | |
| "completed" | |
| #### END Deployment and commenting (non-forked PRs only) |