QG6 完成QA治理矩阵与报告规范
这个提交包含在:
+50
@@ -0,0 +1,50 @@
|
||||
#!/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=<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")}`);
|
||||
在新工单中引用
屏蔽一个用户