diff --git a/src/common/fs/exec-file.injectable.ts b/src/common/fs/exec-file.injectable.ts index 510fa025e4..15d0ad48dc 100644 --- a/src/common/fs/exec-file.injectable.ts +++ b/src/common/fs/exec-file.injectable.ts @@ -3,20 +3,23 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; +import type { ExecFileOptions } from "child_process"; import { execFile } from "child_process"; import { promisify } from "util"; -export type ExecFile = (filePath: string, args: string[]) => Promise; +export type ExecFile = (filePath: string, args: string[], options: ExecFileOptions) => Promise; const execFileInjectable = getInjectable({ id: "exec-file", - instantiate: (): ExecFile => async (filePath, args) => { + instantiate: (): ExecFile => { const asyncExecFile = promisify(execFile); - const result = await asyncExecFile(filePath, args); + return async (filePath, args, options) => { + const result = await asyncExecFile(filePath, args, options); - return result.stdout; + return result.stdout; + }; }, causesSideEffects: true, diff --git a/src/main/helm/exec-helm/exec-helm.injectable.ts b/src/main/helm/exec-helm/exec-helm.injectable.ts index 97062d22eb..dbe65eda34 100644 --- a/src/main/helm/exec-helm/exec-helm.injectable.ts +++ b/src/main/helm/exec-helm/exec-helm.injectable.ts @@ -8,7 +8,7 @@ import helmBinaryPathInjectable from "../helm-binary-path.injectable"; import type { AsyncResult } from "../../../common/utils/async-result"; import { getErrorMessage } from "../../../common/utils/get-error-message"; -export type ExecHelm = (...args: string[]) => Promise>; +export type ExecHelm = (args: string[]) => Promise>; const execHelmInjectable = getInjectable({ id: "exec-helm", @@ -17,9 +17,11 @@ const execHelmInjectable = getInjectable({ const execFile = di.inject(execFileInjectable); const helmBinaryPath = di.inject(helmBinaryPathInjectable); - return async (...args) => { + return async (args) => { try { - const response = await execFile(helmBinaryPath, args); + const response = await execFile(helmBinaryPath, args, { + maxBuffer: 32 * 1024 * 1024 * 1024, // 32 MiB + }); return { callWasSuccessful: true, response }; } catch (error) { diff --git a/src/main/helm/get-helm-env/get-helm-env.injectable.ts b/src/main/helm/get-helm-env/get-helm-env.injectable.ts index f4bf4cf739..d6c362a17b 100644 --- a/src/main/helm/get-helm-env/get-helm-env.injectable.ts +++ b/src/main/helm/get-helm-env/get-helm-env.injectable.ts @@ -18,7 +18,7 @@ const getHelmEnvInjectable = getInjectable({ const execHelm = di.inject(execHelmInjectable); return async (): Promise> => { - const result = await execHelm("env"); + const result = await execHelm(["env"]); if (!result.callWasSuccessful) { return { callWasSuccessful: false, error: result.error }; diff --git a/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts b/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts index 960fb0f860..490c67273e 100644 --- a/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts +++ b/src/main/helm/helm-service/get-helm-release-resources/call-for-helm-manifest/call-for-helm-manifest.injectable.ts @@ -19,7 +19,7 @@ const callForHelmManifestInjectable = getInjectable({ namespace: string, kubeconfigPath: string, ): Promise> => { - const result = await execHelm( + const result = await execHelm([ "get", "manifest", name, @@ -27,7 +27,7 @@ const callForHelmManifestInjectable = getInjectable({ namespace, "--kubeconfig", kubeconfigPath, - ); + ]); if (!result.callWasSuccessful) { return { callWasSuccessful: false, error: result.error }; diff --git a/src/main/helm/helm-service/get-helm-release.injectable.ts b/src/main/helm/helm-service/get-helm-release.injectable.ts index 79177415a2..3733b2816d 100644 --- a/src/main/helm/helm-service/get-helm-release.injectable.ts +++ b/src/main/helm/helm-service/get-helm-release.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import loggerInjectable from "../../../common/logger.injectable"; import { isObject, json } from "../../../common/utils"; -import { execHelm } from "../exec"; +import execHelmInjectable from "../exec-helm/exec-helm.injectable"; import getHelmReleaseResourcesInjectable from "./get-helm-release-resources/get-helm-release-resources.injectable"; const getHelmReleaseInjectable = getInjectable({ @@ -14,6 +14,7 @@ const getHelmReleaseInjectable = getInjectable({ instantiate: (di) => { const logger = di.inject(loggerInjectable); + const execHelm = di.inject(execHelmInjectable); const getHelmReleaseResources = di.inject(getHelmReleaseResourcesInjectable); return async (cluster: Cluster, releaseName: string, namespace: string) => { @@ -34,11 +35,13 @@ const getHelmReleaseInjectable = getInjectable({ "json", ]; - const release = json.parse( - await execHelm(args, { - maxBuffer: 32 * 1024 * 1024 * 1024, // 32 MiB - }), - ); + const result = await execHelm(args); + + if (!result.callWasSuccessful) { + return undefined; + } + + const release = json.parse(result.response); if (!isObject(release) || Array.isArray(release)) { return undefined; diff --git a/src/main/helm/repositories/add-helm-repository/add-helm-repository.injectable.ts b/src/main/helm/repositories/add-helm-repository/add-helm-repository.injectable.ts index aa898eb099..73283884c3 100644 --- a/src/main/helm/repositories/add-helm-repository/add-helm-repository.injectable.ts +++ b/src/main/helm/repositories/add-helm-repository/add-helm-repository.injectable.ts @@ -54,7 +54,7 @@ const addHelmRepositoryInjectable = getInjectable({ args.push("--cert-file", certFile); } - return await execHelm(...args); + return await execHelm(args); }; }, }); diff --git a/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts b/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts index d1b0c64311..c4fb86451b 100644 --- a/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts +++ b/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts @@ -75,7 +75,7 @@ const getActiveHelmRepositoriesInjectable = getInjectable({ }; } - const updateResult = await execHelm("repo", "update"); + const updateResult = await execHelm(["repo", "update"]); if (!updateResult.callWasSuccessful) { if (!updateResult.error.includes(internalHelmErrorForNoRepositoriesFound)) { @@ -84,7 +84,7 @@ const getActiveHelmRepositoriesInjectable = getInjectable({ error: `Error updating Helm repositories: ${updateResult.error}`, }; } - const resultOfAddingDefaultRepository = await execHelm("repo", "add", "bitnami", "https://charts.bitnami.com/bitnami"); + const resultOfAddingDefaultRepository = await execHelm(["repo", "add", "bitnami", "https://charts.bitnami.com/bitnami"]); if (!resultOfAddingDefaultRepository.callWasSuccessful) { return { diff --git a/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts b/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts index 21f37490bc..c858667f6a 100644 --- a/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts +++ b/src/main/helm/repositories/remove-helm-repository/remove-helm-repository.injectable.ts @@ -17,11 +17,11 @@ const removeHelmRepositoryInjectable = getInjectable({ return async (repo: HelmRepo) => { logger.info(`[HELM]: removing repo ${repo.name} (${repo.url})`); - return execHelm( + return execHelm([ "repo", "remove", repo.name, - ); + ]); }; }, });