import { describe, expect, test } from "bun:test"; import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { resolve } from "node:path"; import { renderPikaoaTestDesiredPipeline } from "./pikaoa-test-delivery-renderer"; function pacDocument(): Record { return Bun.YAML.parse(readFileSync(resolve(import.meta.dir, "../../config/platform-infra/pipelines-as-code.yaml"), "utf8")) as Record; } function rendererBinding(): Parameters[0] { const document = pacDocument(); const repositories = document.repositories as Array>; const consumers = document.consumers as Array>; const repository = repositories.find((item) => item.id === "pikaoa-test-nc01"); const consumer = consumers.find((item) => item.id === "pikaoa-test-nc01"); if (repository === undefined || consumer === undefined) throw new Error("PikaOA test PaC fixture is required"); return { consumer, repository } as Parameters[0]; } function sourceFixture(): string { const root = mkdtempSync(resolve(tmpdir(), "pikaoa-test-renderer-")); mkdirSync(resolve(root, "deploy"), { recursive: true }); for (const file of ["api.Dockerfile", "worker.Dockerfile", "web.Dockerfile"]) writeFileSync(resolve(root, "deploy", file), "FROM scratch\n"); return root; } describe("PikaOA test PaC renderer", () => { test("keeps master test and release production consumers isolated", () => { const document = pacDocument(); const repositories = document.repositories as Array>; const consumers = document.consumers as Array>; const repository = repositories.find((item) => item.id === "pikaoa-test-nc01"); const testConsumer = consumers.find((item) => item.id === "pikaoa-test-nc01"); const productionConsumer = consumers.find((item) => item.id === "pikaoa-nc01"); expect((repository?.params as Record).source_branch).toBe("master"); expect((testConsumer?.sourceArtifact as Record).pipelineRunPath).toBe(".tekton/pikaoa-test-nc01-pac.yaml"); expect((testConsumer?.sourceArtifact as Record).renderer).toBe("pikaoa-test-runtime"); expect((productionConsumer?.params as Record).source_branch).toBe("release"); expect((productionConsumer?.params as Record).source_snapshot_prefix).toBe("refs/unidesk/snapshots/gitea-actions/pikaoa-release-nc01"); expect(productionConsumer?.sourceArtifact).toBeUndefined(); }); test("renders parallel digest builds and a PreSync fresh database initializer", () => { const source = sourceFixture(); try { const rendered = renderPikaoaTestDesiredPipeline(rendererBinding(), source); const spec = rendered.pipeline.spec as Record; const tasks = spec.tasks as Array>; for (const name of ["build-api", "build-worker", "build-web"]) { const task = tasks.find((item) => item.name === name); expect(task?.runAfter).toEqual(["source"]); expect(JSON.stringify(task)).toContain("buildctl-daemonless.sh build"); expect(JSON.stringify(task)).toContain("$(params.revision)"); expect(JSON.stringify(task)).not.toContain("source-token"); } const sourceTask = tasks.find((item) => item.name === "source"); expect(JSON.stringify(sourceTask)).toContain("source-token"); expect(JSON.stringify(sourceTask)).toContain("GIT_ASKPASS"); expect(JSON.stringify(sourceTask)).toContain("$(params.gitops-secret-name)"); const publish = tasks.find((item) => item.name === "gitops-publish"); expect(publish?.runAfter).toEqual(["build-api", "build-worker", "build-web"]); const script = ((((publish?.taskSpec as Record).steps as Array>)[0]?.script) as string); for (const evidence of [ '"status":"published"', '"registryVerified":true', '"publishedCount":3', '"requiredServiceCount":3', '"gitopsCommit"', '"service":"api"', '"service":"worker"', '"service":"web"', ]) expect(script).toContain(evidence); const encoded = /printf '%s' '([A-Za-z0-9+/=]+)' \| base64 -d/u.exec(script)?.[1]; if (encoded === undefined) throw new Error("embedded GitOps manifest is required"); const manifest = Buffer.from(encoded, "base64").toString("utf8"); expect(manifest).toContain("argocd.argoproj.io/hook: PreSync"); expect(manifest).toContain("name: pikaoa-init"); expect(manifest).toContain("name: initializer"); expect(manifest).not.toContain("kind: Secret"); expect(manifest).toContain("secretName: pikaoa-test-runtime"); expect(manifest).toContain("image: __PIKAOA_API_IMAGE__"); expect(manifest).toContain("pikaoa.unidesk.io/source-commit: __PIKAOA_SOURCE_COMMIT__"); expect(script).toContain('s|__PIKAOA_SOURCE_COMMIT__|$SOURCE_COMMIT|g'); expect(script).toContain("GitOps manifest contains unresolved provenance or image placeholders"); expect(script).toContain("git ls-remote --exit-code --heads"); expect(script).toContain("git -C /workspace/gitops checkout --orphan"); } finally { rmSync(source, { recursive: true, force: true }); } }); });