mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 13:09:22 -06:00
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
import { betterer } from '@betterer/betterer';
|
|
import { writeFile } from 'fs/promises';
|
|
|
|
interface FilesByIssues {
|
|
name: string;
|
|
files: [
|
|
{
|
|
path: string;
|
|
count: number;
|
|
},
|
|
];
|
|
}
|
|
type ResultMap = Record<string, FilesByIssues[]>;
|
|
|
|
/**
|
|
* 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] = [];
|
|
const filesByIssues: FilesByIssues[] = [];
|
|
// Group by message in the suite, then by file counting the number of occurrences
|
|
for (const [file, details] of Object.entries(suite.details)) {
|
|
const relativePath = file.replace(process.cwd(), '');
|
|
details.forEach((element) => {
|
|
const messageExist = filesByIssues.some((issue) => issue.name === element.message);
|
|
// If the message does not exist, add it to the list of issues
|
|
// With the file and start the count at 1
|
|
if (!messageExist) {
|
|
const name: FilesByIssues['name'] = element.message;
|
|
filesByIssues.push({ name, files: [{ path: relativePath, count: 1 }] });
|
|
} else {
|
|
//If it exists, check if there is a file with the same path
|
|
//If so, increment the count, if not, add the file to the list starting the count at 1
|
|
const issue = filesByIssues.find((issue) => issue.name === element.message);
|
|
if (issue?.files.find((file) => file.path === relativePath)?.count !== undefined) {
|
|
issue.files.find((file) => file.path === relativePath)!.count++;
|
|
} else {
|
|
issue?.files.push({ path: relativePath, count: 1 });
|
|
}
|
|
}
|
|
});
|
|
resultMap[suite.name] = filesByIssues;
|
|
}
|
|
}
|
|
|
|
await writeFile('.betterer.results.json', JSON.stringify(resultMap, undefined, 2));
|
|
}
|
|
|
|
main().catch(console.error);
|