UNPKG

@storm-software/k8s-tools

Version:

Tools for managing Kubernetes (k8s) infrastructure within a Nx workspace.

106 lines (103 loc) 2.88 kB
import { withRunGenerator } from "./chunk-C2QUOGWD.mjs"; import { writeDebug } from "./chunk-XLWMBELQ.mjs"; // src/generators/helm-dependency/generator.ts import { formatFiles, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit"; import yaml from "js-yaml"; async function helmDependencyGeneratorFn(tree, options, config) { writeDebug("\u{1F4DD} Preparing to add Helm Dependency", config); const project = readProjectConfiguration(tree, options.project); if (!project.targets?.["helm-package"]) { throw new Error( `Project ${options.project} does not have a helm target. Please run the chart generator first.` ); } updateProjectConfiguration( tree, options.project, addDependencyToConfig(project, options.repositoryName, options.repository) ); updateChartYaml( tree, project, options.chartName, options.chartVersion, options.repository ); if (options.format) { await formatFiles(tree); } return { success: true }; } var generator_default = withRunGenerator( "Helm Dependency", helmDependencyGeneratorFn ); function addDependencyToConfig(project, name, url) { return { ...project, targets: { ...project.targets, helm: { ...project.targets?.["helm-package"], options: { ...project.targets?.["helm-package"]?.options, dependencies: { ...project.targets?.["helm-package"]?.options.dependencies, repositories: project.targets?.["helm-package"]?.options.dependencies.repositories ? [ ...project.targets["helm-package"].options.dependencies.repositories, { name, url } ] : [{ name, url }] } } } } }; } function updateChartYaml(tree, project, name, version, repository) { const chartFolder = project.targets?.["helm-package"]?.options.chartFolder; const chartPath = `${chartFolder}/Chart.yaml`; if (!tree.exists(chartPath)) { throw new Error("Chart.yaml not found"); } try { const result = tree.read(chartPath, "utf8")?.toString(); if (!result) { throw new Error("Failed to read Chart.yaml"); } const chartContents = yaml.load(result); if (!chartContents.dependencies) { chartContents.dependencies = []; } const existingDependency = chartContents.dependencies.find( (dep) => dep.name === name ); if (existingDependency) { existingDependency.version = version; existingDependency.repository = repository; } else { chartContents.dependencies.push({ name, version, repository }); tree.write(chartPath, yaml.dump(chartContents)); } } catch (error) { console.error(error); throw new Error("Failed to parse Chart.yaml"); } } export { helmDependencyGeneratorFn, generator_default };