mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Betterer: Expose results as JSON (#81352)
* Expose betterer results as JSON * Make prettier and add command * Add aggregation * Add json generation to lefthook * Use relative path * Add grafanabot as codeowner * Fix parameter type * Include changes to results * Run betterer:json
This commit is contained in:
8270
.betterer.results.json
Normal file
8270
.betterer.results.json
Normal file
File diff suppressed because it is too large
Load Diff
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@@ -531,6 +531,7 @@
|
||||
.pa11yci.conf.js @grafana/grafana-frontend-platform
|
||||
.pa11yci-pr.conf.js @grafana/grafana-frontend-platform
|
||||
.betterer.results @grafanabot
|
||||
.betterer.results.json @grafanabot
|
||||
.betterer.ts @grafana/grafana-frontend-platform
|
||||
|
||||
# @grafana/ui component documentation
|
||||
|
||||
@@ -12,7 +12,9 @@ pre-commit:
|
||||
commands:
|
||||
frontend-betterer:
|
||||
glob: '*.{ts,tsx}'
|
||||
run: yarn betterer precommit {staged_files}
|
||||
run: |
|
||||
yarn betterer precommit {staged_files}
|
||||
yarn betterer:json
|
||||
stage_fixed: true
|
||||
|
||||
frontend-lint:
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
"i18n:pseudo": "node ./public/locales/pseudo.js",
|
||||
"i18n:stats": "node ./scripts/cli/reportI18nStats.mjs",
|
||||
"betterer": "betterer",
|
||||
"betterer:json": "ts-node --transpile-only --project ./scripts/cli/tsconfig.json ./scripts/cli/bettererResultsToJson.ts",
|
||||
"betterer:merge": "betterer merge",
|
||||
"betterer:stats": "ts-node --transpile-only --project ./scripts/cli/tsconfig.json ./scripts/cli/reportBettererStats.ts",
|
||||
"betterer:issues": "ts-node --transpile-only --project ./scripts/cli/tsconfig.json ./scripts/cli/generateBettererIssues.ts",
|
||||
|
||||
42
scripts/cli/bettererResultsToJson.ts
Normal file
42
scripts/cli/bettererResultsToJson.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { BettererFileIssue, betterer } from '@betterer/betterer';
|
||||
import { writeFile } from 'fs/promises';
|
||||
|
||||
interface Issue {
|
||||
message: string;
|
||||
count: string;
|
||||
}
|
||||
|
||||
type ResultMap = Record<string, Record<string, Issue[]>>;
|
||||
|
||||
/**
|
||||
* Produces a JSON file for consumption directly in Grafana
|
||||
*/
|
||||
async function main() {
|
||||
const results = await betterer.results();
|
||||
const resultMap: ResultMap = {};
|
||||
|
||||
for (const suite of results.resultSummaries) {
|
||||
resultMap[suite.name] = {};
|
||||
|
||||
// Aggregate issues for each file in the suite
|
||||
for (const [file, details] of Object.entries(suite.details)) {
|
||||
const fileIssues: Issue[] = [];
|
||||
for (const issue of details) {
|
||||
const issueExists = fileIssues.find((i) => i.message === issue.message)!!;
|
||||
if (issueExists) {
|
||||
continue;
|
||||
}
|
||||
fileIssues.push({
|
||||
message: issue.message,
|
||||
count: details.filter((i: BettererFileIssue) => i.message === issue.message).length,
|
||||
});
|
||||
}
|
||||
const relativePath = file.replace(process.cwd(), '');
|
||||
resultMap[suite.name][relativePath] = fileIssues;
|
||||
}
|
||||
}
|
||||
|
||||
await writeFile('.betterer.results.json', JSON.stringify(resultMap, undefined, 2));
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
Reference in New Issue
Block a user