1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/main/helm/install-helm-chart.injectable.ts
Sebastian Malton 120a5f757d Fix tests by faking the version detector
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2023-01-10 15:18:13 -05:00

94 lines
2.2 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { dump } from "js-yaml";
import tempy from "tempy";
import type { JsonValue } from "type-fest";
import removePathInjectable from "../../common/fs/remove-path.injectable";
import writeFileInjectable from "../../common/fs/write-file.injectable";
import execHelmInjectable from "./exec-helm/exec-helm.injectable";
export interface InstallHelmChartData {
chart: string;
values: JsonValue;
name: string;
namespace: string;
version: string;
kubeconfigPath: string;
}
export interface InstallHelmChartResult {
log: string;
release: {
name: string;
namespace: string;
};
}
export type InstallHelmChart = (data: InstallHelmChartData) => Promise<InstallHelmChartResult>;
const installHelmChartInjectable = getInjectable({
id: "install-helm-chart",
instantiate: (di): InstallHelmChart => {
const writeFile = di.inject(writeFileInjectable);
const removePath = di.inject(removePathInjectable);
const execHelm = di.inject(execHelmInjectable);
return async ({
chart,
kubeconfigPath,
name,
namespace,
values,
version,
}) => {
const valuesFilePath = tempy.file({ name: "values.yaml" });
await writeFile(valuesFilePath, dump(values));
const args = ["install"];
if (name) {
args.push(name);
}
args.push(
chart,
"--version", version,
"--values", valuesFilePath,
"--namespace", namespace,
"--kubeconfig", kubeconfigPath,
);
if (!name) {
args.push("--generate-name");
}
try {
const result = await execHelm(args);
if (!result.callWasSuccessful) {
throw result.error;
}
const output = result.response;
const releaseName = output.split("\n")[0].split(" ")[1].trim();
return {
log: output,
release: {
name: releaseName,
namespace,
},
};
} finally {
await removePath(valuesFilePath);
}
};
},
});
export default installHelmChartInjectable;