clusterflux-public/scripts/acceptance-report-smoke.js
Disasmer release dry run de66658961 Public dry run dryrun-750f29790fe2
Source commit: 750f29790fe2046599fbe5b5d06fdb63d92fabff

Public tree identity: sha256:02326e08850bb287585789733ea5f3f153e1f7f3fd88afcc24e249107df91506
2026-07-03 16:28:39 +02:00

113 lines
3.7 KiB
JavaScript

#!/usr/bin/env node
const assert = require("assert");
const cp = require("child_process");
const fs = require("fs");
const path = require("path");
const repo = path.resolve(__dirname, "..");
function runReport(mode, env = {}) {
const output = cp.execFileSync(
"node",
["scripts/acceptance-report.js", mode],
{
cwd: repo,
encoding: "utf8",
env: { ...process.env, ...env },
}
);
const report = JSON.parse(output);
const persistedPath = path.join(
repo,
"target",
"acceptance",
`${mode}-environment.json`
);
const persisted = JSON.parse(fs.readFileSync(persistedPath, "utf8"));
assert.deepStrictEqual(persisted, report, `${mode} report was not persisted`);
return report;
}
function assertString(value, name) {
assert.strictEqual(typeof value, "string", `${name} must be a string`);
assert(value.length > 0, `${name} must not be empty`);
}
function assertNullableString(value, name) {
if (value === null) return;
assertString(value, name);
}
function assertPodmanReport(podman) {
assert(podman && typeof podman === "object", "podman report must be an object");
assert(
["available", "incomplete"].includes(podman.status),
"podman.status must be available or incomplete"
);
assertNullableString(podman.version, "podman.version");
assertNullableString(podman.rootless, "podman.rootless");
assertNullableString(podman.incomplete_reason, "podman.incomplete_reason");
if (podman.status === "available") {
assertString(podman.version, "podman.version");
assert.strictEqual(podman.rootless, "true");
assert.strictEqual(podman.incomplete_reason, null);
} else {
assertString(podman.incomplete_reason, "podman.incomplete_reason");
}
}
function assertReport(report, mode, expectedWindowsValidation) {
assert.strictEqual(report.kind, "disasmer_acceptance_environment");
assert.strictEqual(report.mode, mode);
assert.match(report.generated_at, /^\d{4}-\d{2}-\d{2}T/);
assert.match(report.commit, /^[0-9a-f]{40}$/);
assert(Array.isArray(report.tree_status), "tree_status must be an array");
assertString(report.os.platform, "os.platform");
assertString(report.os.release, "os.release");
assertString(report.os.kernel, "os.kernel");
assertString(report.os.arch, "os.arch");
assertString(report.rust.rustc, "rust.rustc");
assertString(report.rust.cargo, "rust.cargo");
assertString(report.node.version, "node.version");
assert(report.node.version.startsWith("v"), "node.version must be Node.js style");
assertPodmanReport(report.podman);
assertNullableString(report.postgres.version, "postgres.version");
assertNullableString(report.browser_harness.version, "browser_harness.version");
assertNullableString(report.browser_harness.command, "browser_harness.command");
assertString(report.browser_harness.configured, "browser_harness.configured");
assert(Array.isArray(report.vscode_harness.smokes), "vscode smokes must be listed");
assert(
report.vscode_harness.smokes.includes("scripts/vscode-extension-smoke.js"),
"VS Code extension smoke must be recorded"
);
assert(
report.vscode_harness.smokes.includes("scripts/vscode-f5-smoke.js"),
"VS Code F5 smoke must be recorded"
);
assertString(report.vscode_harness.engine, "vscode_harness.engine");
assertString(
report.vscode_harness.extension_version,
"vscode_harness.extension_version"
);
assert.strictEqual(report.windows_validation, expectedWindowsValidation);
}
for (const mode of ["public", "private"]) {
assertReport(runReport(mode), mode, "not-run");
}
assertReport(
runReport("windows", {
DISASMER_WINDOWS_VALIDATION: "forgejo-windows-runner",
}),
"windows",
"forgejo-windows-runner"
);
console.log("Acceptance report smoke passed");