diff --git a/.github/workflows/chromatic.yaml b/.github/workflows/chromatic.yaml
index ed2314e80..127186d68 100644
--- a/.github/workflows/chromatic.yaml
+++ b/.github/workflows/chromatic.yaml
@@ -12,9 +12,6 @@ jobs:
runs-on: ubuntu-latest
# Only run for PRs from version-bump-* branches or manual triggers
if: github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'version-bump-')
- permissions:
- pull-requests: write
- issues: write
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -32,29 +29,6 @@ jobs:
node-version: '20'
cache: 'pnpm'
- - name: Get current time
- id: current-time
- run: echo "time=$(date -u '+%m/%d/%Y, %I:%M:%S %p')" >> $GITHUB_OUTPUT
-
- - name: Comment PR - Build Started
- if: github.event_name == 'pull_request'
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: append
- body: |
-
- ## ๐จ Storybook Build Status
-
- ๐ **Building Storybook and running visual tests...**
-
- โณ Build started at: ${{ steps.current-time.outputs.time }} UTC
-
- ---
- *This comment will be updated when the build completes*
- name: Cache tool outputs
uses: actions/cache@v4
@@ -81,37 +55,3 @@ jobs:
autoAcceptChanges: 'main' # Auto-accept changes on main branch
exitOnceUploaded: true # Don't wait for UI tests to complete
- - name: Get completion time
- id: completion-time
- if: always()
- run: echo "time=$(date -u '+%m/%d/%Y, %I:%M:%S %p')" >> $GITHUB_OUTPUT
-
- - name: Comment PR - Build Complete
- if: github.event_name == 'pull_request' && always()
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: replace
- body: |
-
- ## ๐จ Storybook Build Status
-
- ${{ steps.chromatic.outcome == 'success' && 'โ
' || 'โ' }} **${{ steps.chromatic.outcome == 'success' && 'Build completed successfully!' || 'Build failed!' }}**
-
- โฐ Completed at: ${{ steps.completion-time.outputs.time }} UTC
-
- ### ๐ Build Summary
- - **Components**: ${{ steps.chromatic.outputs.componentCount || '0' }}
- - **Stories**: ${{ steps.chromatic.outputs.testCount || '0' }}
- - **Visual changes**: ${{ steps.chromatic.outputs.changeCount || '0' }}
- - **Errors**: ${{ steps.chromatic.outputs.errorCount || '0' }}
-
- ### ๐ Links
- ${{ steps.chromatic.outputs.buildUrl && format('- [๐ธ View Chromatic Build]({0})', steps.chromatic.outputs.buildUrl) || '' }}
- ${{ steps.chromatic.outputs.storybookUrl && format('- [๐ Preview Storybook]({0})', steps.chromatic.outputs.storybookUrl) || '' }}
-
- ---
- ${{ steps.chromatic.outcome == 'success' && '๐ Your Storybook is ready for review!' || 'โ ๏ธ Please check the workflow logs for error details.' }}
diff --git a/.github/workflows/pr-playwright-comment.yaml b/.github/workflows/pr-playwright-comment.yaml
new file mode 100644
index 000000000..d5cf93589
--- /dev/null
+++ b/.github/workflows/pr-playwright-comment.yaml
@@ -0,0 +1,163 @@
+name: PR Playwright Comment
+
+on:
+ workflow_run:
+ workflows: ['Tests CI']
+ types: [requested, completed]
+
+env:
+ DATE_FORMAT: '+%m/%d/%Y, %I:%M:%S %p'
+
+jobs:
+ comment-summary:
+ runs-on: ubuntu-latest
+ if: github.repository == 'Comfy-Org/ComfyUI_frontend' && github.event.workflow_run.event == 'pull_request'
+ permissions:
+ pull-requests: write
+ actions: read
+ steps:
+ - name: Get PR number
+ id: pr
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const { data: pullRequests } = await github.rest.pulls.list({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ state: 'open',
+ head: `${context.repo.owner}:${context.payload.workflow_run.head_branch}`,
+ });
+
+ if (pullRequests.length === 0) {
+ console.log('No open PR found for this branch');
+ return null;
+ }
+
+ return pullRequests[0].number;
+
+ - name: Log when no PR found
+ if: steps.pr.outputs.result == 'null'
+ run: |
+ echo "โ ๏ธ No open PR found for branch: ${{ github.event.workflow_run.head_branch }}"
+ echo "Workflow run ID: ${{ github.event.workflow_run.id }}"
+ echo "Repository: ${{ github.event.workflow_run.repository.full_name }}"
+ echo "Event: ${{ github.event.workflow_run.event }}"
+
+ - name: Generate comment body for start
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'requested'
+ id: comment-body-start
+ run: |
+ echo "" > comment.md
+ echo "## ๐ญ Playwright Test Results" >> comment.md
+ echo "" >> comment.md
+ echo "โณ **Tests are starting...** " >> comment.md
+ echo "" >> comment.md
+ echo "โฐ Started at: ${{ steps.completion-time.outputs.time }} UTC" >> comment.md
+ echo "" >> comment.md
+ echo "### ๐ Running Tests" >> comment.md
+ echo "- ๐งช **chromium**: Running tests..." >> comment.md
+ echo "- ๐งช **chromium-0.5x**: Running tests..." >> comment.md
+ echo "- ๐งช **chromium-2x**: Running tests..." >> comment.md
+ echo "- ๐งช **mobile-chrome**: Running tests..." >> comment.md
+ echo "" >> comment.md
+ echo "---" >> comment.md
+ echo "โฑ๏ธ Please wait while tests are running across all browsers..." >> comment.md
+
+ - name: Download all deployment info
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'completed'
+ uses: actions/download-artifact@v4
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ run-id: ${{ github.event.workflow_run.id }}
+ pattern: deployment-info-*
+ merge-multiple: true
+ path: deployment-info
+
+ - name: Get completion time
+ id: completion-time
+ run: echo "time=$(date -u '${{ env.DATE_FORMAT }}')" >> $GITHUB_OUTPUT
+
+ - name: Generate comment body for completion
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'completed'
+ id: comment-body-completed
+ run: |
+ echo "" > comment.md
+ echo "## ๐ญ Playwright Test Results" >> comment.md
+ echo "" >> comment.md
+
+ # Check if all tests passed
+ ALL_PASSED=true
+ for file in deployment-info/*.txt; do
+ if [ -f "$file" ]; then
+ browser=$(basename "$file" .txt)
+ info=$(cat "$file")
+ exit_code=$(echo "$info" | cut -d'|' -f2)
+ if [ "$exit_code" != "0" ]; then
+ ALL_PASSED=false
+ break
+ fi
+ fi
+ done
+
+ if [ "$ALL_PASSED" = "true" ]; then
+ echo "โ
**All tests passed across all browsers!**" >> comment.md
+ else
+ echo "โ **Some tests failed!**" >> comment.md
+ fi
+
+ echo "" >> comment.md
+ echo "โฐ Completed at: ${{ steps.completion-time.outputs.time }} UTC" >> comment.md
+ echo "" >> comment.md
+ echo "### ๐ Test Reports by Browser" >> comment.md
+
+ for file in deployment-info/*.txt; do
+ if [ -f "$file" ]; then
+ browser=$(basename "$file" .txt)
+ info=$(cat "$file")
+ exit_code=$(echo "$info" | cut -d'|' -f2)
+ url=$(echo "$info" | cut -d'|' -f3)
+
+ # Validate URLs before using them in comments
+ sanitized_url=$(echo "$url" | grep -E '^https://[a-z0-9.-]+\.pages\.dev(/.*)?$' || echo "INVALID_URL")
+ if [ "$sanitized_url" = "INVALID_URL" ]; then
+ echo "Invalid deployment URL detected: $url"
+ url="#" # Use safe fallback
+ fi
+
+ if [ "$exit_code" = "0" ]; then
+ status="โ
"
+ else
+ status="โ"
+ fi
+
+ echo "- $status **$browser**: [View Report]($url)" >> comment.md
+ fi
+ done
+
+ echo "" >> comment.md
+ echo "---" >> comment.md
+ if [ "$ALL_PASSED" = "true" ]; then
+ echo "๐ Your tests are passing across all browsers!" >> comment.md
+ else
+ echo "โ ๏ธ Please check the test reports for details on failures." >> comment.md
+ fi
+
+ - name: Comment PR - Tests Started
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'requested'
+ uses: edumserrano/find-create-or-update-comment@82880b65c8a3a6e4c70aa05a204995b6c9696f53 # v3.0.0
+ with:
+ issue-number: ${{ steps.pr.outputs.result }}
+ body-includes: ''
+ comment-author: 'github-actions[bot]'
+ edit-mode: replace
+ body-path: comment.md
+
+ - name: Comment PR - Tests Complete
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'completed'
+ uses: edumserrano/find-create-or-update-comment@82880b65c8a3a6e4c70aa05a204995b6c9696f53 # v3.0.0
+ with:
+ issue-number: ${{ steps.pr.outputs.result }}
+ body-includes: ''
+ comment-author: 'github-actions[bot]'
+ edit-mode: replace
+ body-path: comment.md
diff --git a/.github/workflows/pr-playwright-deploy.yaml b/.github/workflows/pr-playwright-deploy.yaml
new file mode 100644
index 000000000..53db00ff3
--- /dev/null
+++ b/.github/workflows/pr-playwright-deploy.yaml
@@ -0,0 +1,101 @@
+name: PR Playwright Deploy
+
+on:
+ workflow_run:
+ workflows: ["Tests CI"]
+ types: [completed]
+
+jobs:
+ deploy-reports:
+ runs-on: ubuntu-latest
+ if: github.repository == 'Comfy-Org/ComfyUI_frontend' && github.event.workflow_run.event == 'pull_request'
+ permissions:
+ actions: read
+ strategy:
+ fail-fast: false
+ matrix:
+ browser: [chromium, chromium-2x, chromium-0.5x, mobile-chrome]
+ steps:
+ - name: Get PR info
+ id: pr-info
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const { data: pullRequests } = await github.rest.pulls.list({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ state: 'open',
+ head: `${context.repo.owner}:${context.payload.workflow_run.head_branch}`,
+ });
+
+ if (pullRequests.length === 0) {
+ console.log('No open PR found for this branch');
+ return { number: null, sanitized_branch: null };
+ }
+
+ const pr = pullRequests[0];
+ const branchName = context.payload.workflow_run.head_branch;
+ const sanitizedBranch = branchName.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/^-|-$/g, '');
+
+ return {
+ number: pr.number,
+ sanitized_branch: sanitizedBranch
+ };
+
+ - name: Set project name
+ if: fromJSON(steps.pr-info.outputs.result).number != null
+ id: project-name
+ run: |
+ if [ "${{ matrix.browser }}" = "chromium-0.5x" ]; then
+ echo "name=comfyui-playwright-chromium-0-5x" >> $GITHUB_OUTPUT
+ else
+ echo "name=comfyui-playwright-${{ matrix.browser }}" >> $GITHUB_OUTPUT
+ fi
+ echo "branch=${{ fromJSON(steps.pr-info.outputs.result).sanitized_branch }}" >> $GITHUB_OUTPUT
+
+ - name: Download playwright report
+ if: fromJSON(steps.pr-info.outputs.result).number != null
+ uses: actions/download-artifact@v4
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ run-id: ${{ github.event.workflow_run.id }}
+ name: playwright-report-${{ matrix.browser }}
+ path: playwright-report
+
+ - name: Install Wrangler
+ if: fromJSON(steps.pr-info.outputs.result).number != null
+ run: npm install -g wrangler
+
+ - name: Deploy to Cloudflare Pages (${{ matrix.browser }})
+ if: fromJSON(steps.pr-info.outputs.result).number != null
+ id: cloudflare-deploy
+ continue-on-error: true
+ run: |
+ # Retry logic for wrangler deploy (3 attempts)
+ RETRY_COUNT=0
+ MAX_RETRIES=3
+ SUCCESS=false
+
+ while [ $RETRY_COUNT -lt $MAX_RETRIES ] && [ $SUCCESS = false ]; do
+ RETRY_COUNT=$((RETRY_COUNT + 1))
+ echo "Deployment attempt $RETRY_COUNT of $MAX_RETRIES..."
+
+ if npx wrangler pages deploy playwright-report --project-name=${{ steps.project-name.outputs.name }} --branch=${{ steps.project-name.outputs.branch }}; then
+ SUCCESS=true
+ echo "Deployment successful on attempt $RETRY_COUNT"
+ else
+ echo "Deployment failed on attempt $RETRY_COUNT"
+ if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
+ echo "Retrying in 10 seconds..."
+ sleep 10
+ fi
+ fi
+ done
+
+ if [ $SUCCESS = false ]; then
+ echo "All deployment attempts failed"
+ exit 1
+ fi
+ env:
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
\ No newline at end of file
diff --git a/.github/workflows/pr-storybook-comment.yaml b/.github/workflows/pr-storybook-comment.yaml
new file mode 100644
index 000000000..e8ce291d7
--- /dev/null
+++ b/.github/workflows/pr-storybook-comment.yaml
@@ -0,0 +1,108 @@
+name: PR Storybook Comment
+
+on:
+ workflow_run:
+ workflows: ['Chromatic']
+ types: [requested, completed]
+
+jobs:
+ comment-storybook:
+ runs-on: ubuntu-latest
+ if: github.repository == 'Comfy-Org/ComfyUI_frontend' && github.event.workflow_run.event == 'pull_request'
+ permissions:
+ pull-requests: write
+ actions: read
+ steps:
+ - name: Get PR number
+ id: pr
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const { data: pullRequests } = await github.rest.pulls.list({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ state: 'open',
+ head: `${context.repo.owner}:${context.payload.workflow_run.head_branch}`,
+ });
+
+ if (pullRequests.length === 0) {
+ console.log('No open PR found for this branch');
+ return null;
+ }
+
+ return pullRequests[0].number;
+
+ - name: Log when no PR found
+ if: steps.pr.outputs.result == 'null'
+ run: |
+ echo "โ ๏ธ No open PR found for branch: ${{ github.event.workflow_run.head_branch }}"
+ echo "Workflow run ID: ${{ github.event.workflow_run.id }}"
+ echo "Repository: ${{ github.event.workflow_run.repository.full_name }}"
+ echo "Event: ${{ github.event.workflow_run.event }}"
+
+ - name: Get workflow run details
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'completed'
+ id: workflow-run
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const run = await github.rest.actions.getWorkflowRun({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.payload.workflow_run.id,
+ });
+
+ return {
+ conclusion: run.data.conclusion,
+ html_url: run.data.html_url
+ };
+
+ - name: Get completion time
+ id: completion-time
+ run: echo "time=$(date -u '+%m/%d/%Y, %I:%M:%S %p')" >> $GITHUB_OUTPUT
+
+ - name: Comment PR - Storybook Started
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'requested'
+ uses: edumserrano/find-create-or-update-comment@82880b65c8a3a6e4c70aa05a204995b6c9696f53 # v3.0.0
+ with:
+ issue-number: ${{ steps.pr.outputs.result }}
+ body-includes: ''
+ comment-author: 'github-actions[bot]'
+ edit-mode: replace
+ body: |
+
+ ## ๐จ Storybook Build Status
+
+ โณ **Build is starting...**
+
+ โฐ Started at: ${{ steps.completion-time.outputs.time }} UTC
+
+ ### ๐ Building Storybook
+ - ๐ฆ Installing dependencies...
+ - ๐ง Building Storybook components...
+ - ๐จ Running Chromatic visual tests...
+
+ ---
+ โฑ๏ธ Please wait while the Storybook build is in progress...
+
+ - name: Comment PR - Storybook Complete
+ if: steps.pr.outputs.result != 'null' && github.event.action == 'completed'
+ uses: edumserrano/find-create-or-update-comment@82880b65c8a3a6e4c70aa05a204995b6c9696f53 # v3.0.0
+ with:
+ issue-number: ${{ steps.pr.outputs.result }}
+ body-includes: ''
+ comment-author: 'github-actions[bot]'
+ edit-mode: replace
+ body: |
+
+ ## ๐จ Storybook Build Status
+
+ ${{ fromJSON(steps.workflow-run.outputs.result).conclusion == 'success' && 'โ
' || 'โ' }} **${{ fromJSON(steps.workflow-run.outputs.result).conclusion == 'success' && 'Build completed successfully!' || 'Build failed!' }}**
+
+ โฐ Completed at: ${{ steps.completion-time.outputs.time }} UTC
+
+ ### ๐ Links
+ - [๐ View Workflow Run](${{ fromJSON(steps.workflow-run.outputs.result).html_url }})
+
+ ---
+ ${{ fromJSON(steps.workflow-run.outputs.result).conclusion == 'success' && '๐ Your Storybook is ready for review!' || 'โ ๏ธ Please check the workflow logs for error details.' }}
diff --git a/.github/workflows/test-ui.yaml b/.github/workflows/test-ui.yaml
index 3838e98b0..99b3727ce 100644
--- a/.github/workflows/test-ui.yaml
+++ b/.github/workflows/test-ui.yaml
@@ -7,15 +7,11 @@ on:
branches-ignore:
[wip/*, draft/*, temp/*, vue-nodes-migration, sno-playwright-*]
-env:
- DATE_FORMAT: '+%m/%d/%Y, %I:%M:%S %p'
-
jobs:
setup:
runs-on: ubuntu-latest
outputs:
cache-key: ${{ steps.cache-key.outputs.key }}
- sanitized-branch: ${{ steps.branch-info.outputs.sanitized }}
steps:
- name: Checkout ComfyUI
uses: actions/checkout@v4
@@ -48,29 +44,6 @@ jobs:
cache: 'pnpm'
cache-dependency-path: 'ComfyUI_frontend/pnpm-lock.yaml'
- - name: Get current time
- id: current-time
- run: echo "time=$(date -u '${{ env.DATE_FORMAT }}')" >> $GITHUB_OUTPUT
-
- - name: Comment PR - Tests Started
- if: github.event_name == 'pull_request'
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: append
- body: |
-
-
- ---
-
-
- [${{ steps.current-time.outputs.time }} UTC] Preparing browser tests across multiple browsers...
-
- ---
- *This comment will be updated when tests complete*
- name: Cache tool outputs
uses: actions/cache@v4
@@ -94,14 +67,6 @@ jobs:
id: cache-key
run: echo "key=$(date +%s)" >> $GITHUB_OUTPUT
- - name: Generate sanitized branch name
- id: branch-info
- run: |
- # Get branch name and sanitize it for Cloudflare branch names
- BRANCH_NAME="${{ github.head_ref || github.ref_name }}"
- SANITIZED_BRANCH=$(echo "$BRANCH_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g' | sed 's/--*/-/g' | sed 's/^-\|-$//g')
- echo "sanitized=${SANITIZED_BRANCH}" >> $GITHUB_OUTPUT
-
- name: Save cache
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684
with:
@@ -114,8 +79,6 @@ jobs:
needs: setup
runs-on: ubuntu-latest
permissions:
- pull-requests: write
- issues: write
contents: read
strategy:
fail-fast: false
@@ -144,32 +107,6 @@ jobs:
python-version: '3.10'
cache: 'pip'
- - name: Get current time
- id: current-time
- run: echo "time=$(date -u '${{ env.DATE_FORMAT }}')" >> $GITHUB_OUTPUT
-
- - name: Set project name
- id: project-name
- run: |
- if [ "${{ matrix.browser }}" = "chromium-0.5x" ]; then
- echo "name=comfyui-playwright-chromium-0-5x" >> $GITHUB_OUTPUT
- else
- echo "name=comfyui-playwright-${{ matrix.browser }}" >> $GITHUB_OUTPUT
- fi
- echo "branch=${{ needs.setup.outputs.sanitized-branch }}" >> $GITHUB_OUTPUT
-
- - name: Comment PR - Browser Test Started
- if: github.event_name == 'pull_request'
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: append
- body: |
-
- ${{ matrix.browser }}: Running tests...
- name: Install requirements
run: |
@@ -198,9 +135,6 @@ jobs:
run: npx playwright install chromium --with-deps
working-directory: ComfyUI_frontend
- - name: Install Wrangler
- run: pnpm install -g wrangler
-
- name: Run Playwright tests (${{ matrix.browser }})
id: playwright
run: npx playwright test --project=${{ matrix.browser }} --reporter=html
@@ -213,181 +147,3 @@ jobs:
path: ComfyUI_frontend/playwright-report/
retention-days: 30
- - name: Deploy to Cloudflare Pages (${{ matrix.browser }})
- id: cloudflare-deploy
- if: always()
- continue-on-error: true
- run: |
- # Retry logic for wrangler deploy (3 attempts)
- RETRY_COUNT=0
- MAX_RETRIES=3
- SUCCESS=false
-
- while [ $RETRY_COUNT -lt $MAX_RETRIES ] && [ $SUCCESS = false ]; do
- RETRY_COUNT=$((RETRY_COUNT + 1))
- echo "Deployment attempt $RETRY_COUNT of $MAX_RETRIES..."
-
- if npx wrangler pages deploy ComfyUI_frontend/playwright-report --project-name=${{ steps.project-name.outputs.name }} --branch=${{ steps.project-name.outputs.branch }}; then
- SUCCESS=true
- echo "Deployment successful on attempt $RETRY_COUNT"
- else
- echo "Deployment failed on attempt $RETRY_COUNT"
- if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
- echo "Retrying in 10 seconds..."
- sleep 10
- fi
- fi
- done
-
- if [ $SUCCESS = false ]; then
- echo "All deployment attempts failed"
- exit 1
- fi
- env:
- CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
-
- - name: Save deployment info for summary
- if: always()
- run: |
- mkdir -p deployment-info
- # Use step conclusion to determine test result
- if [ "${{ steps.playwright.conclusion }}" = "success" ]; then
- EXIT_CODE="0"
- else
- EXIT_CODE="1"
- fi
- DEPLOYMENT_URL="${{ steps.cloudflare-deploy.outputs.deployment-url || steps.cloudflare-deploy.outputs.url || format('https://{0}.{1}.pages.dev', steps.project-name.outputs.branch, steps.project-name.outputs.name) }}"
- echo "${{ matrix.browser }}|${EXIT_CODE}|${DEPLOYMENT_URL}" > deployment-info/${{ matrix.browser }}.txt
-
- - name: Upload deployment info
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: deployment-info-${{ matrix.browser }}
- path: deployment-info/
- retention-days: 1
-
- - name: Get completion time
- id: completion-time
- if: always()
- run: echo "time=$(date -u '${{ env.DATE_FORMAT }}')" >> $GITHUB_OUTPUT
-
- - name: Comment PR - Browser Test Complete
- if: always() && github.event_name == 'pull_request'
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: append
- body: |
- ${{ steps.playwright.conclusion == 'success' && 'โ
' || 'โ' }} **${{ matrix.browser }}**: ${{ steps.playwright.conclusion == 'success' && 'Tests passed!' || 'Tests failed!' }} [View Report](${{ steps.cloudflare-deploy.outputs.deployment-url || format('https://{0}.{1}.pages.dev', steps.project-name.outputs.branch, steps.project-name.outputs.name) }})
-
- comment-summary:
- needs: playwright-tests
- runs-on: ubuntu-latest
- if: always() && github.event_name == 'pull_request'
- permissions:
- pull-requests: write
- steps:
- - name: Download all deployment info
- uses: actions/download-artifact@v4
- with:
- pattern: deployment-info-*
- merge-multiple: true
- path: deployment-info
-
- - name: Get completion time
- id: completion-time
- run: echo "time=$(date -u '${{ env.DATE_FORMAT }}')" >> $GITHUB_OUTPUT
-
- - name: Generate comment body
- id: comment-body
- run: |
- echo "" > comment.md
- echo "## ๐ญ Playwright Test Results" >> comment.md
- echo "" >> comment.md
-
- # Check if all tests passed
- ALL_PASSED=true
- for file in deployment-info/*.txt; do
- if [ -f "$file" ]; then
- browser=$(basename "$file" .txt)
- info=$(cat "$file")
- exit_code=$(echo "$info" | cut -d'|' -f2)
- if [ "$exit_code" != "0" ]; then
- ALL_PASSED=false
- break
- fi
- fi
- done
-
- if [ "$ALL_PASSED" = "true" ]; then
- echo "โ
**All tests passed across all browsers!**" >> comment.md
- else
- echo "โ **Some tests failed!**" >> comment.md
- fi
-
- echo "" >> comment.md
- echo "โฐ Completed at: ${{ steps.completion-time.outputs.time }} UTC" >> comment.md
- echo "" >> comment.md
- echo "### ๐ Test Reports by Browser" >> comment.md
-
- for file in deployment-info/*.txt; do
- if [ -f "$file" ]; then
- browser=$(basename "$file" .txt)
- info=$(cat "$file")
- exit_code=$(echo "$info" | cut -d'|' -f2)
- url=$(echo "$info" | cut -d'|' -f3)
-
- if [ "$exit_code" = "0" ]; then
- status="โ
"
- else
- status="โ"
- fi
-
- echo "- $status **$browser**: [View Report]($url)" >> comment.md
- fi
- done
-
- echo "" >> comment.md
- echo "---" >> comment.md
- if [ "$ALL_PASSED" = "true" ]; then
- echo "๐ Your tests are passing across all browsers!" >> comment.md
- else
- echo "โ ๏ธ Please check the test reports for details on failures." >> comment.md
- fi
-
- - name: Comment PR - Tests Complete
- continue-on-error: true
- uses: edumserrano/find-create-or-update-comment@v3
- with:
- issue-number: ${{ github.event.pull_request.number }}
- body-includes: ''
- comment-author: 'github-actions[bot]'
- edit-mode: replace
- body-path: comment.md
-
- - name: Check test results and fail if needed
- run: |
- # Check if all tests passed and fail the job if not
- ALL_PASSED=true
- for file in deployment-info/*.txt; do
- if [ -f "$file" ]; then
- info=$(cat "$file")
- exit_code=$(echo "$info" | cut -d'|' -f2)
- if [ "$exit_code" != "0" ]; then
- ALL_PASSED=false
- break
- fi
- fi
- done
-
- if [ "$ALL_PASSED" = "false" ]; then
- echo "โ Tests failed in one or more browsers. Failing the CI job."
- exit 1
- else
- echo "โ
All tests passed across all browsers!"
- fi