Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/actions/setup-comfyui-server/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@ inputs:
description: 'Whether to launch the server after setup'
required: false
default: 'false'
skip_checkout:
description: 'Skip checking out ComfyUI repo (use when restoring from cache)'
required: false
default: 'false'
runs:
using: 'composite'
steps:
# Note: this workflow assume frontend repo is checked out and is built in ../dist

# Checkout ComfyUI repo, install the dev_tools node and start server
- name: Checkout ComfyUI
if: ${{ inputs.skip_checkout != 'true' }}
uses: actions/checkout@v5
with:
repository: 'comfyanonymous/ComfyUI'
Expand All @@ -38,6 +43,7 @@ runs:
python-version: '3.10'

- name: Install Python requirements
if: ${{ inputs.skip_checkout != 'true' }}
shell: bash
working-directory: ComfyUI
run: |
Expand Down
182 changes: 155 additions & 27 deletions .github/workflows/pr-update-playwright-expectations.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,80 +6,208 @@ on:
types: [labeled]
issue_comment:
types: [created]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
setup:
runs-on: ubuntu-latest
if: >
( github.event_name == 'pull_request' && github.event.label.name == 'New Browser Test Expectations' ) ||
( github.event.issue.pull_request &&
( github.event.issue.pull_request &&
github.event_name == 'issue_comment' &&
(
github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR'
) &&
startsWith(github.event.comment.body, '/update-playwright') )
outputs:
cache-key: ${{ steps.cache-key.outputs.key }}
pr-number: ${{ steps.pr-info.outputs.pr-number }}
branch: ${{ steps.pr-info.outputs.branch }}
comment-id: ${{ steps.find-update-comment.outputs.comment-id }}
steps:
- name: Get PR info
id: pr-info
run: |
echo "pr-number=${{ github.event.number || github.event.issue.number }}" >> $GITHUB_OUTPUT
echo "branch=$(gh pr view ${{ github.event.number || github.event.issue.number }} --repo ${{ github.repository }} --json headRefName --jq '.headRefName')" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Find Update Comment
uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad
id: "find-update-comment"
with:
issue-number: ${{ github.event.number || github.event.issue.number }}
issue-number: ${{ steps.pr-info.outputs.pr-number }}
comment-author: "github-actions[bot]"
body-includes: "Updating Playwright Expectations"

- name: Add Starting Reaction
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9
with:
comment-id: ${{ steps.find-update-comment.outputs.comment-id }}
issue-number: ${{ github.event.number || github.event.issue.number }}
issue-number: ${{ steps.pr-info.outputs.pr-number }}
body: |
Updating Playwright Expectations
edit-mode: replace
reactions: eyes

- name: Get Branch SHA
id: "get-branch"
run: echo ::set-output name=branch::$(gh pr view $PR_NO --repo $REPO --json headRefName --jq '.headRefName')
env:
REPO: ${{ github.repository }}
PR_NO: ${{ github.event.number || github.event.issue.number }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Initial Checkout
- name: Checkout repository
uses: actions/checkout@v5
with:
ref: ${{ steps.get-branch.outputs.branch }}
- name: Setup Frontend
ref: ${{ steps.pr-info.outputs.branch }}
- name: Setup frontend
uses: ./.github/actions/setup-frontend
with:
include_build_step: true
- name: Setup ComfyUI Server
# Save expensive build artifacts (Python env, built frontend, node_modules)
# Source code will be checked out fresh in sharded jobs
Comment on lines +67 to +68
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you look at @snomiao's recent cache removal change, it can sometimes be more expensive to try to save time like this.

- name: Generate cache key
id: cache-key
run: echo "key=$(date +%s)" >> $GITHUB_OUTPUT
- name: Save cache
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684
with:
path: |
ComfyUI
dist
node_modules
key: comfyui-setup-${{ steps.cache-key.outputs.key }}

# Sharded snapshot updates
update-snapshots-sharded:
needs: setup
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shardIndex: [1, 2, 3, 4]
shardTotal: [4]
steps:
# Checkout source code fresh (not cached)
- name: Checkout repository
uses: actions/checkout@v5
with:
ref: ${{ needs.setup.outputs.branch }}

# Restore expensive build artifacts from setup job
- name: Restore cached artifacts
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684
with:
fail-on-cache-miss: true
path: |
ComfyUI
dist
node_modules
key: comfyui-setup-${{ needs.setup.outputs.cache-key }}

- name: Setup ComfyUI server (from cache)
uses: ./.github/actions/setup-comfyui-server
with:
launch_server: true
skip_checkout: true

- name: Setup nodejs, pnpm, reuse built frontend
uses: ./.github/actions/setup-frontend

- name: Setup Playwright
uses: ./.github/actions/setup-playwright
- name: Run Playwright tests and update snapshots

# Run sharded tests with snapshot updates
- name: Update snapshots (Shard ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
id: playwright-tests
run: pnpm exec playwright test --update-snapshots
run: pnpm exec playwright test --update-snapshots --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
continue-on-error: true
- uses: actions/upload-artifact@v4

# Upload updated snapshots from this shard
- name: Upload updated snapshots
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
name: snapshots-shard-${{ matrix.shardIndex }}
path: browser_tests/**/*-snapshots/
retention-days: 1

- name: Upload test report
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-shard-${{ matrix.shardIndex }}
path: ./playwright-report/
retention-days: 30

# Merge snapshots and commit
merge-and-commit:
needs: [setup, update-snapshots-sharded]
runs-on: ubuntu-latest
if: always()
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
ref: ${{ needs.setup.outputs.branch }}

# Download all snapshot artifacts from shards
- name: Download all snapshots
uses: actions/download-artifact@v4
with:
pattern: snapshots-shard-*
path: ./downloaded-snapshots
merge-multiple: false

# Merge snapshots from all shards into browser_tests directory
- name: Merge snapshots
run: |
set -euo pipefail

echo "Merging snapshots from all shards..."

# Verify target directory exists
if [ ! -d "browser_tests" ]; then
echo "::error::Target directory 'browser_tests' does not exist"
exit 1
fi

merged_count=0
for shard_dir in ./downloaded-snapshots/snapshots-shard-*; do
# Check if glob matched any directories
if [ ! -e "$shard_dir" ]; then
echo "::warning::No shard directories found matching pattern"
continue
fi

if [ ! -d "$shard_dir" ]; then
echo "::warning::Expected directory but found file: $shard_dir"
continue
fi

# Check if directory has content (empty is OK - shard might have no changes)
if [ -z "$(ls -A "$shard_dir" 2>/dev/null)" ]; then
echo "Shard directory $shard_dir is empty (no snapshots updated in this shard)"
continue
fi

echo "Copying from $shard_dir..."
if ! cp -r "$shard_dir"/* browser_tests/; then
echo "::error::Failed to copy snapshots from $shard_dir to browser_tests/"
exit 1
fi
((merged_count++))
done

echo "Snapshot merge complete. Merged snapshots from $merged_count shard(s)"

- name: Debugging info
run: |
echo "PR: ${{ github.event.issue.number }}"
echo "Branch: ${{ steps.get-branch.outputs.branch }}"
echo "PR: ${{ needs.setup.outputs.pr-number }}"
echo "Branch: ${{ needs.setup.outputs.branch }}"
git status

- name: Commit updated expectations
run: |
git config --global user.name 'github-actions'
Expand All @@ -89,20 +217,20 @@ jobs:
echo "No changes to commit"
else
git commit -m "[automated] Update test expectations"
git push origin ${{ steps.get-branch.outputs.branch }}
git push origin ${{ needs.setup.outputs.branch }}
fi

- name: Add Done Reaction
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9
if: github.event_name == 'issue_comment'
with:
comment-id: ${{ steps.find-update-comment.outputs.comment-id }}
issue-number: ${{ github.event.number || github.event.issue.number }}
comment-id: ${{ needs.setup.outputs.comment-id }}
issue-number: ${{ needs.setup.outputs.pr-number }}
reactions: +1
reactions-edit-mode: replace

- name: Remove New Browser Test Expectations label
if: always() && github.event_name == 'pull_request'
run: gh pr edit ${{ github.event.pull_request.number }} --remove-label "New Browser Test Expectations"
run: gh pr edit ${{ needs.setup.outputs.pr-number }} --remove-label "New Browser Test Expectations"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion src/components/graph/SelectionToolbox.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
class="selection-toolbox pointer-events-auto rounded-lg border border-interface-stroke bg-interface-panel-surface"
:pt="{
header: 'hidden',
content: 'p-2 h-12 flex flex-row gap-1'
content: 'p-2 h-2 flex flex-row gap-1'
}"
@wheel="canvasInteractions.forwardEventToCanvas"
>
Expand Down
Loading