mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-19 22:09:37 +00:00
## Summary Replaces two separate PR comment workflows (bundle size + performance) with a single unified report that posts one combined comment per PR. ## Changes - **What**: New `pr-report.yaml` aggregator workflow triggers on both `CI: Size Data` and `CI: Performance Report` completions. Finds sibling workflow runs by PR head SHA. Renders combined report via `unified-report.js` (shells out to existing `size-report.js` and `perf-report.ts`). Sections show "pending" or "failed" placeholders when data is unavailable. - **Breaking**: Removes `pr-size-report.yaml` and `pr-perf-report.yaml`. Legacy `<!-- COMFYUI_FRONTEND_SIZE -->` and `<!-- COMFYUI_FRONTEND_PERF -->` comments are auto-cleaned on first run. - **Dependencies**: None ## Review Focus - Concurrency key uses `head_sha` so the later-completing workflow cancels the earlier report run, ensuring the final comment always has both sections. - Stale-run guard: verifies workflow_run SHA matches the live PR head before posting. - The `workflow_dispatch` re-trigger path from `pr-size-report.yaml` is not carried forward — the unified workflow handles re-trigger naturally via its dual-trigger design. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9911-feat-unified-PR-report-combining-bundle-size-and-runtime-perf-3236d73d365081baac1cce6f0d9244ac) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com>
76 lines
2.0 KiB
JavaScript
76 lines
2.0 KiB
JavaScript
// @ts-check
|
|
import { execFileSync } from 'node:child_process'
|
|
import { existsSync } from 'node:fs'
|
|
|
|
const args = process.argv.slice(2)
|
|
|
|
/** @param {string} name */
|
|
function getArg(name) {
|
|
const prefix = `--${name}=`
|
|
const arg = args.find((a) => a.startsWith(prefix))
|
|
return arg ? arg.slice(prefix.length) : undefined
|
|
}
|
|
|
|
const sizeStatus = getArg('size-status') ?? 'pending'
|
|
const perfStatus = getArg('perf-status') ?? 'pending'
|
|
|
|
/** @type {string[]} */
|
|
const lines = []
|
|
|
|
// --- Size section ---
|
|
if (sizeStatus === 'ready') {
|
|
try {
|
|
const sizeReport = execFileSync('node', ['scripts/size-report.js'], {
|
|
encoding: 'utf-8'
|
|
}).trimEnd()
|
|
lines.push(sizeReport)
|
|
} catch {
|
|
lines.push('## 📦 Bundle Size')
|
|
lines.push('')
|
|
lines.push(
|
|
'> ⚠️ Failed to render bundle size report. Check the CI workflow logs.'
|
|
)
|
|
}
|
|
} else if (sizeStatus === 'failed') {
|
|
lines.push('## 📦 Bundle Size')
|
|
lines.push('')
|
|
lines.push('> ⚠️ Size data collection failed. Check the CI workflow logs.')
|
|
} else {
|
|
lines.push('## 📦 Bundle Size')
|
|
lines.push('')
|
|
lines.push('> ⏳ Size data collection in progress…')
|
|
}
|
|
|
|
lines.push('')
|
|
|
|
// --- Perf section ---
|
|
if (perfStatus === 'ready' && existsSync('test-results/perf-metrics.json')) {
|
|
try {
|
|
const perfReport = execFileSync(
|
|
'pnpm',
|
|
['exec', 'tsx', 'scripts/perf-report.ts'],
|
|
{ encoding: 'utf-8' }
|
|
).trimEnd()
|
|
lines.push(perfReport)
|
|
} catch {
|
|
lines.push('## ⚡ Performance')
|
|
lines.push('')
|
|
lines.push(
|
|
'> ⚠️ Failed to render performance report. Check the CI workflow logs.'
|
|
)
|
|
}
|
|
} else if (
|
|
perfStatus === 'failed' ||
|
|
(perfStatus === 'ready' && !existsSync('test-results/perf-metrics.json'))
|
|
) {
|
|
lines.push('## ⚡ Performance')
|
|
lines.push('')
|
|
lines.push('> ⚠️ Performance tests failed. Check the CI workflow logs.')
|
|
} else {
|
|
lines.push('## ⚡ Performance')
|
|
lines.push('')
|
|
lines.push('> ⏳ Performance tests in progress…')
|
|
}
|
|
|
|
process.stdout.write(lines.join('\n') + '\n')
|