fix: reconcile PaC repository URLs through GitOps

This commit is contained in:
pikastech
2026-07-20 18:43:40 +02:00
parent 5f7c993f77
commit 7b850ca16f
2 changed files with 40 additions and 1 deletions
@@ -254,9 +254,14 @@ async function main() {
const sourceCommit = fullCommit(option("--source-commit"), "--source-commit");
const worktree = resolve(option("--worktree") ?? "/workspace/platform-infra-gitea-gitops");
const moduleUrl = pathToFileURL(resolve(sourceRoot, "scripts", "src", "platform-infra-gitea.ts")).href;
const pacModuleUrl = pathToFileURL(resolve(sourceRoot, "scripts", "src", "platform-infra-pipelines-as-code.ts")).href;
const module = await import(moduleUrl);
const pacModule = await import(pacModuleUrl);
const delivery = module.readGiteaWebhookGitOpsDelivery();
const desiredManifest = module.renderGiteaWebhookSyncDesiredManifest(delivery.targetId);
const desiredManifest = [
module.renderGiteaWebhookSyncDesiredManifest(delivery.targetId).trim(),
pacModule.renderPacRepositoryDesiredFragment(delivery.targetId).trim(),
].filter((item) => item.length > 0).join("\n---\n") + "\n";
const result = publishPlatformInfraGiteaGitOps({ delivery, desiredManifest, sourceRoot, sourceCommit, worktree });
process.stdout.write(`${JSON.stringify(result)}\n`);
}
@@ -1366,6 +1366,40 @@ export function validPacConsumers(config: PacConfig): PacConsumer[] {
));
}
export function renderPacRepositoryDesiredFragment(targetId: string): string {
const pac = readPacConfig();
const targetConsumers = validPacConsumers(pac)
.filter((consumer) => consumer.node.toLowerCase() === targetId.toLowerCase());
const repositoryRefs = [...new Set(targetConsumers.map((consumer) => consumer.repositoryRef))];
const repositories = repositoryRefs
.map((repositoryRef) => resolveRepository(pac, repositoryRef))
.sort((left, right) => `${left.namespace}/${left.name}`.localeCompare(`${right.namespace}/${right.name}`));
return repositories.map((repository) => Bun.YAML.stringify({
apiVersion: "pipelinesascode.tekton.dev/v1alpha1",
kind: "Repository",
metadata: {
name: repository.name,
namespace: repository.namespace,
labels: {
"app.kubernetes.io/managed-by": "unidesk",
"app.kubernetes.io/part-of": "pipelines-as-code",
"unidesk.ai/spec": pac.metadata.spec,
},
},
spec: {
url: repository.url,
git_provider: {
type: repository.providerType,
url: pac.gitea.internalBaseUrl,
secret: { name: repository.secretName, key: repository.tokenKey },
webhook_secret: { name: repository.secretName, key: repository.webhookSecretKey },
},
concurrency_limit: repository.concurrencyLimit,
params: Object.entries(repository.params).map(([name, value]) => ({ name, value })),
},
}).trim()).join("\n---\n") + (repositories.length > 0 ? "\n" : "");
}
function plan(options: CommonOptions): Record<string, unknown> {
const pac = readPacConfig({ consumerId: options.consumerId, selectDefault: true });
const target = resolveTarget(pac, options.targetId);