fix(cicd): 收紧 managed repository 配置与状态合同
This commit is contained in:
@@ -482,18 +482,33 @@ export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorS
|
||||
declaredConfigRef: target.configPath,
|
||||
});
|
||||
const observation = await readGitMirrorStatus(config, target);
|
||||
return renderGitMirrorStatusEnvelope(target, deliveryAuthority, observation, options);
|
||||
}
|
||||
|
||||
export function renderGitMirrorStatusEnvelope(
|
||||
target: ReturnType<typeof resolveAgentRunLaneTarget>,
|
||||
deliveryAuthority: ReturnType<typeof resolveCicdDeliveryAuthority>,
|
||||
observation: Awaited<ReturnType<typeof readGitMirrorStatus>>,
|
||||
options: GitMirrorStatusOptions,
|
||||
): Record<string, unknown> {
|
||||
const spec = target.spec;
|
||||
const summary = observation.summary;
|
||||
const outputSummary = options.full || options.raw ? summary : compactManagedRepositoryStatus(summary);
|
||||
const expanded = options.full || options.raw;
|
||||
const repositoryLimit = spec.gitMirror.repositoryReconciler.status.defaultRepositoryLimit;
|
||||
const compactTargetRepositories = spec.gitMirror.repositories
|
||||
.slice(0, repositoryLimit)
|
||||
.map((repository) => ({ key: repository.key, sourceBranch: repository.sourceBranch }));
|
||||
const compactTarget = {
|
||||
node: spec.nodeId,
|
||||
lane: spec.lane,
|
||||
namespace: spec.gitMirror.namespace,
|
||||
controller: spec.gitMirror.repositoryReconciler.deploymentName,
|
||||
repositories: spec.gitMirror.repositories.map((repository) => ({ key: repository.key, sourceBranch: repository.sourceBranch })),
|
||||
repositories: compactTargetRepositories,
|
||||
repositoryView: repositoryListView(spec.gitMirror.repositories.length, compactTargetRepositories.length, repositoryLimit),
|
||||
};
|
||||
const fullTarget = {
|
||||
...compactTarget,
|
||||
repositories: spec.gitMirror.repositories.map((repository) => ({ key: repository.key, sourceBranch: repository.sourceBranch })),
|
||||
version: spec.version,
|
||||
sourceAuthority: spec.source.sourceAuthority,
|
||||
gitMirror: {
|
||||
@@ -515,7 +530,15 @@ export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorS
|
||||
remoteConfigured: true,
|
||||
})),
|
||||
},
|
||||
repositoryView: repositoryListView(spec.gitMirror.repositories.length, spec.gitMirror.repositories.length, null),
|
||||
};
|
||||
const summaryRepositories = Array.isArray(summary.repositories) ? summary.repositories : [];
|
||||
const outputSummary = expanded
|
||||
? {
|
||||
...summary,
|
||||
repositoryView: repositoryListView(summaryRepositories.length, summaryRepositories.length, null),
|
||||
}
|
||||
: compactManagedRepositoryStatus(summary, repositoryLimit);
|
||||
const outputNext = deliveryAuthority.kind === "pac-pr-merge"
|
||||
? {
|
||||
status: `bun scripts/cli.ts platform-infra pipelines-as-code status --target ${deliveryAuthority.consumer.node} --consumer ${deliveryAuthority.consumer.consumerId}`,
|
||||
@@ -549,7 +572,7 @@ export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorS
|
||||
full: options.full,
|
||||
raw: options.raw,
|
||||
rawOmitted: !options.raw,
|
||||
probeTailOmitted: !(options.full || options.raw),
|
||||
probeTailOmitted: !options.raw,
|
||||
expandWith: `bun scripts/cli.ts agentrun git-mirror status --node ${spec.nodeId} --lane ${spec.lane} --full`,
|
||||
rawWith: `bun scripts/cli.ts agentrun git-mirror status --node ${spec.nodeId} --lane ${spec.lane} --raw`,
|
||||
},
|
||||
@@ -578,9 +601,9 @@ function compactDeliveryAuthority(authority: ReturnType<typeof resolveCicdDelive
|
||||
};
|
||||
}
|
||||
|
||||
function compactManagedRepositoryStatus(summary: Record<string, unknown>): Record<string, unknown> {
|
||||
function compactManagedRepositoryStatus(summary: Record<string, unknown>, limit: number): Record<string, unknown> {
|
||||
const controller = record(summary.controller);
|
||||
const repositories = Array.isArray(summary.repositories)
|
||||
const allRepositories = Array.isArray(summary.repositories)
|
||||
? summary.repositories.map((value) => record(value)).map((repository) => ({
|
||||
key: repository.key ?? null,
|
||||
sourceBranch: repository.sourceBranch ?? null,
|
||||
@@ -592,8 +615,14 @@ function compactManagedRepositoryStatus(summary: Record<string, unknown>): Recor
|
||||
aligned: repository.refAligned === true && repository.remoteFingerprintAligned === true,
|
||||
}))
|
||||
: [];
|
||||
const repositories = allRepositories.slice(0, limit);
|
||||
return {
|
||||
ok: summary.ok === true,
|
||||
repository: summary.repository ?? null,
|
||||
sourceBranch: summary.sourceBranch ?? null,
|
||||
gitopsBranch: summary.gitopsBranch ?? null,
|
||||
sourceCommit: summary.sourceCommit ?? null,
|
||||
gitopsCommit: summary.gitopsCommit ?? null,
|
||||
controller: {
|
||||
deploymentReady: controller.deploymentReady === true,
|
||||
desiredRendered: controller.configRendered === true && controller.workloadRendered === true,
|
||||
@@ -601,11 +630,21 @@ function compactManagedRepositoryStatus(summary: Record<string, unknown>): Recor
|
||||
heartbeatFresh: controller.heartbeatFresh === true,
|
||||
},
|
||||
repositories,
|
||||
repositoryView: repositoryListView(allRepositories.length, repositories.length, limit),
|
||||
firstDrift: summary.firstDrift ?? null,
|
||||
valuesPrinted: false,
|
||||
};
|
||||
}
|
||||
|
||||
function repositoryListView(total: number, shown: number, limit: number | null): Record<string, number | null> {
|
||||
return {
|
||||
limit,
|
||||
total,
|
||||
shown,
|
||||
omitted: Math.max(0, total - shown),
|
||||
};
|
||||
}
|
||||
|
||||
function shortCommit(value: unknown): string | null {
|
||||
return typeof value === "string" && /^[0-9a-f]{40}$/u.test(value) ? value.slice(0, 12) : null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user