Source commit: 750f29790fe2046599fbe5b5d06fdb63d92fabff Public tree identity: sha256:02326e08850bb287585789733ea5f3f153e1f7f3fd88afcc24e249107df91506
113 lines
3.7 KiB
JavaScript
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");
|