diff --git a/scripts/native/cicd/publish-platform-infra-gitea-gitops.mjs b/scripts/native/cicd/publish-platform-infra-gitea-gitops.mjs index 906be703..68725eb1 100644 --- a/scripts/native/cicd/publish-platform-infra-gitea-gitops.mjs +++ b/scripts/native/cicd/publish-platform-infra-gitea-gitops.mjs @@ -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`); } diff --git a/scripts/src/platform-infra-pipelines-as-code.ts b/scripts/src/platform-infra-pipelines-as-code.ts index eff016d7..a6bbb204 100644 --- a/scripts/src/platform-infra-pipelines-as-code.ts +++ b/scripts/src/platform-infra-pipelines-as-code.ts @@ -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 { const pac = readPacConfig({ consumerId: options.consumerId, selectDefault: true }); const target = resolveTarget(pac, options.targetId);