fix(deploy): treat finalized manifests as clean no-op
This commit is contained in:
parent
4178051af8
commit
c28a3da8ea
4 changed files with 73 additions and 4 deletions
|
|
@ -32,10 +32,32 @@ async function processOne(options = {}) {
|
|||
const checked = validateEvent(event, options.registry || loadRegistry(options.registryFile));
|
||||
if (checked) throw new Error(checked);
|
||||
const result = await (options.provisionFn || provision)({ target: event.target, action: "provision-approved-architecture", resource: event.resource }, { repoUrl: options.registry ? options.registry[event.repo].repo_url : loadRegistry(options.registryFile)[event.repo].repo_url });
|
||||
const receipt = { schema: "guanghu.deployment-agent-receipt/v1", event_id: event.event_id, workorder_id: event.workorder_id, repo: event.repo, branch: event.branch, commit_sha: event.commit_sha, resource: event.resource, result: result.ok ? "DEPLOYED_AND_VERIFIED" : "FAILED_OR_ROLLED_BACK", diagnostic_code: result.ok ? "deployment_succeeded" : String(result.error || "deployment_failed"), evidence: result, recorded_at: new Date().toISOString() };
|
||||
const noDeploymentRequired = result.ok === false && result.error === "manifest_already_finalized";
|
||||
const completed = result.ok || noDeploymentRequired;
|
||||
const receipt = {
|
||||
schema: "guanghu.deployment-agent-receipt/v1",
|
||||
event_id: event.event_id,
|
||||
workorder_id: event.workorder_id,
|
||||
repo: event.repo,
|
||||
branch: event.branch,
|
||||
commit_sha: event.commit_sha,
|
||||
resource: event.resource,
|
||||
result: result.ok
|
||||
? "DEPLOYED_AND_VERIFIED"
|
||||
: noDeploymentRequired
|
||||
? "NO_DEPLOYMENT_REQUIRED"
|
||||
: "FAILED_OR_ROLLED_BACK",
|
||||
diagnostic_code: result.ok
|
||||
? "deployment_succeeded"
|
||||
: noDeploymentRequired
|
||||
? "manifest_already_finalized"
|
||||
: String(result.error || "deployment_failed"),
|
||||
evidence: result,
|
||||
recorded_at: new Date().toISOString(),
|
||||
};
|
||||
writeAtomic(path.join(receiptsDir, `${event.event_id}.json`), `${JSON.stringify(receipt, null, 2)}\n`);
|
||||
fs.renameSync(processing, `${processing}.${result.ok ? "done" : "failed"}`);
|
||||
return { ok: result.ok, state: receipt.result, receipt };
|
||||
fs.renameSync(processing, `${processing}.${completed ? "done" : "failed"}`);
|
||||
return { ok: completed, state: receipt.result, receipt };
|
||||
} catch (error) {
|
||||
const receipt = { schema: "guanghu.deployment-agent-receipt/v1", event_id: event && event.event_id || "", result: "REJECTED", diagnostic_code: String(error && error.message || "deployment_event_invalid").slice(0, 160), recorded_at: new Date().toISOString() };
|
||||
writeAtomic(path.join(receiptsDir, `${path.basename(file, ".json")}.rejected.json`), `${JSON.stringify(receipt, null, 2)}\n`);
|
||||
|
|
|
|||
Loading…
Reference in a new issue