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
pull/82441/head
Tobias Skarhed 1 year ago committed by GitHub
parent 4cbc7dfb5b
commit 6ce286246b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 8270
      .betterer.results.json
  2. 1
      .github/CODEOWNERS
  3. 4
      lefthook.yml
  4. 1
      package.json
  5. 42
      scripts/cli/bettererResultsToJson.ts

File diff suppressed because it is too large Load Diff

@ -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",

@ -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);
Loading…
Cancel
Save