Skip to content

Conversation

@Myestery
Copy link
Contributor

@Myestery Myestery commented Dec 18, 2025

Summary

Use a pre-built container image with all dependencies for Playwright E2E tests, eliminating ~130s setup time per shard.

Changes

  • Use ghcr.io/comfy-org/comfyui-ci-container:0.0.8 container for test jobs
  • Container includes: Playwright browsers, Node.js, pnpm, Python, ComfyUI backend (v0.5.1), all Python deps
  • Simplified setup: just copy devtools and start server (no cloning, no pip install, no browser setup)
  • Add version-bump* to branches-ignore to skip E2E tests for version bump PRs
  • Replace cache with artifacts (cache doesn't work inside containers)

Benefits

  • ~130s faster per shard (no ComfyUI clone, no pip install, no browser download)
  • Consistent environment across all test jobs
  • Simpler workflow configuration

Container Image

Repository: https://github.com/comfy-org/comfyui-ci-container
Image: ghcr.io/comfy-org/comfyui-ci-container:0.0.8

Test plan

  • Verify CI workflow runs with container
  • Verify Playwright tests pass
  • Verify snapshot updates work correctly

@Myestery Myestery requested a review from a team as a code owner December 18, 2025 23:29
@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Dec 18, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 18, 2025

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (2)
  • browser_tests/tests/mobileBaseline.spec.ts-snapshots/mobile-settings-dialog-mobile-chrome-linux.png is excluded by !**/*.png
  • browser_tests/tests/widget.spec.ts-snapshots/resized-to-original-chromium-linux.png is excluded by !**/*.png

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

Replaces cache-based dist propagation with artifact upload/download; containerizes Playwright E2E and snapshot-update jobs. Setup builds and uploads dist/; test shards download it, start ComfyUI in-container, run Playwright, upload per-shard blob reports/snapshots, and merge reports with guarded handling for absent artifacts. (47 words)

Changes

Cohort / File(s) Summary
E2E workflow
​.github/workflows/ci-tests-e2e.yaml
Removed cache restore/save and cache-key export. Setup uploads dist/ as frontend-dist. Test jobs run inside container images (with credentials), download frontend-dist, copy devtools, install frontend deps, start ComfyUI in-container, run Playwright (sharded/non-sharded), and upload per-shard blob/HTML/JSON reports.
Playwright expectations workflow
​.github/workflows/pr-update-playwright-expectations.yaml
Removed setup cache-key output and cache steps; setup uploads frontend-dist. Snapshot-update and merge jobs moved/adjusted for container execution: download artifact, install deps, start server in-container, stage/upload per-shard blob reports and snapshots, use git safe.directory, guard merge/commit when artifacts or changes are absent.
Start ComfyUI action
​.github/actions/start-comfyui-server/action.yml
New composite action to start ComfyUI inside runner/container: copies devtools to /ComfyUI/custom_nodes/ComfyUI_devtools/, runs python3 main.py --cpu --multi-user --front-end-root /dist in background, waits for 127.0.0.1:8188 with timeout input (default 600s).
Artifact vs cache handling
.../.github/workflows/*.yaml
Replaced cache save/restore and removed cache-key outputs across workflows; adopted explicit artifact upload/download of built dist/ as frontend-dist.
Containerization & step ordering
.../.github/workflows/*.yaml
Standardized test and snapshot jobs to run inside container images; typical order: checkout → download artifact → copy devtools → start server → install frontend deps → run Playwright. Removed in-repo setup and cache-based propagation.
Reporting & merge logic
​.github/workflows/pr-update-playwright-expectations.yaml, ​.github/workflows/ci-tests-e2e.yaml
Tests emit per-shard blob reports; sharded jobs upload blobs/snapshots. Merge job (runs with minimal setup) downloads blobs, merges into final HTML/JSON via CLI, uploads final reports, and exits cleanly when no snapshot artifacts exist.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Dev as Developer (push/PR)
  participant Setup as Setup Job (runner)
  participant Artifacts as GitHub Artifacts
  participant Container as Containerized Test Job
  participant Comfy as ComfyUI (in-container)
  participant Merge as Merge Reports Job

  Dev->>Setup: push / open PR
  Setup->>Setup: build frontend -> produce `dist/`
  Setup->>Artifacts: upload `frontend-dist`
  Note over Container,Artifacts: Test jobs run inside container images
  Container->>Artifacts: download `frontend-dist`
  Container->>Container: copy devtools & install frontend deps
  Container->>Comfy: start ComfyUI server (in-container)
  Container->>Container: run Playwright tests -> emit blob reports & snapshots
  Container->>Artifacts: upload per-shard blob & snapshot artifacts
  alt snapshots present
    Merge->>Artifacts: download blob reports & snapshots
    Merge->>Merge: merge blobs -> generate final HTML/JSON -> upload results
  else no snapshots
    Merge-->>Merge: detect no artifacts -> exit early
  end
Loading

Possibly related PRs


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Dec 18, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 12/30/2025, 03:30:18 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Dec 18, 2025

🎭 Playwright Test Results

Some tests failed

⏰ Completed at: 12/30/2025, 03:35:20 AM UTC

📈 Summary

  • Total Tests: 512
  • Passed: 502 ✅
  • Failed: 1 ❌
  • Flaky: 1 ⚠️
  • Skipped: 8 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 490 / ❌ 1 / ⚠️ 1 / ⏭️ 8
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@github-actions
Copy link

github-actions bot commented Dec 18, 2025

Bundle Size Report

Summary

  • Raw size: 17.3 MB baseline 17.3 MB — ⚪ 0 B
  • Gzip: 3.54 MB baseline 3.54 MB — ⚪ 0 B
  • Brotli: 2.7 MB baseline 2.7 MB — ⚪ 0 B
  • Bundles: 98 current • 98 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (9.12 MB) · Other ⚪ 0 B (3.47 MB) · App Entry Points ⚪ 0 B (3.2 MB) · Graph Workspace ⚪ 0 B (1000 kB) · Panels & Settings ⚪ 0 B (300 kB) · UI Components ⚪ 0 B (199 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.2 MB (baseline 3.2 MB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-7mA2E7SA.js 3.01 MB 3.01 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/index-B5c2MzIu.js 193 kB 193 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/index-urPiinYD.js 345 B 345 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Graph Workspace — 1000 kB (baseline 1000 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-b9pRUfYN.js 1000 kB 1000 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Views & Navigation — 6.63 kB (baseline 6.63 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-rxThZi3g.js 6.63 kB 6.63 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 300 kB (baseline 300 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-D0_zGiSv.js 9.16 kB 9.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-Dpd3S0z9.js 11.1 kB 11.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-BugymVbe.js 14.8 kB 14.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-BvCve10Y.js 22.7 kB 22.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-Hf0FpTKH.js 7.51 kB 7.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AN2JfZVQ.js 21.7 kB 21.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BhbWhsRg.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BIdKi-OT.js 26.2 kB 26.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bu3OR-lX.js 24.6 kB 24.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-ByL6gy5c.js 25.4 kB 25.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CjlRFMdL.js 32.8 kB 32.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DkGwvylK.js 26.9 kB 26.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dyd027Dx.js 24.7 kB 24.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-wwBxqLH5.js 21.3 kB 21.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-xx2Yb6R2.js 23.8 kB 23.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-D1Bxhlvd.js 6.88 kB 6.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 199 kB (baseline 199 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-CRyuJ6Ku.js 8.83 kB 8.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage.vue_vue_type_script_setup_true_lang-De0OSwBJ.js 59.9 kB 59.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D.vue_vue_type_script_setup_true_lang-CbXexKcT.js 56.4 kB 56.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTitle.vue_vue_type_script_setup_true_lang-DqXadPDr.js 897 B 897 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-DV-9JnFV.js 1.34 kB 1.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CztsWPgt.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-D0sfEa6m.js 14.3 kB 14.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-DaN1jvU_.js 2.14 kB 2.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-CH2M4TJK.js 48.8 kB 48.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl.vue_vue_type_script_setup_true_lang-DFnqIha5.js 3.72 kB 3.72 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 12.5 kB (baseline 12.5 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioService-DhvvmnnR.js 2.2 kB 2.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService--heAv134.js 7.51 kB 7.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-CulKZi3K.js 2.83 kB 2.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 1.41 kB (baseline 1.41 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-CYMrphTf.js 1.41 kB 1.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 9.12 MB (baseline 9.12 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-KBsqeQPQ.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-CzYzbUcM.js 3.89 MB 3.89 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Ch6rhmJJ.js 1.95 MB 1.95 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-DYL0ZbEr.js 2.02 MB 2.02 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-XfQ74oRB.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-DLbRHZS7.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BF8peZ5_.js 420 kB 420 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 3.47 MB (baseline 3.47 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AudioPreviewPlayer-DPDLkq6B.js 13.3 kB 13.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-bTEY9Mp6.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BWp4HdfU.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CcfGaui5.js 14.4 kB 14.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CisfgZf5.js 13.7 kB 13.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CkU12Foh.js 13 kB 13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CoH2DJa6.js 14.2 kB 14.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-COSt-Bjx.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DalfIW5f.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DfTl0eCm.js 13.5 kB 13.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwSJL865.js 13.7 kB 13.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-70vot4jD.js 424 B 424 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bdc58rJq.js 97.1 kB 97.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BRKE6VDs.js 91 kB 91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C9ZJBRdI.js 81.5 kB 81.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CAL83XT3.js 84.6 kB 84.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CHLLfvpG.js 82.4 kB 82.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cw9RZWRY.js 89 B 89 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DDqR5EuX.js 71.3 kB 71.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DLHyaEcz.js 92.1 kB 92.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-O7KfJeMO.js 79.9 kB 79.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-OzGsrlqJ.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DBottom-By_4Uo4x.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-a7D-b3g2.js 1.49 kB 1.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioBottom-BFII1sOb.js 1.51 kB 1.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DnMHwvAw.js 1.46 kB 1.46 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageBottom-35HklA1L.js 1.55 kB 1.55 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BenufCTB.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoBottom-zp4eDfo2.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-uhl1tYxE.js 2.65 kB 2.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-aW9En70v.js 260 kB 260 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BIckSVgU.js 273 kB 273 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BiYpVi7D.js 263 kB 263 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bw_Jitw_.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CCEXtYfM.js 243 kB 243 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CvmVDWYd.js 323 kB 323 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D_wreoPJ.js 267 kB 267 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DIAYlJwM.js 246 kB 246 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dz-0ZIBN.js 297 kB 297 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-VZsNmhG7.js 264 kB 264 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-CnC6uG9I.js 28.5 kB 28.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ValueControlPopover-biQ-pMYG.js 5.49 kB 5.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetAudioUI-DxlQwMnc.js 2.89 kB 2.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CXIOBBuD.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-Vd-QKlop.js 3.41 kB 3.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-P0GyBlUP.js 4.1 kB 4.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DOO74J4Y.js 3.18 kB 3.18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-CFcKPEpE.js 673 B 673 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-CAb59UPx.js 1.99 kB 1.99 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-Biq5hqKH.js 364 B 364 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Bu_nnFg-.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-DQYxpFRZ.js 20.4 kB 20.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-BiLXHqaF.js 733 B 733 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-STZyRln_.js 3.08 kB 3.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-DcExjj-o.js 1.76 kB 1.76 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/ci-tests-e2e.yaml (1)

47-66: Update container image to use Playwright v1.57.0 to match project dependency.

The project uses Playwright v1.57.0, but the container image mcr.microsoft.com/playwright:v1.52.0-noble runs v1.52.0. If the Playwright version in the Docker image does not match the version in the project/tests, Playwright will be unable to locate browser executables. Change the container image tag from v1.52.0-noble to v1.57.0-noble.

Additionally, cache files are created by the runner (UID 1001 on ubuntu-latest) and mounted into the container, but the Playwright container's user 1001 may not have the necessary permissions if that user doesn't exist in the container. Consider using --user root or ensure the container image has a user with UID 1001 configured.

♻️ Duplicate comments (1)
.github/workflows/ci-tests-e2e.yaml (1)

96-98: Same permission and version concerns apply here.

This job has the same container configuration and cache restoration pattern as playwright-tests-chromium-sharded, so the permission mismatch and version compatibility concerns from lines 47-66 apply here as well.

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6244cf1 and 952e5cd.

📒 Files selected for processing (1)
  • .github/workflows/ci-tests-e2e.yaml (7 hunks)
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : Use Playwright tags like `mobile`, `2x` for relevant E2E tests - they are respected by config
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : Use Playwright tags like `mobile`, `2x` for relevant E2E tests - they are respected by config

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: setup
  • GitHub Check: lint-and-format
  • GitHub Check: test
  • GitHub Check: collect
🔇 Additional comments (1)
.github/workflows/ci-tests-e2e.yaml (1)

9-9: LGTM: Reasonable optimization to skip E2E tests for version bump PRs.

This addition prevents running expensive E2E tests on automated version bump PRs, which is a sensible optimization.

@Myestery Myestery force-pushed the ci/playwright-docker-containers branch from 952e5cd to ef5a55d Compare December 18, 2025 23:42
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Dec 18, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
.github/workflows/ci-tests-e2e.yaml (1)

147-149: Note: merge-reports container usage already flagged.

This has already been reviewed in a previous comment. The full Playwright container (with browsers) is not necessary for the merge-reports job, but using it ensures CLI version consistency. A lighter Node.js container would be more efficient if startup time is a concern.

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 952e5cd and ef5a55d.

📒 Files selected for processing (1)
  • .github/workflows/ci-tests-e2e.yaml (5 hunks)
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: setup
  • GitHub Check: test
  • GitHub Check: collect
🔇 Additional comments (4)
.github/workflows/ci-tests-e2e.yaml (4)

9-9: LGTM: Skip E2E tests on version bump PRs.

Adding version-bump* to the ignore list is appropriate for automated version bumps that don't require E2E validation.


55-61: LGTM: Correct pattern for container-based jobs with composite actions.

The checkout-then-download pattern is necessary because:

  1. Checkout provides access to .github/actions (local composite actions)
  2. Workspace download provides built artifacts from the setup job

This is the correct approach for container-based workflows using artifacts.


63-70: LGTM: Efficient test environment setup.

The setup correctly:

  • Launches the ComfyUI server for testing
  • Reuses the built frontend from the workspace artifact
  • Avoids redundant installation/build steps
  • Relies on container-provided browsers

72-84: LGTM: Proper sharded test execution and report handling.

The implementation correctly:

  • Uses blob reporter for efficient report merging across shards
  • Uploads reports even on test failure (!cancelled() condition)
  • Uses appropriate 1-day retention for intermediate blob reports
  • Properly names artifacts with shard indices

Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

For future PRs:

Unused files needing removal:

  • .github/actions/setup-playwright/action.yml

Docs needing updates after this PR:

  • browser_tests/README.md - Remove pnpm exec playwright install chromium --with-deps keep this as it's docs for running locally
  • CONTRIBUTING.md - Update Playwright test section to mention Docker approach

@Myestery
Copy link
Contributor Author

We still have more issues to fix
Looks like the container cannot access the python in setup-server

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (4)
.github/workflows/ci-tests-e2e.yaml (4)

29-38: Consider optimizing workspace artifact size to reduce CI overhead.

Using artifacts instead of cache works correctly with containers, but uploading the entire workspace (except .git) may create large artifacts if it includes node_modules and build outputs. This can slow upload/download times and consume storage quota unnecessarily.

If the artifact size exceeds 500MB, consider either:

  • Excluding node_modules and running pnpm install in downstream jobs (with cache if possible)
  • Using a targeted artifact containing only dist/ and files essential for test jobs

Note that file permissions are not preserved during artifact uploads.


44-46: Update Playwright container image to match project version.

The container image (v1.52.0) lags behind the project's Playwright dependency (v1.57.0). Update the container image from mcr.microsoft.com/playwright:v1.52.0-noble to mcr.microsoft.com/playwright:v1.57.0-noble to ensure consistency between CI and development environments.

🔎 Proposed fix
     container:
-      image: mcr.microsoft.com/playwright:v1.52.0-noble
+      image: mcr.microsoft.com/playwright:v1.57.0-noble
       options: --user 1001

92-94: Update Playwright container image to match project version.

Same version mismatch as in the chromium-sharded job. Update to v1.57.0.

🔎 Proposed fix
     container:
-      image: mcr.microsoft.com/playwright:v1.52.0-noble
+      image: mcr.microsoft.com/playwright:v1.57.0-noble
       options: --user 1001

149-151: Consider lighter container for merge-reports job.

The merge-reports job only runs playwright merge-reports CLI commands and doesn't execute tests or require browsers. Using the full Playwright container (which includes browser binaries, ~1.3GB) may be excessive.

However, using the same container ensures:

  • Consistent Playwright CLI version across all jobs
  • Simplified maintenance (single container version to update)

If you prioritize faster job startup and lower resource usage, consider using a lighter Node.js container with just @playwright/test installed. Otherwise, the current approach is acceptable for consistency.

💡 Alternative: Use lightweight Node container
   merge-reports:
     needs: [playwright-tests-chromium-sharded]
     runs-on: ubuntu-latest
-    container:
-      image: mcr.microsoft.com/playwright:v1.52.0-noble
-      options: --user 1001
     if: ${{ !cancelled() }}
     steps:
       - name: Checkout repository
         uses: actions/checkout@v5
 
-      # Setup pnpm/node to run playwright merge-reports (browsers pre-installed in container)
+      # Setup pnpm/node to run playwright merge-reports
       - name: Setup frontend
         uses: ./.github/actions/setup-frontend

This would use the default ubuntu-latest runner, which should work since no browsers are needed.

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef5a55d and c13db76.

📒 Files selected for processing (2)
  • .github/actions/setup-comfyui-server/action.yml (3 hunks)
  • .github/workflows/ci-tests-e2e.yaml (5 hunks)
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: test
  • GitHub Check: setup
  • GitHub Check: collect
🔇 Additional comments (8)
.github/actions/setup-comfyui-server/action.yml (2)

12-15: LGTM! Container mode input is well-defined.

The new container_mode input properly distinguishes between host and container execution environments with appropriate defaults.


39-40: LGTM! Conditional Python setup is correct.

The conditional logic correctly skips Python setup when running inside a container, as the container provides its own Python environment.

.github/workflows/ci-tests-e2e.yaml (6)

9-9: LGTM! Version bump branch exclusion is appropriate.

Adding version-bump* to branches-ignore prevents unnecessary E2E test runs on automated version bump PRs.


56-61: LGTM! Checkout and workspace download pattern is correct.

The sequence of checking out the repository first (to get .github/actions) then downloading the workspace artifact is the proper approach for container-based jobs.


68-68: LGTM! Container mode flag correctly passed.

Setting container_mode: true ensures the setup action skips redundant Python installation and uses the container's system Python.


102-108: LGTM! Checkout and workspace download pattern is correct.

The pattern is consistent with the chromium-sharded job and properly structured.


115-115: LGTM! Container mode flag correctly passed.

Consistent with the chromium-sharded job.


44-46: No action needed—--user 1001 is the officially recommended pattern for this Playwright container image in GitHub Actions.

Playwright's official CI documentation for GitHub Actions uses --user 1001 with mcr.microsoft.com/playwright:v1.57.0-noble. This configuration is verified as standard practice with no documented permission issues.

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:M This PR changes 30-99 lines, ignoring generated files. labels Dec 18, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/actions/setup-comfyui-server/action.yml (1)

55-58: Inconsistent pip invocation style (duplicate concern).

This code mixes python3 -m pip (line 55) with pip3 (lines 56-58). As noted in a previous review, using python3 -m pip consistently is more explicit and ensures you're using the pip module associated with the specific Python interpreter—especially important in containerized environments.

🔎 Proposed fix for consistency
 python3 -m pip install --upgrade pip --break-system-packages || python3 -m pip install --upgrade pip
-pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --break-system-packages || pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
-pip3 install -r requirements.txt --break-system-packages || pip3 install -r requirements.txt
-pip3 install wait-for-it --break-system-packages || pip3 install wait-for-it
+python3 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --break-system-packages || python3 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
+python3 -m pip install -r requirements.txt --break-system-packages || python3 -m pip install -r requirements.txt
+python3 -m pip install wait-for-it --break-system-packages || python3 -m pip install wait-for-it
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c13db76 and ea73801.

📒 Files selected for processing (1)
  • .github/actions/setup-comfyui-server/action.yml (2 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/actions/setup-comfyui-server/action.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: setup
  • GitHub Check: lint-and-format
  • GitHub Check: test
  • GitHub Check: collect
🔇 Additional comments (3)
.github/actions/setup-comfyui-server/action.yml (3)

12-15: LGTM! Container mode input is well-designed.

The container_mode input enables dual-mode operation while maintaining backward compatibility with existing workflows.


39-40: LGTM! Conditional Python setup is appropriate.

Correctly skips the setup-python action when running in container mode where system Python is available.


65-65: LGTM! Correct use of python3.

Explicitly using python3 ensures the correct interpreter is invoked in the container environment.

@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. size:L This PR changes 100-499 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. size:M This PR changes 30-99 lines, ignoring generated files. labels Dec 19, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (4)
.github/actions/setup-comfyui-server/action.yml (2)

70-78: Use python3 -m pip consistently.

Line 75 uses python3 -m pip while lines 76-78 use pip3. For consistency and to ensure the correct interpreter's pip is used, use python3 -m pip throughout.

🔎 Proposed fix
     - name: Install Python requirements (host mode)
       if: ${{ inputs.container_mode != 'true' }}
       shell: bash
       working-directory: ComfyUI
       run: |
         python3 -m pip install --upgrade pip
-        pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
-        pip3 install -r requirements.txt
-        pip3 install wait-for-it
+        python3 -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
+        python3 -m pip install -r requirements.txt
+        python3 -m pip install wait-for-it

45-49: Use Python Playwright container image and remove this step.

This step will fail because:

  1. User 1001 (non-root) cannot execute apt-get commands—permission denied
  2. The workflow uses mcr.microsoft.com/playwright:v1.57.0-noble, which is the Node.js-based image without Python

The Python-enabled Playwright image includes Python and pip pre-installed. Update the workflow to use mcr.microsoft.com/playwright/python:v1.57.0-noble and remove this step entirely.

🔎 Required fixes in both files

In .github/workflows/ci-tests-e2e.yaml, update the container image:

 container:
-  image: mcr.microsoft.com/playwright:v1.57.0-noble
+  image: mcr.microsoft.com/playwright/python:v1.57.0-noble

Apply this change to all three container specifications (lines 44-45, 91-92, and 147-148).

In .github/actions/setup-comfyui-server/action.yml, remove the apt-get step:

-    - name: Install pip (container mode)
-      if: ${{ inputs.container_mode == 'true' }}
-      shell: bash
-      run: |
-        apt-get update && apt-get install -y python3-pip python3-venv
-
.github/workflows/ci-tests-e2e.yaml (2)

91-92: Use Python-enabled Playwright container.

Same issue as lines 44-46: use mcr.microsoft.com/playwright/python:v1.57.0-noble instead.


147-148: Use Python-enabled Playwright container.

Same issue as previous container specifications: use mcr.microsoft.com/playwright/python:v1.57.0-noble.

Note: The merge-reports job doesn't require browsers or Python—it only runs playwright merge-reports. Using the Python Playwright image works but is heavier than necessary. Consider this addressed for consistency, or optimize later with a lighter Node.js-only image if startup time becomes a concern.

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ea73801 and a9538ac.

📒 Files selected for processing (2)
  • .github/actions/setup-comfyui-server/action.yml (2 hunks)
  • .github/workflows/ci-tests-e2e.yaml (5 hunks)
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : Use Playwright tags like `mobile`, `2x` for relevant E2E tests - they are respected by config
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/actions/setup-comfyui-server/action.yml
  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: setup
  • GitHub Check: test
  • GitHub Check: lint-and-format
  • GitHub Check: collect
🔇 Additional comments (12)
.github/actions/setup-comfyui-server/action.yml (6)

12-15: LGTM: Clear input parameter.

The container_mode input is well-defined with appropriate defaults and documentation.


39-43: LGTM: Clean conditional logic for host mode.

The renamed step with conditional execution properly separates host and container workflows.


51-57: LGTM: Standard virtual environment setup.

The venv creation and PATH configuration are correct. This will work once the Python Playwright container image is used.


59-68: LGTM: Consistent pip usage within venv.

Using pip directly after activating the virtual environment is correct and more concise than python -m pip.


80-87: LGTM: Proper venv activation before server start.

The server startup correctly activates the virtual environment and uses the venv's Python executable.


89-95: LGTM: Host mode server startup is correct.

Using python3 directly in host mode is appropriate since the setup-python action installs it as python3.

.github/workflows/ci-tests-e2e.yaml (6)

9-9: LGTM: Skip E2E tests for version bumps.

Adding version-bump* to the ignore list is a sensible optimization for automated version bump PRs.


30-38: LGTM: Artifact-based workspace sharing works with containers.

Switching from cache to artifacts is necessary for container-based workflows. The entire workspace upload ensures all dependencies are available.


54-60: LGTM: Checkout before download ensures actions are available.

The explicit checkout step is necessary to access .github/actions before downloading the workspace artifact.


67-67: LGTM: Correct container_mode usage.

Passing container_mode: true activates the container-specific setup path in the action.


100-106: LGTM: Consistent checkout-then-download pattern.

Same correct approach as the chromium-sharded job.


113-113: LGTM: Correct container_mode usage.

Consistent with the chromium-sharded job.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/workflows/ci-tests-e2e.yaml (1)

89-90: Add security option to run container as non-root user.

This container specification has the same security issue as lines 42-43: missing the --user 1001 option mentioned in the PR summary.

🔎 Proposed fix
     container:
       image: mcr.microsoft.com/playwright/python:v1.57.0-noble
+      options: --user 1001
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a9538ac and df91d2a.

📒 Files selected for processing (2)
  • .github/actions/setup-comfyui-server/action.yml (2 hunks)
  • .github/workflows/ci-tests-e2e.yaml (6 hunks)
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : Use Playwright tags like `mobile`, `2x` for relevant E2E tests - they are respected by config
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/actions/setup-comfyui-server/action.yml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-17T01:01:03.609Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-16T17:41:58.464Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T17:41:58.464Z
Learning: Prerequisites for repository setup: Node.js >= 24, Git repository, available ports for dev server and storybook

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: setup
  • GitHub Check: collect
  • GitHub Check: test
🔇 Additional comments (11)
.github/actions/setup-comfyui-server/action.yml (5)

12-15: LGTM: Container mode input enables flexible execution.

The container_mode input cleanly separates container and host execution paths. The default of 'false' maintains backward compatibility for existing callers.


39-43: LGTM: Host-only Python setup is correctly gated.

The conditional execution ensures Python setup only runs on host runners where it's needed, avoiding redundant setup in containers that already provide Python.


45-53: Verify the security implications of --break-system-packages.

The --break-system-packages flag bypasses PEP 668 protection for externally-managed Python environments. While necessary in some containerized setups, this approach:

  • Allows pip to modify system-managed packages
  • Could lead to dependency conflicts or version mismatches
  • Is appropriate for ephemeral CI containers but should be intentional

Consider whether a virtual environment approach would be more robust, or confirm that this flag is the intended solution for the Playwright Python container environment.


55-63: LGTM: Host mode requirements installation is correctly configured.

The host mode path correctly uses python3 -m pip without --break-system-packages, which is appropriate for non-containerized environments where Python is managed by actions/setup-python.


70-70: LGTM: Explicit python3 command improves reliability.

Using python3 instead of python ensures the correct interpreter is invoked consistently across both container and host execution modes.

.github/workflows/ci-tests-e2e.yaml (6)

9-9: LGTM: Skipping E2E tests for version bump PRs is sensible.

Version bump PRs typically only update version numbers and don't require full E2E test coverage, reducing unnecessary CI overhead.


30-36: LGTM: Artifact-based distribution is cleaner than cache-based approach.

Uploading only the built dist/ directory is more efficient than the full workspace. The 1-day retention is appropriate for CI artifacts that are only needed during the workflow run.


52-58: LGTM: Artifact-based workflow requires checkout before download.

The addition of checkout and artifact download steps correctly establishes the workspace needed for containerized test execution. The path mapping (frontend-distdist/) aligns with the setup job's artifact upload.


65-65: LGTM: Container mode flag correctly activates container-specific setup.

Passing container_mode: true enables the appropriate Python installation logic with --break-system-packages flags in the composite action.


66-67: LGTM: Step name accurately reflects its reduced scope.

The rename to "Setup nodejs, pnpm" correctly indicates that frontend building is handled in the setup job, and this step only installs runtime dependencies.


141-152: LGTM: Merge-reports job correctly avoids unnecessary container overhead.

Running the merge-reports job directly on ubuntu-latest without a container is the right choice. It only needs the Playwright CLI (via pnpm) to merge blob reports and doesn't require browsers or Python, making the lightweight approach more efficient.

@Myestery Myestery force-pushed the ci/playwright-docker-containers branch from 94ec109 to df91d2a Compare December 19, 2025 01:47
@socket-security
Copy link

socket-security bot commented Dec 19, 2025

All alerts resolved. Learn more about Socket for GitHub.

This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.

View full report

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7919699 and bf5b857.

📒 Files selected for processing (1)
  • .github/workflows/pr-update-playwright-expectations.yaml (4 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : Use Playwright tags like `mobile`, `2x` for relevant E2E tests - they are respected by config
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-17T01:01:03.609Z
Learning: Applies to browser_tests/**/*.spec.ts : E2E test files must use pattern `browser_tests/**/*.spec.ts` with Playwright
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/pr-update-playwright-expectations.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: collect
  • GitHub Check: test
  • GitHub Check: setup
🔇 Additional comments (7)
.github/workflows/pr-update-playwright-expectations.yaml (7)

66-73: LGTM: Artifact-based distribution is appropriate for container workflows.

The switch from cache to artifacts with 1-day retention is correct since cache doesn't work reliably inside containers.


91-95: LGTM: Artifact download correctly replaces cache restoration.

The artifact-based approach properly corresponds to the upload in the setup job and works reliably in container environments.


115-139: Good practices: Git configuration and debug output for container environments.

The git config --global --add safe.directory configuration (line 123) is essential for container environments where the repository is owned by a different user. The extensive debug output will help troubleshoot container-specific issues.


224-232: LGTM: Robust handling of missing artifacts.

The conditional check properly handles the case where no shards produced snapshot changes, providing clear feedback.


243-251: LGTM: Clean early exit when no artifacts to merge.

The guard correctly handles the scenario where no shards produced changes, preventing unnecessary processing and potential errors.


97-102: No action needed—the container_mode: true parameter properly handles Python executable access in container execution environments.


103-105: The setup-frontend action already properly implements dependency caching. It uses actions/setup-node with cache: 'pnpm', which relies on actions/cache under the hood for caching global packages data. GitHub cache works in containers; caches are found and restored properly in containerized workflows. Dependency installation will benefit from caching across runs.

Likely an incorrect or invalid review comment.

@Myestery Myestery requested a review from DrJKL December 30, 2025 01:35
@socket-security
Copy link

socket-security bot commented Dec 30, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedfuse.js@​7.0.01001009181100

View full report

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e90eb72 and f52be7a.

📒 Files selected for processing (2)
  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
🧰 Additional context used
🧠 Learnings (16)
📓 Common learnings
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-21T06:04:12.562Z
Learning: Applies to browser_tests/**/*.spec.ts : Use E2E tests in `browser_tests/**/*.spec.ts` with Playwright framework
📚 Learning: 2025-12-12T23:02:37.473Z
Learnt from: Myestery
Repo: Comfy-Org/ComfyUI_frontend PR: 7422
File: .github/workflows/pr-update-playwright-expectations.yaml:131-135
Timestamp: 2025-12-12T23:02:37.473Z
Learning: In the `.github/workflows/pr-update-playwright-expectations.yaml` workflow in the Comfy-Org/ComfyUI_frontend repository, the snapshot update process is intentionally scoped to only add and update snapshot images. Deletions of snapshot files are handled explicitly outside this workflow and should not be suggested as part of this automation.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Test user workflows in browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Use Playwright fixtures for browser tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
📚 Learning: 2025-12-21T06:04:12.562Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-21T06:04:12.562Z
Learning: Applies to browser_tests/**/*.spec.ts : Use E2E tests in `browser_tests/**/*.spec.ts` with Playwright framework

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
📚 Learning: 2025-11-24T19:48:03.270Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: tests-ui/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:48:03.270Z
Learning: Applies to tests-ui/**/*.test.{js,ts,jsx,tsx} : Write tests for new features

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-13T05:54:35.779Z
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7415
File: browser_tests/tests/mobileBaseline.spec.ts:17-22
Timestamp: 2025-12-13T05:54:35.779Z
Learning: In browser_tests tests for the Comfy-Org/ComfyUI_frontend repository, the `comfyPage.loadWorkflow()` method already handles all necessary synchronization and waiting. No additional `await comfyPage.nextFrame()` call is needed before taking screenshots after loading a workflow.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-21T06:04:12.562Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-21T06:04:12.562Z
Learning: Run quality gates before committing: `pnpm lint`, `pnpm typecheck`, `pnpm knip`, and ensure relevant tests pass; never use `--no-verify` to bypass

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
📚 Learning: 2025-11-24T19:47:56.371Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/lib/litegraph/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:56.371Z
Learning: Be sure to typecheck when you're done making a series of code changes using `pnpm typecheck`

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
  • .github/workflows/pr-update-playwright-expectations.yaml
📚 Learning: 2025-11-24T19:48:03.270Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: tests-ui/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:48:03.270Z
Learning: Check tests-ui/README.md for test guidelines

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:47:22.909Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: browser_tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:22.909Z
Learning: Applies to browser_tests/**/*.{e2e,spec}.{ts,tsx,js,jsx} : Check assets/ directory for test data when writing tests

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-11-24T19:48:03.270Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: tests-ui/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:48:03.270Z
Learning: Applies to tests-ui/**/*.test.{js,ts,jsx,tsx} : Use existing test utilities rather than writing custom utilities

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-13T05:34:22.209Z
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7415
File: browser_tests/tests/mobileBaseline.spec.ts:7-15
Timestamp: 2025-12-13T05:34:22.209Z
Learning: In Playwright tests in the Comfy-Org/ComfyUI_frontend repository, the `toPass()` assertion method implements incremental backoff during retries, so increasing the timeout value (e.g., to 5000ms) is sufficient for handling async operations without being overly aggressive.

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-21T06:04:12.562Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-21T06:04:12.562Z
Learning: Applies to browser_tests/**/*.spec.ts : Do not use `waitForTimeout` in Playwright tests; use Locator actions and retrying assertions instead

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-16T17:41:58.464Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T17:41:58.464Z
Learning: Prerequisites for repository setup: Node.js >= 24, Git repository, available ports for dev server and storybook

Applied to files:

  • .github/workflows/ci-tests-e2e.yaml
📚 Learning: 2025-12-11T12:25:24.164Z
Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 7358
File: src/components/dialog/content/signin/SignUpForm.vue:45-54
Timestamp: 2025-12-11T12:25:24.164Z
Learning: The project has CI automation that handles code formatting (pnpm format) automatically, so manual formatting suggestions should not be provided in code reviews for the Comfy-Org/ComfyUI_frontend repository.

Applied to files:

  • .github/workflows/pr-update-playwright-expectations.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: deploy-and-comment
  • GitHub Check: Socket Security: Pull Request Alerts
  • GitHub Check: test
  • GitHub Check: setup
  • GitHub Check: collect
  • GitHub Check: lint-and-format
🔇 Additional comments (13)
.github/workflows/pr-update-playwright-expectations.yaml (6)

66-73: LGTM! Artifact upload configuration is correct.

The switch from cache to artifact-based propagation is properly implemented with appropriate retention period.


79-86: Container configuration looks correct.

The container uses a properly versioned image (0.0.8), and the credentials are correctly configured for GHCR access. The packages: read permission is appropriate for pulling the container image.


103-107: LGTM! Server startup and dependency installation.

Using the composite action for server startup and --frozen-lockfile for reproducible builds follows best practices.


117-148: Robust snapshot staging implementation.

The script properly:

  • Uses set -euo pipefail for strict error handling
  • Configures git safe.directory for container environments
  • Handles both modified and untracked files
  • Guards against missing files with [ -f "$file" ] || continue
  • Provides clear shard-specific output

190-198: Good defensive check for missing artifacts.

Properly handles the case where no shards produced snapshot changes, preventing workflow failures.


209-217: Consistent artifact existence check.

This mirrors the check in the listing step, ensuring the merge step gracefully handles the no-changes case.

.github/workflows/ci-tests-e2e.yaml (7)

25-32: LGTM! Updated comment and artifact configuration.

The comment now correctly states that containerized jobs will install dependencies without cache. The artifact configuration is appropriate.


39-46: Container configuration is correct and consistent.

The container uses the same versioned image (0.0.8) as other test jobs, with proper GHCR credentials. The packages: read permission allows pulling the container image.


53-65: LGTM! Test job setup is well-structured.

The sequence of checkout → download artifact → start server → install deps follows a logical order and uses the composite action for server startup.


67-70: Comment accurately describes test execution environment.

The comment correctly notes that browsers are pre-installed in the container, which is the key benefit of using the custom CI container.


87-94: Consistent container configuration across test jobs.

The non-sharded test job uses identical container configuration as the sharded tests, ensuring environment consistency.


100-117: LGTM! Non-sharded test setup mirrors sharded configuration.

Same setup pattern as sharded tests ensures consistent test execution environment.


138-149: Merge-reports job correctly runs without container.

This job only needs the Playwright CLI for merge-reports, so running on the standard ubuntu-latest runner with setup-frontend is the right approach. This avoids the overhead of pulling the full container image when browsers aren't needed.

Comment on lines +141 to 148
# Copy changed files to staging directory
mkdir -p /tmp/changed_snapshots_shard

# Copy only changed files, preserving directory structure
# Strip 'browser_tests/' prefix to avoid double nesting
echo "Copying changed files to staging directory..."
while IFS= read -r file; do
# Skip paths that no longer exist (e.g. deletions)
if [ ! -f "$file" ]; then
echo " → (skipped; not a file) $file"
continue
fi
# Remove 'browser_tests/' prefix
[ -f "$file" ] || continue
file_without_prefix="${file#browser_tests/}"
# Create parent directories
mkdir -p "/tmp/changed_snapshots_shard/$(dirname "$file_without_prefix")"
# Copy file
cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix"
echo " → $file_without_prefix"
done <<< "$changed_files"
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider adding error handling for cp command.

While the script uses set -euo pipefail, the cp command on line 147 could fail silently if the destination directory creation fails. The mkdir -p on line 146 should handle this, but consider adding explicit error messages.

🔎 Proposed improvement
           while IFS= read -r file; do
             [ -f "$file" ] || continue
             file_without_prefix="${file#browser_tests/}"
-            mkdir -p "/tmp/changed_snapshots_shard/$(dirname "$file_without_prefix")"
-            cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix"
+            dest_dir="/tmp/changed_snapshots_shard/$(dirname "$file_without_prefix")"
+            mkdir -p "$dest_dir" || { echo "Failed to create $dest_dir"; exit 1; }
+            cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix" || { echo "Failed to copy $file"; exit 1; }
           done <<< "$changed_files"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Copy changed files to staging directory
mkdir -p /tmp/changed_snapshots_shard
# Copy only changed files, preserving directory structure
# Strip 'browser_tests/' prefix to avoid double nesting
echo "Copying changed files to staging directory..."
while IFS= read -r file; do
# Skip paths that no longer exist (e.g. deletions)
if [ ! -f "$file" ]; then
echo " → (skipped; not a file) $file"
continue
fi
# Remove 'browser_tests/' prefix
[ -f "$file" ] || continue
file_without_prefix="${file#browser_tests/}"
# Create parent directories
mkdir -p "/tmp/changed_snapshots_shard/$(dirname "$file_without_prefix")"
# Copy file
cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix"
echo " → $file_without_prefix"
done <<< "$changed_files"
# Copy changed files to staging directory
mkdir -p /tmp/changed_snapshots_shard
while IFS= read -r file; do
[ -f "$file" ] || continue
file_without_prefix="${file#browser_tests/}"
dest_dir="/tmp/changed_snapshots_shard/$(dirname "$file_without_prefix")"
mkdir -p "$dest_dir" || { echo "Failed to create $dest_dir"; exit 1; }
cp "$file" "/tmp/changed_snapshots_shard/$file_without_prefix" || { echo "Failed to copy $file"; exit 1; }
done <<< "$changed_files"
🤖 Prompt for AI Agents
.github/workflows/pr-update-playwright-expectations.yaml around lines 141 to
148: the cp command may fail (e.g., if destination creation unexpectedly fails)
without a clear error message; after each cp "$file"
"/tmp/changed_snapshots_shard/$file_without_prefix" check its exit status and on
failure print a descriptive error to stderr including the source and destination
paths and exit non‑zero (for example, use a conditional or || handler to echo
"Failed to copy $file to /tmp/changed_snapshots_shard/$file_without_prefix" >&2
and exit 1).

@DrJKL DrJKL added the New Browser Test Expectations New browser test screenshot should be set by github action label Dec 30, 2025
@github-actions
Copy link

Updating Playwright Expectations

@github-actions github-actions bot removed the New Browser Test Expectations New browser test screenshot should be set by github action label Dec 30, 2025
@Myestery Myestery merged commit 3372f45 into main Dec 30, 2025
3 checks passed
@Myestery Myestery deleted the ci/playwright-docker-containers branch December 30, 2025 03:58
@christian-byrne christian-byrne added needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch core/1.36 Backport PRs for core 1.36 cloud/1.36 Backport PRs for cloud 1.36 labels Jan 13, 2026
github-actions bot pushed a commit that referenced this pull request Jan 13, 2026
## Summary
Use a pre-built container image with all dependencies for Playwright E2E
tests, eliminating ~130s setup time per shard.

## Changes
- Use `ghcr.io/comfy-org/comfyui-ci-container:0.0.8` container for test
jobs
- Container includes: Playwright browsers, Node.js, pnpm, Python,
ComfyUI backend (v0.5.1), all Python deps
- Simplified setup: just copy devtools and start server (no cloning, no
pip install, no browser setup)
- Add `version-bump*` to `branches-ignore` to skip E2E tests for version
bump PRs
- Replace cache with artifacts (cache doesn't work inside containers)

## Benefits
- ~130s faster per shard (no ComfyUI clone, no pip install, no browser
download)
- Consistent environment across all test jobs
- Simpler workflow configuration

## Container Image
Repository: https://github.com/comfy-org/comfyui-ci-container
Image: `ghcr.io/comfy-org/comfyui-ci-container:0.0.8`

## Test plan
- [x] Verify CI workflow runs with container
- [x] Verify Playwright tests pass
- [x] Verify snapshot updates work correctly

---------

Co-authored-by: github-actions <[email protected]>
@comfy-pr-bot
Copy link
Member

@Myestery Successfully backported to #7982

@github-actions github-actions bot removed the needs-backport Fix/change that needs to be cherry-picked to the current feature freeze branch label Jan 13, 2026
github-actions bot pushed a commit that referenced this pull request Jan 13, 2026
## Summary
Use a pre-built container image with all dependencies for Playwright E2E
tests, eliminating ~130s setup time per shard.

## Changes
- Use `ghcr.io/comfy-org/comfyui-ci-container:0.0.8` container for test
jobs
- Container includes: Playwright browsers, Node.js, pnpm, Python,
ComfyUI backend (v0.5.1), all Python deps
- Simplified setup: just copy devtools and start server (no cloning, no
pip install, no browser setup)
- Add `version-bump*` to `branches-ignore` to skip E2E tests for version
bump PRs
- Replace cache with artifacts (cache doesn't work inside containers)

## Benefits
- ~130s faster per shard (no ComfyUI clone, no pip install, no browser
download)
- Consistent environment across all test jobs
- Simpler workflow configuration

## Container Image
Repository: https://github.com/comfy-org/comfyui-ci-container
Image: `ghcr.io/comfy-org/comfyui-ci-container:0.0.8`

## Test plan
- [x] Verify CI workflow runs with container
- [x] Verify Playwright tests pass
- [x] Verify snapshot updates work correctly

---------

Co-authored-by: github-actions <[email protected]>
@comfy-pr-bot
Copy link
Member

@Myestery Successfully backported to #7983

christian-byrne pushed a commit that referenced this pull request Jan 13, 2026
Backport of #7625 to `core/1.36`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7982-backport-core-1-36-CI-Use-custom-container-for-E2E-tests-2e76d73d36508150a21de5f6f1e0a49f)
by [Unito](https://www.unito.io)

Co-authored-by: Johnpaul Chiwetelu <[email protected]>
Co-authored-by: github-actions <[email protected]>
christian-byrne pushed a commit that referenced this pull request Jan 13, 2026
Backport of #7625 to `cloud/1.36`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7983-backport-cloud-1-36-CI-Use-custom-container-for-E2E-tests-2e76d73d365081608f74da4b8add041e)
by [Unito](https://www.unito.io)

Co-authored-by: Johnpaul Chiwetelu <[email protected]>
Co-authored-by: github-actions <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cloud/1.36 Backport PRs for cloud 1.36 core/1.36 Backport PRs for core 1.36 size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants