mirror of
https://github.com/cloudflare/vinext.git
synced 2026-09-14 19:04:59 +08:00
44b0c9dcff
* fix(perf): pair pull request benchmark baselines * fix(perf): bootstrap benchmark fingerprint rollout * fix(perf): harden paired benchmark publishing * fix(perf): allow isolated build output creation * fix(perf): transfer isolated build outputs * fix(perf): verify isolated output permissions * fix(perf): validate diagnostic trace categories * fix(perf): retain trusted benchmark manifests * fix(perf): close benchmark validation gaps --------- Co-authored-by: James <james@eli.cx>
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
import { appendFile } from "node:fs/promises";
|
|
|
|
export async function reportPerformanceSample(value) {
|
|
if (!Number.isFinite(value))
|
|
throw new Error(`Performance sample must be finite, received ${value}`);
|
|
|
|
const sample = {
|
|
schemaVersion: 1,
|
|
benchmarkId: requiredEnvironment("VINEXT_PERF_BENCHMARK_ID"),
|
|
scenarioId: requiredEnvironment("VINEXT_PERF_SCENARIO_ID"),
|
|
suite: requiredEnvironment("VINEXT_PERF_SUITE"),
|
|
label: requiredEnvironment("VINEXT_PERF_LABEL"),
|
|
description: process.env.VINEXT_PERF_DESCRIPTION ?? "",
|
|
implementationId: requiredEnvironment("VINEXT_PERF_IMPLEMENTATION_ID"),
|
|
implementationLabel: requiredEnvironment("VINEXT_PERF_IMPLEMENTATION_LABEL"),
|
|
profile: process.env.VINEXT_PERF_PROFILE === "true",
|
|
unit: requiredEnvironment("VINEXT_PERF_UNIT"),
|
|
lowerIsBetter: process.env.VINEXT_PERF_LOWER_IS_BETTER !== "false",
|
|
revision: process.env.VINEXT_PERF_REVISION === "base" ? "base" : "head",
|
|
value,
|
|
measuredAt: new Date().toISOString(),
|
|
};
|
|
|
|
if (process.env.VINEXT_PERF_RECORD_SAMPLE !== "false") {
|
|
const samplesFile = requiredEnvironment("VINEXT_PERF_SAMPLES");
|
|
await appendFile(samplesFile, `${JSON.stringify(sample)}\n`);
|
|
}
|
|
console.log(JSON.stringify(sample));
|
|
return sample;
|
|
}
|
|
|
|
function requiredEnvironment(name) {
|
|
const value = process.env[name];
|
|
if (!value) throw new Error(`${name} is required; run the adapter through run-scenarios.mjs`);
|
|
return value;
|
|
}
|