Path: blob/main/components/ide/gha-update-image/lib/jb-pin-version.ts
2499 views
// Copyright (c) 2024 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34import {5getLatestInstallerVersions,6pathToConfigmap,7readIDEConfigmapJson,8readWorkspaceYaml,9IWorkspaceYaml,10getIDEVersionOfImage,11renderInstallerIDEConfigMap,12} from "./common";1314const configmap = await readIDEConfigmapJson().then((d) => d.rawObj);1516const getIDEVersion = function (workspaceYaml: IWorkspaceYaml, ide: string) {17const url = workspaceYaml.defaultArgs[`${ide}DownloadUrl` as keyof typeof workspaceYaml.defaultArgs];18const str = url.split("-");19if (str.length < 2) {20return undefined;21}2223return str.at(-1)!.replace(".tar.gz", "");24};2526export const appendPinVersionsIntoIDEConfigMap = async (updatedIDEs: string[] | undefined) => {27const latestInstallerVersions = await getLatestInstallerVersions();28const workspaceYaml = await readWorkspaceYaml().then((d) => d.parsedObj);2930for (const [ide, versionObject] of Object.entries(latestInstallerVersions.components.workspace.desktopIdeImages)) {31if (32ide.includes("Latest") ||33["codeDesktop", "codeDesktopInsiders", "jbLauncher", "jbBackendPlugin", "jbBackendPluginLatest", "jbBackendPluginRider", "jbBackendPluginLatestRider"].includes(34ide,35)36) {37// Filter all non-IDE and non-jetbrains entries38continue;39}4041const ideVersion = getIDEVersion(workspaceYaml, ide);4243console.debug(`Processing ${ide} ${ideVersion}...`);4445const ideConfigMap = await renderInstallerIDEConfigMap(undefined)4647if (Object.keys(configmap.ideOptions.options).includes(ide)) {48const { version: installerImageVersion } = versionObject;4950const previousVersion = await getIDEVersionOfImage(ideConfigMap.ideOptions.options[ide].image);51const previousInfo = {52version: previousVersion,53image: ideConfigMap.ideOptions.options[ide].image.replaceAll("eu.gcr.io/gitpod-core-dev/build", "{{.Repository}}"),54imageLayers: ideConfigMap.ideOptions.options[ide].imageLayers.map((e: string) => e.replaceAll("eu.gcr.io/gitpod-core-dev/build", "{{.Repository}}")),55};5657if (!updatedIDEs || !updatedIDEs.includes(ide)) {58console.log(`Ignore latest version (${ide}:${installerImageVersion})`);59continue;60}61if (!configmap.ideOptions.options[ide].versions) {62configmap.ideOptions.options[ide].versions = []63}64console.log(`Added ${ide} (new ${previousInfo.image})`);65configmap.ideOptions.options[ide].versions.unshift(previousInfo);66}67}6869await Bun.write(pathToConfigmap, JSON.stringify(configmap, null, 2) + "\n");70console.log(`File updated: ${pathToConfigmap}`);71};727374