#!/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")}`);