await import(`https://raw.githubusercontent.com/discordeno/discordeno/benchies/benchmarksResult/data.js`); const commitSha = await Deno.readTextFile("./sha"); const results = JSON.parse(await Deno.readTextFile("./data.json")); interface BenchmarksData { commit: { author: { email: string; name: string; username: string }; committer: { email: string; name: string; username: string }; distinct: boolean; id: string; message: string; timestamp: string; tree_id: string; url: string; }; date: number; tool: string; benches: Array<{ name: string; value: number; unit: string; range: string }>; } interface CompareTable { [index: string]: { current: { name: string; value: number; unit: string; range: string } | { name?: string; value?: number; unit?: string; range?: string; }; previous: { name: string; value: number; unit: string; range: string } | { name?: string; value?: number; unit?: string; range?: string; }; }; } const benchmarks = results.entries.Benchmark.slice(-2) as BenchmarksData[]; const latestHeadBenchmarks = benchmarks.length === 2 ? benchmarks[1] : benchmarks[0]; const lastHeadBenchmarks = benchmarks.length === 2 ? benchmarks[0] : undefined; // @ts-expect-error const latestBaseBenchmarks = JSON.parse(JSON.stringify(window.BENCHMARK_DATA.entries.Benchmark)).slice( -1, )[0] as BenchmarksData; const compareWithHead: CompareTable = {}; const compareWithBase: CompareTable = {}; if (lastHeadBenchmarks) { for (const benchmark of lastHeadBenchmarks.benches) { compareWithHead[benchmark.name] = { previous: benchmark, current: {}, }; } } for (const benchmark of latestBaseBenchmarks.benches) { compareWithBase[benchmark.name] = { previous: benchmark, current: {}, }; } for (const benchmark of latestHeadBenchmarks.benches) { compareWithBase[benchmark.name] = { // @ts-expect-error previous: {}, ...compareWithBase[benchmark.name], current: benchmark, }; compareWithHead[benchmark.name] = { // @ts-expect-error previous: {}, ...compareWithHead[benchmark.name], current: benchmark, }; } let message = ""; const compareTableInfo = [{ name: "last head", commit: lastHeadBenchmarks ? lastHeadBenchmarks.commit.id : "" }, { name: "base", commit: latestBaseBenchmarks.commit.id, }]; for (const benchmarkType of ["Performance", "Memory"]) { message += `# ${benchmarkType} Benchmark\n\n`; for (const [index, compare] of [compareWithHead, compareWithBase].entries()) { message += `## Compared with ${compareTableInfo[index].name}\n`; message += "
Detail results of benchmarks\n\n"; message += `| Benchmark suite | Current: ${latestHeadBenchmarks.commit.id} | Previous: ${ compareTableInfo[index].commit } | Ratio |\n | -| -| -| -|\n`; for ( const field of Object.keys(compare).filter((key) => benchmarkType === "Performance" ? !key.startsWith("[Cache Plugin]") : key.startsWith("[Cache Plugin]") ) ) { message += `| \`${field}\` | ${compare[field].current.value ? `\`${compare[field].current.value}\`` : ""} ${ compare[field].current.unit ?? "" } ${compare[field].current.range ? `(\`${compare[field].current.range ?? ""}\`)` : ""} | ${ compare[field].previous.value ? `\`${compare[field].previous.value}\`` : "" } ${compare[field].previous.unit ?? ""} ${ compare[field].previous.range ? `(\`${compare[field].previous.range ?? ""}\`)` : "" } | ${ compare[field].previous.value && compare[field].current.value ? `\`${ // @ts-expect-error Math.round((parseFloat(compare[field].previous.value) / parseFloat(compare[field].current.value)) * 100) / 100}\`` : "" } |\n`; } message += "
\n\n"; } } console.log(message.replaceAll("`", "\\`"));