@storm-software/k8s-tools
Version:
Tools for managing Kubernetes (k8s) infrastructure within a Nx workspace.
106 lines (103 loc) • 2.89 kB
JavaScript
import {
withRunGenerator
} from "./chunk-HXMLPGRB.mjs";
import {
writeDebug
} from "./chunk-TOP3LZ4E.mjs";
// src/generators/helm-dependency/generator.ts
import {
formatFiles,
readProjectConfiguration,
updateProjectConfiguration
} from "@nx/devkit";
import { parse, stringify } from "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 = parse(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, stringify(chartContents));
}
} catch (error) {
console.error(error);
throw new Error("Failed to parse Chart.yaml");
}
}
export {
helmDependencyGeneratorFn,
generator_default
};