mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
32 lines
1.6 KiB
JavaScript
32 lines
1.6 KiB
JavaScript
#!/usr/bin/env node
|
|
import { appendFileSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
import { dirname, resolve } from 'node:path';
|
|
import { evaluatePerformanceBudget, performanceSummaryMarkdown } from './evaluate.mjs';
|
|
|
|
const valueArg = (name) => process.argv.find((arg) => arg.startsWith(`--${name}=`))?.slice(name.length + 3);
|
|
const absoluteOnly = process.argv.includes('--absolute-only');
|
|
const candidatePath = resolve(valueArg('candidate') ?? 'artifacts/performance/candidate.json');
|
|
const baselinePath = resolve(valueArg('baseline') ?? 'artifacts/performance/baseline.json');
|
|
const budgetsPath = resolve(valueArg('budgets') ?? 'demo/performance/budgets.json');
|
|
const outputPath = resolve(valueArg('output') ?? 'artifacts/performance/comparison.json');
|
|
|
|
const readJson = (path) => JSON.parse(readFileSync(path, 'utf8'));
|
|
const evaluation = evaluatePerformanceBudget({
|
|
candidate: readJson(candidatePath),
|
|
baseline: absoluteOnly ? null : readJson(baselinePath),
|
|
budgets: readJson(budgetsPath),
|
|
absoluteOnly,
|
|
candidateSha: valueArg('candidate-sha') || null,
|
|
baselineSha: valueArg('baseline-sha') || null,
|
|
});
|
|
|
|
mkdirSync(dirname(outputPath), { recursive: true });
|
|
writeFileSync(outputPath, `${JSON.stringify(evaluation, null, 2)}\n`, 'utf8');
|
|
const markdown = performanceSummaryMarkdown(evaluation);
|
|
process.stdout.write(markdown);
|
|
if (process.env.GITHUB_STEP_SUMMARY) appendFileSync(process.env.GITHUB_STEP_SUMMARY, markdown, 'utf8');
|
|
if (!evaluation.pass) {
|
|
console.error(`Performance budget failed: ${evaluation.failures.map((item) => item.id).join(', ')}`);
|
|
process.exitCode = 1;
|
|
}
|