mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add bundled extensions version checker
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
6285ec4c9e
commit
a61121e5ca
@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import type { DownloadFileOptions } from "../../renderer/utils";
|
||||
import { BundledVersionChecker } from "../bundled-latest-version-checker";
|
||||
|
||||
process.env.BUNDLED_EXTENSIONS_URL = "https://someurl.com/versions.json";
|
||||
|
||||
describe("BundledExtensionsVersionChecker", () => {
|
||||
it("returns for non-bundled extensions", async () => {
|
||||
const checker = new BundledVersionChecker();
|
||||
|
||||
const version = await checker.getLatestVersion({
|
||||
name: "foo",
|
||||
version: "1.0.0"
|
||||
});
|
||||
|
||||
expect(version).toBeNull();
|
||||
});
|
||||
|
||||
it("returns null if json file not found", async () => {
|
||||
const downloadJson = (args: DownloadFileOptions) => {
|
||||
expect(args).toEqual({
|
||||
url: process.env.BUNDLED_EXTENSIONS_URL,
|
||||
});
|
||||
|
||||
return { promise: new Promise((resolve, reject) => {
|
||||
reject({ url: process.env.BUNDLED_EXTENSIONS_URL, error: "File not found" })
|
||||
}) };
|
||||
};
|
||||
|
||||
const checker = new BundledVersionChecker(downloadJson);
|
||||
|
||||
const version = await checker.getLatestVersion({
|
||||
name: "foo",
|
||||
version: "1.0.0"
|
||||
}, true);
|
||||
|
||||
expect(version).toBeNull();
|
||||
})
|
||||
|
||||
it("returns null if extension name not found in file", async () => {
|
||||
const downloadJson = (args: DownloadFileOptions) => {
|
||||
expect(args).toEqual({
|
||||
url: process.env.BUNDLED_EXTENSIONS_URL,
|
||||
});
|
||||
|
||||
return { promise: new Promise((resolve) => {
|
||||
resolve({
|
||||
"sample-foo": "v4.4.0",
|
||||
"sample-bar": "1.0.0"
|
||||
});
|
||||
}) };
|
||||
};
|
||||
|
||||
const checker = new BundledVersionChecker(downloadJson);
|
||||
|
||||
const version = await checker.getLatestVersion({
|
||||
name: "crd-extension",
|
||||
version: "1.0.0"
|
||||
}, true);
|
||||
|
||||
expect(version).toBeNull();
|
||||
});
|
||||
})
|
||||
52
src/extensions/bundled-latest-version-checker.ts
Normal file
52
src/extensions/bundled-latest-version-checker.ts
Normal file
@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import { SemVer } from "semver";
|
||||
import logger from "../common/logger";
|
||||
import { DownloadFileOptions, downloadJson } from "../renderer/utils";
|
||||
import type { LensExtensionManifest } from "./lens-extension";
|
||||
import type { LensExtensionLatestVersionChecker } from "./lens-extension-latest-version-checker";
|
||||
|
||||
type ExtensionName = string;
|
||||
type ExtensionVersion = string;
|
||||
type Versions = Record<ExtensionName, ExtensionVersion>;
|
||||
|
||||
export class BundledVersionChecker implements LensExtensionLatestVersionChecker {
|
||||
protected downloadJson;
|
||||
|
||||
constructor(downloadJsonOverride?: (args: DownloadFileOptions) => any) {
|
||||
this.downloadJson = downloadJsonOverride || downloadJson;
|
||||
}
|
||||
|
||||
public async getLatestVersion(manifest: LensExtensionManifest, isBundled?: boolean) {
|
||||
if (!isBundled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const updateUrl = process.env.BUNDLED_EXTENSIONS_URL;
|
||||
const json = await this.getJson(updateUrl);
|
||||
|
||||
if (!json || json.error || !json[manifest.name]) {
|
||||
logger.info(`[BUNDLED-EXTENSIONS-UPDATER]: No version found for ${manifest.name}.`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const version = json[manifest.name];
|
||||
|
||||
return {
|
||||
input: `${updateUrl}/${manifest.name}-${version}.tar`,
|
||||
version: new SemVer(version).version
|
||||
}
|
||||
}
|
||||
|
||||
protected async getJson(url: string): Promise<Versions> {
|
||||
const { promise } = this.downloadJson({ url });
|
||||
const json = await promise.catch(() => {
|
||||
// do nothing
|
||||
});
|
||||
|
||||
return json;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user