mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Making apiBase injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Convert all of Helm functions to be DI Signed-off-by: Sebastian Malton <sebastian@malton.name> * Make PortForward's use of apiBase fully injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Convert all metric requests to be injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace resource applier with injectables Signed-off-by: Sebastian Malton <sebastian@malton.name> * Switch KubeJsonApi.forCluster to be injectable but do not use Signed-off-by: Sebastian Malton <sebastian@malton.name> * Convert the rest of shell sessions to be DI-ed - This is a prerequesit for using the new createKubeJsonApiForClusterInjectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Use new createKubeJsonApiForClusterInjectable for openNodeShellSession Signed-off-by: Sebastian Malton <sebastian@malton.name> * Make KubeconfigDialog injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove jest-fetch-mock and make fetch injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests with new global override Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add new injectable for create KubeJsonApi and JsonApi instances Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix showing-details-for-helm-release behavioural tests - Remove HelmChartStore in favour of all injectables - Create a model for UpgradeChartDockTab Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix show details and updating helm releases tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix residual typing issues related to metrics Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix crash on load due to circular dependency Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix create resource tab not working Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove legacy apiBase global Signed-off-by: Sebastian Malton <sebastian@malton.name> * Introduce and use isDebuggingInjectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Introduce and use windowLocationInjectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove global legacy apiKube Signed-off-by: Sebastian Malton <sebastian@malton.name> * Improve injectable filenames compared to the injectables inside Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove modifying input in requestActivePortForwardInjectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Introduce and use get(Milli)SecondsFromUnixEpochInjectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Switch to non-reactive way of gettting possible helm release versions Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix typo Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix bug in KubeApi constructor Signed-off-by: Sebastian Malton <sebastian@malton.name> * Convert all KubeApi related tests to use asyncFn Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit tests after introducing new injectables that have side effects Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix bad rebase causing tests to fail Signed-off-by: Sebastian Malton <sebastian@malton.name> * Improve expects for multiple field values Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix crash will looking up api refs Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix breaking change on KubeApi.list Signed-off-by: Sebastian Malton <sebastian@malton.name> * Better fix for formatting urls Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove injectable for time since we should just use useMockTime Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add happy path behavioural tests for upgrade chart tab Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove debug message Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots Signed-off-by: Sebastian Malton <sebastian@malton.name> * fix showing-details-for-helm-release tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix installing-helm-chart-from-new-tab tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests relating to hosted cluster id Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots to recent changes in master Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> * Reupdated upgrade chart new tab test snapshots Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix flakiness in unit test when using <Animated> Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix flakiness and improve tests for DeleteClusterDialog Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix kubeconfig-sync tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix <Extensions> tests by removing mockFs and making everything injectable Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix build issues Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix getElectronAppPathInjectable override not returning absolute paths - Also fixes the listing-active-helm-repos-in-prefs tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace all uses of getAbsolutePath with joinPaths as it is more correct and less confusing Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix opening application window tests by making override properly absolute Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots relating no longer using getAbsolutePath Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix and add behavioural tests for RenderDelay Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix extension discovery tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix test flakiness because of path side effects, propagate uses to as many places Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix extension-discovery tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add global override to fix some tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Rewrite and fix implementation of KubeconfigManager and its tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests by global override pathExists Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit tests failing on windows by using injectable verions of path functions Signed-off-by: Sebastian Malton <sebastian@malton.name> * Attempt to fix test timeout by using runInAction Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots after rebase Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots after rebase Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests after rebase Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix setupIpcMainHandlers usage Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots Signed-off-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com> Co-authored-by: Iku-turso <mikko.aspiala@gmail.com>
105 lines
3.6 KiB
TypeScript
105 lines
3.6 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 extensionDiscoveryInjectable from "../../../../../extensions/extension-discovery/extension-discovery.injectable";
|
|
import React from "react";
|
|
import type { LensExtensionId, LensExtensionManifest } from "../../../../../extensions/lens-extension";
|
|
import { getMessageFromError } from "../../get-message-from-error/get-message-from-error";
|
|
import type { InstallRequest } from "../install-request";
|
|
import { validatePackage } from "../validate-package/validate-package";
|
|
import joinPathsInjectable from "../../../../../common/path/join-paths.injectable";
|
|
import tempDirectoryPathInjectable from "../../../../../common/os/temp-directory-path.injectable";
|
|
import ensureDirInjectable from "../../../../../common/fs/ensure-dir.injectable";
|
|
import writeFileInjectable from "../../../../../common/fs/write-file.injectable";
|
|
import loggerInjectable from "../../../../../common/logger.injectable";
|
|
import showErrorNotificationInjectable from "../../../notifications/show-error-notification.injectable";
|
|
|
|
export interface InstallRequestValidated {
|
|
fileName: string;
|
|
data: Buffer;
|
|
id: LensExtensionId;
|
|
manifest: LensExtensionManifest;
|
|
tempFile: string; // temp system path to packed extension for unpacking
|
|
}
|
|
|
|
export type CreateTempFilesAndValidate = (req: InstallRequest) => Promise<InstallRequestValidated | null>;
|
|
|
|
const createTempFilesAndValidateInjectable = getInjectable({
|
|
id: "create-temp-files-and-validate",
|
|
|
|
instantiate: (di) => {
|
|
const extensionDiscovery = di.inject(extensionDiscoveryInjectable);
|
|
const joinPaths = di.inject(joinPathsInjectable);
|
|
const tempDirectoryPath = di.inject(tempDirectoryPathInjectable);
|
|
const ensureDir = di.inject(ensureDirInjectable);
|
|
const writeFile = di.inject(writeFileInjectable);
|
|
const logger = di.inject(loggerInjectable);
|
|
const showErrorNotification = di.inject(showErrorNotificationInjectable);
|
|
|
|
const baseTempExtensionsDirectory = joinPaths(tempDirectoryPath, "lens-extensions");
|
|
const getExtensionPackageTemp = (fileName: string) => joinPaths(baseTempExtensionsDirectory, fileName);
|
|
|
|
return async ({
|
|
fileName,
|
|
dataP,
|
|
}: InstallRequest): Promise<InstallRequestValidated | null> => {
|
|
// copy files to temp
|
|
await ensureDir(baseTempExtensionsDirectory);
|
|
|
|
// validate packages
|
|
const tempFile = getExtensionPackageTemp(fileName);
|
|
|
|
try {
|
|
const data = await dataP;
|
|
|
|
if (!data) {
|
|
return null;
|
|
}
|
|
|
|
await writeFile(tempFile, data);
|
|
logger.info("validating package", tempFile);
|
|
const manifest = await validatePackage(tempFile);
|
|
const id = joinPaths(
|
|
extensionDiscovery.nodeModulesPath,
|
|
manifest.name,
|
|
"package.json",
|
|
);
|
|
|
|
return {
|
|
fileName,
|
|
data,
|
|
manifest,
|
|
tempFile,
|
|
id,
|
|
};
|
|
} catch (error) {
|
|
const message = getMessageFromError(error);
|
|
|
|
logger.info(
|
|
`[EXTENSION-INSTALLATION]: installing ${fileName} has failed: ${message}`,
|
|
{ error },
|
|
);
|
|
showErrorNotification(
|
|
<div className="flex column gaps">
|
|
<p>
|
|
{"Installing "}
|
|
<em>{fileName}</em>
|
|
{" has failed, skipping."}
|
|
</p>
|
|
<p>
|
|
{"Reason: "}
|
|
<em>{message}</em>
|
|
</p>
|
|
</div>,
|
|
);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
},
|
|
});
|
|
|
|
export default createTempFilesAndValidateInjectable;
|