import { defineCommand } from "citty"; import { resolve } from "node:path"; import { YAML } from "bun"; import type { KuberResource } from "../types"; 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, config, hookContext: getHookContext, } = ctx(); const resources = await renderResources( project, await compose(), cwd, config, ); await config.postRender?.( resources as KuberResource[], await getHookContext(), ); const outputPath = resolve(cwd, args.output || `${project}.yaml`); await Bun.write(outputPath, toDocumentYaml(resources)); console.log(outputPath); }, });