diff --git a/package.json b/package.json index 297e37e16b..ba4c5d4254 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "OpenLens", "description": "OpenLens - Open Source IDE for Kubernetes", "homepage": "https://github.com/lensapp/lens", - "version": "5.0.0-beta.10", + "version": "5.0.0-beta.11", "main": "static/build/main.js", "copyright": "© 2021 OpenLens Authors", "license": "MIT", diff --git a/src/migrations/hotbar-store/5.0.0-beta.11.ts b/src/migrations/hotbar-store/5.0.0-beta.11.ts new file mode 100644 index 0000000000..9ad4feb0bf --- /dev/null +++ b/src/migrations/hotbar-store/5.0.0-beta.11.ts @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import { app } from "electron"; +import fse from "fs-extra"; +import path from "path"; +import * as uuid from "uuid"; +import type { ClusterStoreModel } from "../../common/cluster-store"; +import { defaultHotbarCells, Hotbar } from "../../common/hotbar-store"; +import type { MigrationDeclaration } from "../helpers"; + +interface Pre500WorkspaceStoreModel { + workspaces: { + id: string; + name: string; + }[]; +} + +export default { + version: "5.0.0-beta.11", + run(store) { + const hotbars: Hotbar[] = store.get("hotbars"); + const userDataPath = app.getPath("userData"); + + try { + const workspaceStoreData: Pre500WorkspaceStoreModel = fse.readJsonSync(path.join(userDataPath, "lens-workspace-store.json")); + const { clusters }: ClusterStoreModel = fse.readJSONSync(path.join(userDataPath, "lens-cluster-store.json")); + const workspaceHotbars = new Map(); // mapping from WorkspaceId to HotBar + + for (const { id, name } of workspaceStoreData.workspaces) { + workspaceHotbars.set(id, { + id: uuid.v4(), // don't use the old IDs as they aren't necessarily UUIDs + items: [], + name, + }); + } + + for (const cluster of clusters) { + const workspaceHotbar = workspaceHotbars.get(cluster.workspace); + + if (workspaceHotbar?.items.length < defaultHotbarCells) { + workspaceHotbar.items.push({ + entity: { + uid: cluster.id, + name: cluster.preferences.clusterName || cluster.contextName, + } + }); + } + } + + for (const hotbar of workspaceHotbars.values()) { + while (hotbar.items.length < defaultHotbarCells) { + hotbar.items.push(null); + } + + hotbars.push(hotbar); + } + + store.set("hotbars", hotbars); + } catch (error) { + if (!(error.code === "ENOENT" && error.path.endsWith("lens-workspace-store.json"))) { + // ignore lens-workspace-store.json being missing + throw error; + } + } + } +} as MigrationDeclaration; diff --git a/src/migrations/hotbar-store/index.ts b/src/migrations/hotbar-store/index.ts index 899429cf2a..a18a27bcad 100644 --- a/src/migrations/hotbar-store/index.ts +++ b/src/migrations/hotbar-store/index.ts @@ -26,9 +26,11 @@ import { joinMigrations } from "../helpers"; import version500alpha0 from "./5.0.0-alpha.0"; import version500alpha2 from "./5.0.0-alpha.2"; import version500beta5 from "./5.0.0-beta.5"; +import version500beta11 from "./5.0.0-beta.11"; export default joinMigrations( version500alpha0, version500alpha2, version500beta5, + version500beta11, );