fix: 收敛 PaC 自动交付提示
This commit is contained in:
@@ -42,6 +42,8 @@ import { readNodeRuntimeStatusPolicy, runNodeRuntimeStatusProbe, skippedNodeRunt
|
||||
import { hwlabRuntimeActiveExternalPostgres } from "../hwlab-node-lanes";
|
||||
import { nodeRuntimeDeployYamlOverlayShellScript } from "./deploy-overlay";
|
||||
import { pipelineProvenanceAnnotationKeys } from "../pipeline-provenance";
|
||||
import { hwlabNodeDeliveryAuthority, hwlabNodeDeliveryNext } from "./delivery-authority";
|
||||
import type { CicdDeliveryAuthority } from "../cicd-delivery-authority";
|
||||
|
||||
const runtimeGitopsObservabilityNativeScript = readFileSync(rootPath("scripts/native/hwlab/runtime-gitops-observability.mjs"), "utf8").trimEnd();
|
||||
const runtimeGitopsPipelineGuardNativeScript = readFileSync(rootPath("scripts/native/hwlab/runtime-gitops-pipeline-guard.mjs"), "utf8").trimEnd();
|
||||
@@ -346,6 +348,9 @@ export function nodeRuntimeControlPlaneStatus(scoped: ReturnType<typeof parseNod
|
||||
runtimeDegradedReason,
|
||||
publicReady,
|
||||
});
|
||||
const deliveryAuthority = hwlabNodeDeliveryAuthority(scoped);
|
||||
const visiblePipelineRunDiagnostics = nodeRuntimeVisiblePipelineRunDiagnostics(pipelineRunDiagnostics, deliveryAuthority);
|
||||
const runtimeStatusFull = `${nodeRuntimeStatusCommand(scoped)} --full`;
|
||||
const fullStatus = {
|
||||
ok: controlPlaneReady && runtimeReady && argoReady && pipelineRunReady && publicReady && gitMirrorReady,
|
||||
command: `hwlab nodes control-plane status --node ${scoped.node} --lane ${scoped.lane}`,
|
||||
@@ -389,7 +394,7 @@ export function nodeRuntimeControlPlaneStatus(scoped: ReturnType<typeof parseNod
|
||||
result: compactRuntimeCommand(argo),
|
||||
},
|
||||
pipelineRun: pipelineRunProbe,
|
||||
pipelineRunDiagnostics,
|
||||
pipelineRunDiagnostics: visiblePipelineRunDiagnostics,
|
||||
runtime: {
|
||||
ready: runtimeReady,
|
||||
skipped: !statusPolicy.probes.runtime,
|
||||
@@ -420,17 +425,32 @@ export function nodeRuntimeControlPlaneStatus(scoped: ReturnType<typeof parseNod
|
||||
postgresObjects: postgresObjects === null ? null : compactRuntimeCommand(postgresObjects),
|
||||
},
|
||||
degradedReason,
|
||||
next: {
|
||||
plan: `bun scripts/cli.ts hwlab nodes control-plane plan --node ${scoped.node} --lane ${scoped.lane}`,
|
||||
apply: `bun scripts/cli.ts hwlab nodes control-plane apply --node ${scoped.node} --lane ${scoped.lane} --confirm`,
|
||||
triggerCurrent: `bun scripts/cli.ts hwlab nodes control-plane trigger-current --node ${scoped.node} --lane ${scoped.lane} --confirm`,
|
||||
},
|
||||
deliveryAuthority,
|
||||
next: hwlabNodeDeliveryNext(scoped, deliveryAuthority, runtimeStatusFull),
|
||||
};
|
||||
const summary = summarizeNodeRuntimeControlPlaneStatus(fullStatus, scoped);
|
||||
const summary = summarizeNodeRuntimeControlPlaneStatus(fullStatus, scoped, deliveryAuthority);
|
||||
if (scoped.originalArgs.includes("--full") || scoped.originalArgs.includes("--raw")) return { ...fullStatus, summary };
|
||||
return summary;
|
||||
}
|
||||
|
||||
export function nodeRuntimeVisiblePipelineRunDiagnostics(
|
||||
diagnostics: Record<string, unknown> | null,
|
||||
deliveryAuthority: CicdDeliveryAuthority,
|
||||
): Record<string, unknown> | null {
|
||||
if (deliveryAuthority.kind === "legacy-manual" || diagnostics === null) return diagnostics;
|
||||
const failureSummary = record(diagnostics.failureSummary);
|
||||
return {
|
||||
...diagnostics,
|
||||
failureSummary: Object.keys(failureSummary).length === 0
|
||||
? diagnostics.failureSummary ?? null
|
||||
: {
|
||||
...failureSummary,
|
||||
nextAction: "检查失败 TaskRun 与有界日志,修复 owning YAML、controller 或源码中的自动链缺陷,再以新的正常 GitHub PR merge 验收;不得人工 rerun。",
|
||||
},
|
||||
next: null,
|
||||
};
|
||||
}
|
||||
|
||||
export function parseNodeRuntimeWorkloadReadiness(text: string): Array<Record<string, unknown>> {
|
||||
return text.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean).map((line) => {
|
||||
const [ref = "", counts = ""] = line.split(/\t/u);
|
||||
@@ -724,7 +744,11 @@ export function nodeRuntimePipelinePendingTaskRunSummaries(
|
||||
});
|
||||
}
|
||||
|
||||
export function summarizeNodeRuntimeControlPlaneStatus(status: Record<string, unknown>, scoped: ReturnType<typeof parseNodeScopedDelegatedOptions>): Record<string, unknown> {
|
||||
export function summarizeNodeRuntimeControlPlaneStatus(
|
||||
status: Record<string, unknown>,
|
||||
scoped: ReturnType<typeof parseNodeScopedDelegatedOptions>,
|
||||
deliveryAuthority: CicdDeliveryAuthority = hwlabNodeDeliveryAuthority(scoped),
|
||||
): Record<string, unknown> {
|
||||
const pipelineRun = record(status.pipelineRun);
|
||||
const pipelineRunDiagnostics = record(status.pipelineRunDiagnostics);
|
||||
const argo = record(status.argo);
|
||||
@@ -770,7 +794,7 @@ export function summarizeNodeRuntimeControlPlaneStatus(status: Record<string, un
|
||||
pendingTaskRuns: pipelineRunDiagnostics.pendingTaskRuns ?? [],
|
||||
unscheduledPods: pipelineRunDiagnostics.unscheduledPods ?? [],
|
||||
schedulingMessages: pipelineRunDiagnostics.schedulingMessages ?? [],
|
||||
next: pipelineRunDiagnostics.next ?? null,
|
||||
next: deliveryAuthority.kind === "legacy-manual" ? pipelineRunDiagnostics.next ?? null : null,
|
||||
},
|
||||
},
|
||||
argo: {
|
||||
@@ -842,14 +866,9 @@ export function summarizeNodeRuntimeControlPlaneStatus(status: Record<string, un
|
||||
flushNeeded: gitMirrorCompact.flushNeeded === true,
|
||||
githubInSync: gitMirrorCompact.githubInSync === true,
|
||||
},
|
||||
nextAction: nodeRuntimeStatusNextAction(status, scoped),
|
||||
next: {
|
||||
full: `${nodeRuntimeStatusCommand(scoped)} --full`,
|
||||
plan: `bun scripts/cli.ts hwlab nodes control-plane plan --node ${scoped.node} --lane ${scoped.lane}`,
|
||||
triggerCurrent: `bun scripts/cli.ts hwlab nodes control-plane trigger-current --node ${scoped.node} --lane ${scoped.lane} --confirm`,
|
||||
gitMirrorFlush: `bun scripts/cli.ts hwlab nodes git-mirror flush --node ${scoped.node} --lane ${scoped.lane} --confirm --wait`,
|
||||
webProbe: `bun scripts/cli.ts web-probe run --node ${scoped.node} --lane ${scoped.lane}`,
|
||||
},
|
||||
deliveryAuthority,
|
||||
nextAction: nodeRuntimeStatusNextAction(status, scoped, deliveryAuthority),
|
||||
next: hwlabNodeDeliveryNext(scoped, deliveryAuthority, `${nodeRuntimeStatusCommand(scoped)} --full`),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -967,8 +986,18 @@ function argoEventRows(text: string): Record<string, unknown>[] {
|
||||
}).filter((item): item is Record<string, unknown> => item !== null);
|
||||
}
|
||||
|
||||
export function nodeRuntimeStatusNextAction(status: Record<string, unknown>, scoped: ReturnType<typeof parseNodeScopedDelegatedOptions>): string {
|
||||
export function nodeRuntimeStatusNextAction(
|
||||
status: Record<string, unknown>,
|
||||
scoped: ReturnType<typeof parseNodeScopedDelegatedOptions>,
|
||||
deliveryAuthority: CicdDeliveryAuthority = hwlabNodeDeliveryAuthority(scoped),
|
||||
): string {
|
||||
const reason = typeof status.degradedReason === "string" ? status.degradedReason : null;
|
||||
if (deliveryAuthority.kind === "pac-pr-merge") {
|
||||
return reason === null
|
||||
? `${nodeRuntimeStatusCommand(scoped)} --full`
|
||||
: `bun scripts/cli.ts platform-infra pipelines-as-code status --target ${deliveryAuthority.consumer.node} --consumer ${deliveryAuthority.consumer.consumerId}`;
|
||||
}
|
||||
if (deliveryAuthority.kind === "unknown") return `${nodeRuntimeStatusCommand(scoped)} --full`;
|
||||
if (reason === null) return `${nodeRuntimeStatusCommand(scoped)} --full`;
|
||||
if (reason === "control-plane-not-ready" || reason === "runtime-namespace-missing") {
|
||||
return `bun scripts/cli.ts hwlab nodes control-plane apply --node ${scoped.node} --lane ${scoped.lane} --confirm`;
|
||||
|
||||
Reference in New Issue
Block a user