53 lines
1.3 KiB
TypeScript
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);
|
|
},
|
|
});
|