Skip to content

Commit 2e89c37

Browse files
committed
Merge remote-tracking branch 'origin/main' into dante/resolve-pr-15403-20260821
Amp-Thread-ID: https://ampcode.com/threads/T-01a02479-3fb4-70b8-886b-39205e4a7c4d Co-authored-by: Amp <amp@ampcode.com> # Conflicts: # src/platform/cloud/subscription/composables/useBillingPolicyState.ts
2 parents 32c7f10 + 28bd73a commit 2e89c37

72 files changed

Lines changed: 10060 additions & 138 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/setup-frontend/action.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ inputs:
55
description: 'Include the build step to build the frontend. Set to true for workflows that need a built frontend'
66
required: false
77
default: 'false'
8+
node_cache:
9+
description: "Share the lockfile-keyed pnpm store cache. Set to 'false' in jobs that execute unreviewed third-party code: setup-node's post step writes the store AFTER the job body, and the same key is restored by the publish workflows, which hold NPM_TOKEN, PYPI_TOKEN and id-token: write."
10+
required: false
11+
default: 'true'
812
runs:
913
using: 'composite'
1014
steps:
@@ -18,7 +22,7 @@ runs:
1822
uses: actions/setup-node@v6
1923
with:
2024
node-version-file: '.nvmrc'
21-
cache: 'pnpm'
25+
cache: ${{ inputs.node_cache == 'true' && 'pnpm' || '' }}
2226
cache-dependency-path: './pnpm-lock.yaml'
2327

2428
- name: Install dependencies

.github/workflows/ci-ecosystem-matrix.yaml

Lines changed: 500 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# Bump the ecosystem matrix's corpus pins.
2+
#
3+
# Manual only, and that is the design. scripts/registry-census/corpus.pins.json
4+
# names the exact commit of every registry pack the matrix measures, so the
5+
# gate is a constant: a pack author pushing a bug cannot red an unrelated PR.
6+
# The cost of that is that pack breakage is invisible until someone bumps the
7+
# pins - so this workflow opens the PR where a whole month of ecosystem churn
8+
# lands at once, reviewed, by someone who expected it.
9+
#
10+
# A red on THAT pr means the ecosystem moved. A red anywhere else means the
11+
# diff did. Keeping those two apart is the entire point.
12+
name: 'Update corpus pins'
13+
14+
on:
15+
workflow_dispatch:
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
update-pins:
22+
if: github.repository == 'Comfy-Org/ComfyUI_frontend'
23+
runs-on: ubuntu-latest
24+
timeout-minutes: 45
25+
permissions:
26+
contents: write
27+
pull-requests: write
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v7
31+
32+
- name: Setup Python
33+
uses: actions/setup-python@v6
34+
with:
35+
python-version: '3.11'
36+
37+
- name: Report the pins being replaced
38+
run: python3 scripts/registry-census/pins.py
39+
40+
- name: Refresh registry snapshot
41+
run: python3 scripts/registry-census/refresh_registry.py
42+
43+
# git ls-remote, not the REST API: ~5,100 packs would exhaust the
44+
# authenticated 5,000/hour REST budget in a single run.
45+
- name: Resolve every pack to a commit
46+
run: python3 scripts/registry-census/fetch_corpus.py --write-pins --workers 32
47+
48+
- name: Summarize the bump
49+
id: summary
50+
run: |
51+
set -euo pipefail
52+
python3 - <<'PY' >> "$GITHUB_STEP_SUMMARY"
53+
import json, subprocess
54+
path = 'scripts/registry-census/corpus.pins.json'
55+
new = json.load(open(path))['packs']
56+
old = json.loads(
57+
subprocess.run(['git', 'show', f'HEAD:{path}'],
58+
capture_output=True, text=True).stdout or '{"packs":{}}'
59+
)['packs']
60+
moved = sorted(k for k in new.keys() & old.keys() if new[k] != old[k])
61+
added = sorted(new.keys() - old.keys())
62+
dropped = sorted(old.keys() - new.keys())
63+
print(f'## Corpus pin bump\n')
64+
print(f'- {len(new)} packs pinned')
65+
print(f'- {len(moved)} moved, {len(added)} added, {len(dropped)} dropped\n')
66+
if moved:
67+
print('<details><summary>moved</summary>\n')
68+
print('\n'.join(f'- `{k}` {old[k][:8]} -> {new[k][:8]}' for k in moved))
69+
print('\n</details>')
70+
PY
71+
72+
- name: Open the bump PR
73+
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7.0.11
74+
with:
75+
branch: chore/corpus-pins
76+
commit-message: 'chore: bump ecosystem matrix corpus pins'
77+
title: 'chore: bump ecosystem matrix corpus pins'
78+
body: |
79+
Regenerates `scripts/registry-census/corpus.pins.json`, which names the
80+
exact commit of every registry pack the ecosystem matrix measures.
81+
82+
**A red `CI: Ecosystem Matrix` on this PR means the ecosystem moved, not
83+
that this diff broke something.** That is what this PR is for. Read the
84+
verdict's breached criterion and the per-pack signature drift, decide
85+
whether it is real breakage worth an upstream issue or acceptable churn,
86+
and merge either way — leaving the pins stale is strictly worse, because
87+
it makes the gate measure an ecosystem that no longer exists.
88+
89+
See the step summary on the triggering run for the moved/added/dropped
90+
breakdown.
91+
add-paths: scripts/registry-census/corpus.pins.json

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,10 @@ vitest.config.*.timestamp*
9898
# Weekly docs check output
9999
/output.txt
100100

101-
.amp
101+
.amp
102+
# Registry census working tree (scripts/registry-census) - corpus, lockfile, results
103+
.census/
104+
# Ecosystem matrix fixture (scripts/registry-census/build_matrix.py) - generated per-pack specs
105+
src/__ecs_matrix__/
106+
# Per-pack result rows written by a local detection-proof run
107+
matrix-proof/

.oxfmtrc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
"ignorePatterns": [
99
"packages/registry-types/src/comfyRegistryTypes.ts",
1010
"public/materialdesignicons.min.css",
11+
"scripts/registry-census/corpus.pins.json",
12+
"scripts/registry-census/detection-proof/**",
13+
"src/__ecs_matrix__/**",
1114
"src/types/generatedManagerTypes.ts",
1215
"src/locales/**/*.json",
1316
"**/__fixtures__/**/*.json",

.oxlintrc.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"dist/*",
99
"packages/registry-types/src/comfyRegistryTypes.ts",
1010
"playwright-report/*",
11+
"scripts/registry-census/detection-proof/**",
12+
"src/__ecs_matrix__/**",
1113
"src/extensions/core/*",
1214
"src/scripts/*",
1315
"src/types/generatedManagerTypes.ts",

browser_tests/fixtures/data/subscriptionFixtures.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ export function createSubscriptionStatus(
1313
subscription_tier: 'FREE',
1414
has_funds: false,
1515
billing_rail: 'legacy_stripe',
16+
max_seats: 0,
17+
occupied_seats: 0,
18+
team_credit_stop: null,
1619
...overrides
1720
}
1821
}

browser_tests/fixtures/helpers/CanvasHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export class CanvasHelper {
121121
*/
122122
async mouseDblclickAt(position: Position): Promise<void> {
123123
const abs = await this.toAbsolute(position)
124-
await this.page.mouse.dblclick(abs.x, abs.y)
124+
await this.page.mouse.dblclick(abs.x, abs.y, { delay: 5 })
125125
await nextFrame(this.page)
126126
}
127127

browser_tests/fixtures/helpers/DragDropHelper.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ export class DragDropHelper {
156156

157157
async dragAndDropFile(
158158
fileName: string,
159-
options: { dropPosition?: Position; waitForUpload?: boolean } = {}
159+
options: {
160+
dropPosition?: Position
161+
waitForUpload?: boolean
162+
preserveNativePropagation?: boolean
163+
} = {}
160164
): Promise<void> {
161165
return this.dragAndDropExternalResource({ fileName, ...options })
162166
}

browser_tests/fixtures/helpers/WorkflowHelper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { readFileSync } from 'fs'
22

3-
import { test } from '@playwright/test'
3+
import { expect, test } from '@playwright/test'
44

55
import type { AppMode } from '@/utils/appMode'
66
import type {
@@ -118,7 +118,7 @@ export class WorkflowHelper {
118118
await this.comfyPage.workflowUploadInput.setInputFiles(
119119
assetPath(`${workflowName}.json`)
120120
)
121-
await this.waitForWorkflowIdle()
121+
await expect(this.comfyPage.workflowUploadInput).toHaveValue('')
122122
await this.comfyPage.nextFrame()
123123
if (test.info().tags.includes('@vue-nodes')) {
124124
await this.comfyPage.vueNodes.waitForNodes()

0 commit comments

Comments
 (0)