mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-14 23:21:35 +00:00
* feat(ui): track frontend lint counts in a committed snapshot Persist the eslint budget-rule counts (no-explicit-any, complexity, max-depth) to eslint-metrics.json so the trend is queryable straight from git history and can later feed a dashboard. A CI drift check regenerated from the same lint report keeps the snapshot honest, so a PR that shifts a count has to run npm run lint:metrics and commit it * fix(ui): harden lint-metrics drift check and eslint failure handling Make the drift comparison symmetric over the union of committed and actual keys so a phantom rule left in eslint-metrics.json (for example after a rule is dropped from eslint-budgets.json) is caught instead of silently passing. Only swallow eslint's lint-errors exit code in the generator and rethrow anything else, so a fatal eslint failure surfaces its real output rather than a confusing ENOENT on the missing report
25 lines
919 B
JavaScript
25 lines
919 B
JavaScript
import { execSync } from "child_process";
|
|
import { mkdtempSync, readFileSync, writeFileSync, rmSync } from "fs";
|
|
import { tmpdir } from "os";
|
|
import { join } from "path";
|
|
import { countBudgetViolations } from "./lint-budget-lib.mjs";
|
|
|
|
const ESLINT_EXIT_LINT_ERRORS = 1;
|
|
|
|
const budgets = JSON.parse(readFileSync("eslint-budgets.json", "utf8"));
|
|
const dir = mkdtempSync(join(tmpdir(), "litellm-lint-"));
|
|
const reportPath = join(dir, "report.json");
|
|
|
|
try {
|
|
execSync(`npx eslint . -f json -o "${reportPath}"`, { stdio: "inherit" });
|
|
} catch (err) {
|
|
if (err.status !== ESLINT_EXIT_LINT_ERRORS) throw err;
|
|
}
|
|
|
|
const report = JSON.parse(readFileSync(reportPath, "utf8"));
|
|
rmSync(dir, { recursive: true, force: true });
|
|
|
|
const metrics = countBudgetViolations(report, budgets);
|
|
writeFileSync("eslint-metrics.json", JSON.stringify(metrics, null, 2) + "\n");
|
|
console.log("Updated eslint-metrics.json");
|
|
console.table(metrics);
|