import { defineCommand } from "citty"; import { resolve } from "node:path"; import { YAML } from "bun"; import { sortResources } from "../lib/apply"; import { ctx } from "../lib/context"; import { renderResources } from "../lib/render"; function toDocumentYaml(resources: Parameters[0]): string { return `${sortResources(resources) .map((resource) => YAML.stringify(resource, null, 2).trimEnd()) .join("\n---\n")}\n`; } export const exportCommand = defineCommand({ meta: { name: "export", description: "Write rendered manifests to a YAML file", }, args: { output: { type: "string", alias: "o", description: "Output YAML file path", }, }, async run({ args }) { const { project, compose, cwd } = ctx(); const resources = await renderResources(project, await compose(), cwd); const outputPath = resolve(cwd, args.output || `${project}.yaml`); await Bun.write(outputPath, toDocumentYaml(resources)); console.log(outputPath); }, });