ci: speed up release validation

This commit is contained in:
Peter Steinberger
2026-04-29 19:53:29 +01:00
parent fc2d957923
commit 57e4994caf
16 changed files with 427 additions and 292 deletions

View File

@@ -809,6 +809,34 @@ const shouldUseExistingDistForGatewayClient = (deps, buildRequirement) =>
deps.env.OPENCLAW_FORCE_BUILD !== "1" &&
statMtime(deps.distEntry, deps.fs) != null;
const isQaParityReportCommand = (args) => args[0] === "qa" && args[1] === "parity-report";
const shouldRunQaParityReportFromSource = (deps, buildRequirement) =>
buildRequirement.reason === "missing_private_qa_dist" &&
isQaParityReportCommand(deps.args) &&
deps.env.OPENCLAW_FORCE_BUILD !== "1" &&
statMtime(path.join(deps.cwd, "extensions", "qa-lab", "src", "cli.runtime.ts"), deps.fs) != null;
const runQaParityReportFromSource = async (deps) => {
const sourceEntrypoint = path.join(deps.cwd, "scripts", "qa-parity-report.ts");
const nodeProcess = deps.spawn(
deps.execPath,
["--import", "tsx", sourceEntrypoint, ...deps.args.slice(2)],
{
cwd: deps.cwd,
env: deps.env,
stdio: deps.outputTee ? ["inherit", "pipe", "pipe"] : "inherit",
},
);
pipeSpawnedOutput(nodeProcess, deps);
const res = await waitForSpawnedProcess(nodeProcess, deps);
const interruptedExitCode = getInterruptedSpawnExitCode(res);
if (interruptedExitCode !== null) {
return interruptedExitCode;
}
return res.exitCode ?? 1;
};
export async function runNodeMain(params = {}) {
const deps = {
spawn: params.spawn ?? spawn,
@@ -847,9 +875,15 @@ export async function runNodeMain(params = {}) {
deps,
buildRequirement,
);
const useQaParityReportSource = shouldRunQaParityReportFromSource(deps, buildRequirement);
if (useExistingGatewayClientDist) {
buildRequirement = { shouldBuild: false, reason: "gateway_client_existing_dist" };
}
if (useQaParityReportSource) {
logRunner("Running QA parity report from source without rebuilding private QA dist.", deps);
exitCode = await runQaParityReportFromSource(deps);
return await closeRunNodeOutputTee(deps, exitCode);
}
if (!buildRequirement.shouldBuild) {
if (!useExistingGatewayClientDist && !shouldSkipCleanWatchRuntimeSync(deps)) {
const runtimePostBuildRequirement = resolveRuntimePostBuildRequirement(deps);