[PR #16] [MERGED] Add a Frontend tab for ComfyUI_frontend CI, perf and the custom-nodes gate #18

Closed
opened 2026-10-31 22:06:03 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfyci-dashboard/pull/16
Author: @marawan206
Created: 10/19/2026
Status: ✅ Merged
Merged: 10/19/2026
Merged by: @marawan206

Base: main ← Head: frontend-tab


📝 Commits (1)

  • e11e31a Add a Frontend tab for ComfyUI_frontend CI, perf and the custom-nodes gate

📊 Changes

28 files changed (+2312 additions, -48 deletions)

View changed files

📝 .env.local.example (+4 -0)
📝 README.md (+4 -0)
➕ components/Dot.tsx (+148 -0)
📝 components/Header.tsx (+5 -2)
📝 components/StatsDashboard.tsx (+1 -1)
📝 components/WorkflowDots.tsx (+6 -36)
➕ components/frontend/CiMainTable.tsx (+368 -0)
➕ components/frontend/CustomNodesSection.tsx (+310 -0)
➕ components/frontend/FreshnessBanner.tsx (+66 -0)
➕ components/frontend/FrontendKpis.tsx (+172 -0)
➕ components/frontend/PerfBadge.tsx (+57 -0)
➕ components/frontend/PerfScenarioCard.tsx (+158 -0)
➕ components/frontend/PerfSection.tsx (+188 -0)
➕ components/frontend/SectionState.tsx (+46 -0)
➕ pages/frontend/index.tsx (+47 -0)
➕ public/fixtures/frontend/ci/custom-nodes.json (+1 -0)
➕ public/fixtures/frontend/ci/main.json (+1 -0)
➕ public/fixtures/frontend/ci/main/2026-10.json (+1 -0)
➕ public/fixtures/frontend/perf/2026-10.json (+1 -0)
➕ public/fixtures/frontend/perf/head.json (+1 -0)

...and 8 more files

📄 Description

What

A Frontend tab (/frontend, linked in the header) that shows ComfyUI_frontend's CI the way the Regression tab shows core's, reading only the static JSON that comfyci-runpod-worker's new frontend-index publisher writes under frontend/ on the results branch (Comfy-Org/comfyci-runpod-worker#12). No token, no server code, no deployment change.

Top to bottom:

  1. KPIs: main at HEAD (core suites passing, running count while a push is in flight), perf regressions in the latest baseline with the scenario names, and the custom-nodes gate (clean shards, proofs held, "failing since ( days)" when red, the pinned core commit).
  2. Freshness banner: when the publisher last ran; amber after two hours or when a file is missing; "publisher has not run yet" before the first tick.
  3. CI on main: commits x workflows as dots (success, failure, cancelled, skipped, in progress, no run), grouped core / website / billing / validation / other, each dot linking to its run; attempt markers; the open failing chain per column in the header; 25 rows per page with older months loaded on demand.
  4. Perf baselines: a metric selector (the frontend's 12 reported metrics, from the data), one card per scenario with a sparkline over the loaded baselines, the latest median and the frontend's own verdict (regression / improvement / noisy / neutral / insufficient); scenarios needing attention expand by default, the rest fold into a list. The p5 fps target line is drawn on the frame-time metrics.
  5. Custom-nodes gate: the last 90 runs as a grid of clean shards (the real gate) with the verdict job row, and a separate grid for the detection proofs, labelled as such (green = the planted break was caught). Dispatch runs are marked D. The streak sentence sits above the grid.

Implementation

  • src/regression/client.ts only gains exports (fetchJsonOrNull, resultUrlFor, staticQueryFor, useStaticJsonFor); the regression hooks are unchanged. src/frontend/client.ts reads NEXT_PUBLIC_FRONTEND_BASE (default: the results branch via raw.githubusercontent.com) and validates every sha, run id, PR number, month and pin before it reaches a URL.
  • src/frontend/types.ts mirrors the published schemas; src/frontend/fixtures.check.ts type-checks the checked-in samples against them, so a renamed key fails tsc and next build instead of the live page.
  • components/Dot.tsx holds the dot shapes; WorkflowDots.tsx now imports them, with no visual change on the regression pages. StatCard.sub accepts nodes so a KPI line can carry a link.
  • public/fixtures/frontend/** is the publisher's own dry-run output (bot author logins replaced by merge-bot); NEXT_PUBLIC_FRONTEND_BASE=/fixtures/frontend pnpm dev renders it. The README says how to regenerate.
  • The header nav now scrolls inside its pill on narrow screens instead of widening the page (four links no longer fit at 390 px).

Verification

  • npx tsc --noEmit, pnpm lint, pnpm build pass; /frontend is a 15 kB static page.
  • Rendered in fixture mode at 1600 px in dark mode with the publisher's real data (82 commits, 20 baselines, 90 gate runs); light mode checked.
  • At a 386 px viewport (measured inside an iframe, since the window here cannot shrink that far): no horizontal page scroll, KPI cards stack, the CI table and both gate grids scroll inside their containers, the nav scrolls inside its pill.
  • The publisher's first backfill is already on the results branch, so the Vercel preview renders live data: https://comfyci-git-frontend-tab-comfyui.vercel.app/frontend (2,591 main commits over 90 days, 20 perf baselines, 90 gate runs with the 45-day red streak). Before that push the preview showed the "publisher has not run yet" state as designed.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/comfyci-dashboard/pull/16 **Author:** [@marawan206](https://github.com/marawan206) **Created:** 10/19/2026 **Status:** ✅ Merged **Merged:** 10/19/2026 **Merged by:** [@marawan206](https://github.com/marawan206) **Base:** `main` ← **Head:** `frontend-tab` --- ### 📝 Commits (1) - [`e11e31a`](https://github.com/Comfy-Org/comfyci-dashboard/commit/e11e31a7330dd62c45cfc5d79251fef7d94a1838) Add a Frontend tab for ComfyUI_frontend CI, perf and the custom-nodes gate ### 📊 Changes **28 files changed** (+2312 additions, -48 deletions) <details> <summary>View changed files</summary> 📝 `.env.local.example` (+4 -0) 📝 `README.md` (+4 -0) ➕ `components/Dot.tsx` (+148 -0) 📝 `components/Header.tsx` (+5 -2) 📝 `components/StatsDashboard.tsx` (+1 -1) 📝 `components/WorkflowDots.tsx` (+6 -36) ➕ `components/frontend/CiMainTable.tsx` (+368 -0) ➕ `components/frontend/CustomNodesSection.tsx` (+310 -0) ➕ `components/frontend/FreshnessBanner.tsx` (+66 -0) ➕ `components/frontend/FrontendKpis.tsx` (+172 -0) ➕ `components/frontend/PerfBadge.tsx` (+57 -0) ➕ `components/frontend/PerfScenarioCard.tsx` (+158 -0) ➕ `components/frontend/PerfSection.tsx` (+188 -0) ➕ `components/frontend/SectionState.tsx` (+46 -0) ➕ `pages/frontend/index.tsx` (+47 -0) ➕ `public/fixtures/frontend/ci/custom-nodes.json` (+1 -0) ➕ `public/fixtures/frontend/ci/main.json` (+1 -0) ➕ `public/fixtures/frontend/ci/main/2026-10.json` (+1 -0) ➕ `public/fixtures/frontend/perf/2026-10.json` (+1 -0) ➕ `public/fixtures/frontend/perf/head.json` (+1 -0) _...and 8 more files_ </details> ### 📄 Description ## What A **Frontend** tab (`/frontend`, linked in the header) that shows ComfyUI_frontend's CI the way the Regression tab shows core's, reading only the static JSON that comfyci-runpod-worker's new `frontend-index` publisher writes under `frontend/` on the results branch (Comfy-Org/comfyci-runpod-worker#12). No token, no server code, no deployment change. Top to bottom: 1. **KPIs**: main at HEAD (core suites passing, running count while a push is in flight), perf regressions in the latest baseline with the scenario names, and the custom-nodes gate (clean shards, proofs held, "failing since <date> (<n> days)" when red, the pinned core commit). 2. **Freshness banner**: when the publisher last ran; amber after two hours or when a file is missing; "publisher has not run yet" before the first tick. 3. **CI on main**: commits x workflows as dots (success, failure, cancelled, skipped, in progress, no run), grouped core / website / billing / validation / other, each dot linking to its run; attempt markers; the open failing chain per column in the header; 25 rows per page with older months loaded on demand. 4. **Perf baselines**: a metric selector (the frontend's 12 reported metrics, from the data), one card per scenario with a sparkline over the loaded baselines, the latest median and the frontend's own verdict (regression / improvement / noisy / neutral / insufficient); scenarios needing attention expand by default, the rest fold into a list. The p5 fps target line is drawn on the frame-time metrics. 5. **Custom-nodes gate**: the last 90 runs as a grid of clean shards (the real gate) with the verdict job row, and a separate grid for the detection proofs, labelled as such (green = the planted break was caught). Dispatch runs are marked `D`. The streak sentence sits above the grid. ## Implementation - `src/regression/client.ts` only gains exports (`fetchJsonOrNull`, `resultUrlFor`, `staticQueryFor`, `useStaticJsonFor`); the regression hooks are unchanged. `src/frontend/client.ts` reads `NEXT_PUBLIC_FRONTEND_BASE` (default: the results branch via raw.githubusercontent.com) and validates every sha, run id, PR number, month and pin before it reaches a URL. - `src/frontend/types.ts` mirrors the published schemas; `src/frontend/fixtures.check.ts` type-checks the checked-in samples against them, so a renamed key fails `tsc` and `next build` instead of the live page. - `components/Dot.tsx` holds the dot shapes; `WorkflowDots.tsx` now imports them, with no visual change on the regression pages. `StatCard.sub` accepts nodes so a KPI line can carry a link. - `public/fixtures/frontend/**` is the publisher's own dry-run output (bot author logins replaced by `merge-bot`); `NEXT_PUBLIC_FRONTEND_BASE=/fixtures/frontend pnpm dev` renders it. The README says how to regenerate. - The header nav now scrolls inside its pill on narrow screens instead of widening the page (four links no longer fit at 390 px). ## Verification - `npx tsc --noEmit`, `pnpm lint`, `pnpm build` pass; `/frontend` is a 15 kB static page. - Rendered in fixture mode at 1600 px in dark mode with the publisher's real data (82 commits, 20 baselines, 90 gate runs); light mode checked. - At a 386 px viewport (measured inside an iframe, since the window here cannot shrink that far): no horizontal page scroll, KPI cards stack, the CI table and both gate grids scroll inside their containers, the nav scrolls inside its pill. - The publisher's first backfill is already on the results branch, so the Vercel preview renders live data: https://comfyci-git-frontend-tab-comfyui.vercel.app/frontend (2,591 main commits over 90 days, 20 perf baselines, 90 gate runs with the 45-day red streak). Before that push the preview showed the "publisher has not run yet" state as designed. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 22:06:03 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfyci-dashboard#18
No description provided.