Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/ide/gha-update-image/lib/jb-pin-version.ts
2499 views
1
// Copyright (c) 2024 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
import {
6
getLatestInstallerVersions,
7
pathToConfigmap,
8
readIDEConfigmapJson,
9
readWorkspaceYaml,
10
IWorkspaceYaml,
11
getIDEVersionOfImage,
12
renderInstallerIDEConfigMap,
13
} from "./common";
14
15
const configmap = await readIDEConfigmapJson().then((d) => d.rawObj);
16
17
const getIDEVersion = function (workspaceYaml: IWorkspaceYaml, ide: string) {
18
const url = workspaceYaml.defaultArgs[`${ide}DownloadUrl` as keyof typeof workspaceYaml.defaultArgs];
19
const str = url.split("-");
20
if (str.length < 2) {
21
return undefined;
22
}
23
24
return str.at(-1)!.replace(".tar.gz", "");
25
};
26
27
export const appendPinVersionsIntoIDEConfigMap = async (updatedIDEs: string[] | undefined) => {
28
const latestInstallerVersions = await getLatestInstallerVersions();
29
const workspaceYaml = await readWorkspaceYaml().then((d) => d.parsedObj);
30
31
for (const [ide, versionObject] of Object.entries(latestInstallerVersions.components.workspace.desktopIdeImages)) {
32
if (
33
ide.includes("Latest") ||
34
["codeDesktop", "codeDesktopInsiders", "jbLauncher", "jbBackendPlugin", "jbBackendPluginLatest", "jbBackendPluginRider", "jbBackendPluginLatestRider"].includes(
35
ide,
36
)
37
) {
38
// Filter all non-IDE and non-jetbrains entries
39
continue;
40
}
41
42
const ideVersion = getIDEVersion(workspaceYaml, ide);
43
44
console.debug(`Processing ${ide} ${ideVersion}...`);
45
46
const ideConfigMap = await renderInstallerIDEConfigMap(undefined)
47
48
if (Object.keys(configmap.ideOptions.options).includes(ide)) {
49
const { version: installerImageVersion } = versionObject;
50
51
const previousVersion = await getIDEVersionOfImage(ideConfigMap.ideOptions.options[ide].image);
52
const previousInfo = {
53
version: previousVersion,
54
image: ideConfigMap.ideOptions.options[ide].image.replaceAll("eu.gcr.io/gitpod-core-dev/build", "{{.Repository}}"),
55
imageLayers: ideConfigMap.ideOptions.options[ide].imageLayers.map((e: string) => e.replaceAll("eu.gcr.io/gitpod-core-dev/build", "{{.Repository}}")),
56
};
57
58
if (!updatedIDEs || !updatedIDEs.includes(ide)) {
59
console.log(`Ignore latest version (${ide}:${installerImageVersion})`);
60
continue;
61
}
62
if (!configmap.ideOptions.options[ide].versions) {
63
configmap.ideOptions.options[ide].versions = []
64
}
65
console.log(`Added ${ide} (new ${previousInfo.image})`);
66
configmap.ideOptions.options[ide].versions.unshift(previousInfo);
67
}
68
}
69
70
await Bun.write(pathToConfigmap, JSON.stringify(configmap, null, 2) + "\n");
71
console.log(`File updated: ${pathToConfigmap}`);
72
};
73
74