Files
pikasTech-unidesk/scripts/src/platform-infra-pipelines-as-code-bootstrap.ts
T
2026-07-13 09:27:42 +02:00

36 lines
1.3 KiB
TypeScript

import type { GiteaConfig, GiteaMirrorRepository } from "./platform-infra-gitea-config";
export interface PacBootstrapRepositoryIdentity {
readonly id: string;
readonly owner: string;
readonly repo: string;
readonly cloneUrl: string;
}
export function resolvePacBootstrapMirrorRepository(
gitea: GiteaConfig,
targetId: string,
repository: PacBootstrapRepositoryIdentity,
): GiteaMirrorRepository {
const candidates = gitea.sourceAuthority.repositories.filter((item) => (
item.targetId.toLowerCase() === targetId.toLowerCase()
&& item.gitea.owner === repository.owner
&& item.gitea.name === repository.repo
&& repositoryUrlIdentity(item.gitea.readUrl) === repositoryUrlIdentity(repository.cloneUrl)
));
if (candidates.length !== 1) {
const disposition = candidates.length === 0 ? "no exact match" : `${candidates.length} exact matches`;
throw new Error(
`cannot resolve the YAML-owned Gitea bootstrap repository for PaC repository ${repository.id} on ${targetId}: ${disposition}; `
+ "match targetId, gitea owner/name, and read URL in config/platform-infra/gitea.yaml",
);
}
return candidates[0];
}
function repositoryUrlIdentity(value: string): string {
const parsed = new URL(value);
const path = parsed.pathname.replace(/\/+$/u, "");
return `${parsed.protocol}//${parsed.host}${path}`;
}