Files
kuber/command/export.ts
T

53 lines
1.3 KiB
TypeScript

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<typeof sortResources>[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.registry,
);
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);
},
});