diff --git a/src/main/helm/helm-release-manager.ts b/src/main/helm/helm-release-manager.ts index b8a18a1021..571628789e 100644 --- a/src/main/helm/helm-release-manager.ts +++ b/src/main/helm/helm-release-manager.ts @@ -43,8 +43,8 @@ export async function listReleases(pathToKubeconfig: string, namespace?: string) }); return output; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } @@ -72,8 +72,8 @@ export async function installChart(chart: string, values: any, name: string | un namespace } }; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } finally { await fse.unlink(fileName); } @@ -93,8 +93,8 @@ export async function upgradeRelease(name: string, chart: string, values: any, n log: stdout, release: getRelease(name, namespace, cluster) }; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } finally { await fse.unlink(fileName); } @@ -111,8 +111,8 @@ export async function getRelease(name: string, namespace: string, cluster: Clust release.resources = await getResources(name, namespace, cluster); return release; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } @@ -122,8 +122,8 @@ export async function deleteRelease(name: string, namespace: string, pathToKubec const { stdout } = await promiseExec(`"${helm}" delete ${name} --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`); return stdout; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } @@ -139,8 +139,8 @@ export async function getValues(name: string, { namespace, all = false, pathToKu const { stdout } = await promiseExec(`"${helm}" get values ${name} ${all ? "--all" : ""} --output yaml --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`); return stdout; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } @@ -150,8 +150,8 @@ export async function getHistory(name: string, namespace: string, pathToKubeconf const { stdout } = await promiseExec(`"${helm}" history ${name} --output json --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`); return JSON.parse(stdout); - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } @@ -161,8 +161,8 @@ export async function rollback(name: string, namespace: string, revision: number const { stdout } = await promiseExec(`"${helm}" rollback ${name} ${revision} --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`); return stdout; - } catch ({ stderr }) { - throw stderr; + } catch (error) { + throw error?.stderr || error; } } diff --git a/src/main/routes/helm-route.ts b/src/main/routes/helm-route.ts index 2f217a3193..46112d7111 100644 --- a/src/main/routes/helm-route.ts +++ b/src/main/routes/helm-route.ts @@ -41,7 +41,7 @@ export class HelmApiRoute { respondJson(response, chart); } catch (error) { - respondText(response, error, 422); + respondText(response, error?.toString() || "Error getting chart", 422); } } @@ -53,7 +53,7 @@ export class HelmApiRoute { respondJson(response, values); } catch (error) { - respondText(response, error, 422); + respondText(response, error?.toString() || "Error getting chart values", 422); } } @@ -66,7 +66,7 @@ export class HelmApiRoute { respondJson(response, result, 201); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error installing chart", 422); } } @@ -79,7 +79,7 @@ export class HelmApiRoute { respondJson(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error updating chart", 422); } } @@ -92,7 +92,7 @@ export class HelmApiRoute { respondJson(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error rolling back chart", 422); } } @@ -105,7 +105,7 @@ export class HelmApiRoute { respondJson(response, result); } catch(error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error listing release", 422); } } @@ -118,7 +118,7 @@ export class HelmApiRoute { respondJson(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error getting release", 422); } } @@ -132,7 +132,7 @@ export class HelmApiRoute { respondText(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error getting release values", 422); } } @@ -145,7 +145,7 @@ export class HelmApiRoute { respondJson(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error getting release history", 422); } } @@ -158,7 +158,7 @@ export class HelmApiRoute { respondJson(response, result); } catch (error) { logger.debug(error); - respondText(response, error, 422); + respondText(response, error?.toString() || "Error deleting release", 422); } } } diff --git a/src/renderer/components/+apps-releases/release-details.scss b/src/renderer/components/+apps-releases/release-details.scss index 112ee6b578..759bd5cec4 100644 --- a/src/renderer/components/+apps-releases/release-details.scss +++ b/src/renderer/components/+apps-releases/release-details.scss @@ -26,6 +26,11 @@ align-items: center; } + .loading-error { + color: red; + text-align: center; + } + .status { @include release-status-bgs; } diff --git a/src/renderer/components/+apps-releases/release-details.tsx b/src/renderer/components/+apps-releases/release-details.tsx index 4e93136c03..be316985f5 100644 --- a/src/renderer/components/+apps-releases/release-details.tsx +++ b/src/renderer/components/+apps-releases/release-details.tsx @@ -56,12 +56,13 @@ interface Props { @observer export class ReleaseDetails extends Component { - @observable details: IReleaseDetails; + @observable details: IReleaseDetails | null = null; @observable values = ""; @observable valuesLoading = false; @observable showOnlyUserSuppliedValues = false; @observable saving = false; @observable releaseSecret: Secret; + @observable error?: string = undefined; componentDidMount() { disposeOnUnmount(this, [ @@ -96,9 +97,13 @@ export class ReleaseDetails extends Component { async loadDetails() { const { release } = this.props; - - this.details = null; - this.details = await getRelease(release.getName(), release.getNs()); + + try { + this.details = null; + this.details = await getRelease(release.getName(), release.getNs()); + } catch (error) { + this.error = `Failed to get release details: ${error}`; + } } async loadValues() { @@ -237,11 +242,18 @@ export class ReleaseDetails extends Component { renderContent() { const { release } = this.props; - const { details } = this; if (!release) return null; - if (!details) { + if (this.error) { + return ( +
+ {this.error} +
+ ); + } + + if (!this.details) { return ; }