95 lines
4.0 KiB
JavaScript
95 lines
4.0 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
import {
|
|
findForbiddenActiveDeprecatedEndpoints,
|
|
REPORT_LIFECYCLE_VERSION
|
|
} from "../internal/dev-report-lifecycle.mjs";
|
|
import { tempReportPath } from "./src/report-paths.mjs";
|
|
|
|
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
const reportPath = tempReportPath("dev-m2-deploy-smoke-active.json");
|
|
|
|
function assertString(value, label) {
|
|
assert.equal(typeof value, "string", `${label} must be a string`);
|
|
assert.ok(value.trim().length > 0, `${label} must not be empty`);
|
|
}
|
|
|
|
function assertObject(value, label) {
|
|
assert.ok(value && typeof value === "object" && !Array.isArray(value), `${label} must be an object`);
|
|
}
|
|
|
|
function assertArray(value, label) {
|
|
assert.ok(Array.isArray(value), `${label} must be an array`);
|
|
}
|
|
|
|
function assertTimestamp(value, label) {
|
|
assertString(value, label);
|
|
assert.ok(!Number.isNaN(Date.parse(value)), `${label} must be a timestamp`);
|
|
}
|
|
|
|
async function main() {
|
|
const raw = await readFile(reportPath, "utf8");
|
|
const report = JSON.parse(raw);
|
|
assertObject(report, "report");
|
|
assert.equal(report.issue, "pikasTech/HWLAB#23");
|
|
assert.equal(report.taskId, "m2-dev-deploy-smoke");
|
|
assertObject(report.reportLifecycle, "reportLifecycle");
|
|
assert.equal(report.reportLifecycle.version, REPORT_LIFECYCLE_VERSION);
|
|
assert.equal(report.reportLifecycle.state, "active");
|
|
assert.equal(report.reportLifecycle.activeEndpoint, "http://74.48.78.17:16667");
|
|
assert.equal(report.reportLifecycle.activeBrowserEndpoint, "http://74.48.78.17:16666");
|
|
assert.equal(report.reportLifecycle.deprecatedEndpoint, null);
|
|
assert.deepEqual(
|
|
findForbiddenActiveDeprecatedEndpoints(report, raw),
|
|
[],
|
|
"active M2 report must not present deprecated public ports as current endpoint evidence"
|
|
);
|
|
assert.equal(report.status, "pass");
|
|
assert.equal(report.endpoint, "http://74.48.78.17:16667");
|
|
assert.equal(report.frontendEndpoint, "http://74.48.78.17:16666");
|
|
assertTimestamp(report.generatedAt, "generatedAt");
|
|
|
|
assertObject(report.runtimeSmoke, "runtimeSmoke");
|
|
assert.equal(report.runtimeSmoke.mode, "live-read-only");
|
|
assert.equal(report.runtimeSmoke.status, "pass");
|
|
assert.equal(report.runtimeSmoke.apiEndpoint, "http://74.48.78.17:16667");
|
|
assert.equal(report.runtimeSmoke.frontendEndpoint, "http://74.48.78.17:16666");
|
|
assertObject(report.runtimeSmoke.safety, "runtimeSmoke.safety");
|
|
for (const field of ["prodTouched", "secretsRead", "restarts", "deployAttempted", "heavyE2E", "unideskRuntimeSubstitute"]) {
|
|
assert.equal(report.runtimeSmoke.safety[field], false, `runtimeSmoke.safety.${field}`);
|
|
}
|
|
assertObject(report.runtimeSmoke.legacyPublicEndpoint, "runtimeSmoke.legacyPublicEndpoint");
|
|
assert.equal(report.runtimeSmoke.legacyPublicEndpoint.endpoint, "http://74.48.78.17:6667");
|
|
assert.equal(report.runtimeSmoke.legacyPublicEndpoint.activeGreenEligible, false);
|
|
|
|
assertObject(report.devPreconditions, "devPreconditions");
|
|
assert.equal(report.devPreconditions.status, "pass");
|
|
assertArray(report.devPreconditions.commands, "devPreconditions.commands");
|
|
assertArray(report.devPreconditions.evidence, "devPreconditions.evidence");
|
|
assert.ok(
|
|
report.devPreconditions.commands.includes("curl -fsS --max-time 10 http://74.48.78.17:16667/health"),
|
|
"devPreconditions.commands missing /health probe"
|
|
);
|
|
assert.ok(
|
|
report.devPreconditions.commands.includes("curl -fsS --max-time 10 http://74.48.78.17:16667/health/live"),
|
|
"devPreconditions.commands missing /health/live probe"
|
|
);
|
|
assert.ok(
|
|
report.devPreconditions.commands.includes("curl -fsS --max-time 10 http://74.48.78.17:16666/"),
|
|
"devPreconditions.commands missing frontend probe"
|
|
);
|
|
|
|
console.log("validated m2-dev-deploy-smoke-active.json");
|
|
}
|
|
|
|
try {
|
|
await main();
|
|
} catch (error) {
|
|
process.stderr.write(`[validate-m2-dev-deploy-smoke-active] ${error instanceof Error ? error.message : String(error)}\n`);
|
|
process.exitCode = 1;
|
|
}
|