#!/usr/bin/env node
import { execSync } from "node:child_process";
import { mkdirSync, writeFileSync } from "node:fs";
import path from "node:path";
import process from "node:process";
const rootDir = path.resolve(new URL("../..", import.meta.url).pathname);
const reportDir = process.env.QA_REPORT_DIR || process.argv[2];
if (!reportDir) {
console.error("Usage: QA_REPORT_DIR=
node scripts/qa/write-qa-summary.mjs");
process.exit(2);
}
function currentCommit() {
if (process.env.QA_COMMIT?.trim()) {
return process.env.QA_COMMIT.trim();
}
try {
return execSync("git rev-parse --short HEAD", {
cwd: rootDir,
encoding: "utf8",
stdio: ["ignore", "pipe", "ignore"],
}).trim();
} catch {
return "unknown";
}
}
function optionalValue(value) {
return value?.trim() || null;
}
const summary = {
issueId: optionalValue(process.env.QA_ISSUE_ID),
baseURL: optionalValue(process.env.QA_BASE_URL) ||
optionalValue(process.env.E2E_BASE_URL) ||
optionalValue(process.env.LIVE_SMOKE_BASE_URL),
commit: currentCommit(),
checkedAt: new Date().toISOString(),
status: optionalValue(process.env.QA_STATUS) || "UNKNOWN",
mode: optionalValue(process.env.QA_MODE),
reportDir: path.resolve(reportDir),
groups: optionalValue(process.env.BUSINESS_FLOW_GROUPS),
notes: optionalValue(process.env.QA_SUMMARY_NOTES),
};
mkdirSync(reportDir, { recursive: true });
writeFileSync(path.join(reportDir, "summary.json"), JSON.stringify(summary, null, 2), "utf8");
console.log(`[qa-summary] ${summary.status} ${path.join(reportDir, "summary.json")}`);