Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/ide/gha-update-image/index-jb-nightly.ts
2498 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
// Update JetBrains latest editor images
6
//
7
// ```
8
// bun run index-jb-nightly.ts --task=<id> --productCode=<code>
9
// ```
10
11
import { $ } from "bun";
12
import { appendGitHubOutput, pathToBackendPluginGradleLatest, readWorkspaceYaml } from "./lib/common";
13
import { maybeCompatible, parseGradleProperties, parseGradlePropertiesFromTaskConfig } from "./lib/jb-helper/jb-helper";
14
import { fetchProductReleases, ReleaseItem, releaseItemStr } from "./lib/jb-helper/jb-releases";
15
import { getTaskFromArgs } from "./lib/jb-helper/jb-gradle-task-config";
16
17
$.nothrow(); // git likes to respond with non-zero codes, but it is alright for us
18
19
const task = getTaskFromArgs(true);
20
21
if (task.id !== 1) {
22
throw new Error(`Only task 1 is supported, got ${task.id}`);
23
}
24
25
console.log(`Updating nightly editor for ${task.productId} (${task.productType})`);
26
27
const { parsedObj: parsedWorkspaceYaml } = await readWorkspaceYaml();
28
29
const downloadUrl = parsedWorkspaceYaml.defaultArgs[task.productId + "DownloadUrl"] as string;
30
31
const latestGradle = parseGradleProperties(await Bun.file(pathToBackendPluginGradleLatest).text());
32
33
const platformVersionType = "build";
34
35
const releases = await fetchProductReleases({ productCode: task.productCode, productType: task.productType });
36
37
let maybeCompatibleRelease: ReleaseItem | undefined;
38
for (const release of releases) {
39
switch (platformVersionType) {
40
case "build": {
41
const ok = maybeCompatible(release, latestGradle);
42
if (ok) {
43
maybeCompatibleRelease = release;
44
break;
45
} else {
46
console.error(`${releaseItemStr(release)} incompatible`);
47
}
48
}
49
}
50
if (maybeCompatibleRelease) {
51
break;
52
}
53
}
54
55
if (maybeCompatibleRelease) {
56
console.log(`${releaseItemStr(maybeCompatibleRelease)} maybe compatible`);
57
}
58
59
const targetRelease = maybeCompatibleRelease || releases.find((e) => e.downloads.linux?.link === downloadUrl);
60
61
if (!targetRelease) {
62
throw new Error(`No compatible release found`);
63
}
64
65
console.log(`Preparing to use ${releaseItemStr(targetRelease)} as latest version for ${task.productId}`);
66
67
const targetConfig = parseGradlePropertiesFromTaskConfig(task, targetRelease);
68
69
// TODO: actually update nightly editor
70
console.log(
71
`Going to exec \`leeway build -Dversion=latest -DimageRepoBase=$imageRepoBase -DbuildNumber=${targetConfig.platformVersion} components/ide/jetbrains/image:${task.productId}-latest -DjbBackendVersion=${targetRelease.version}\``,
72
);
73
74
appendGitHubOutput(`buildNumber=${targetConfig.platformVersion}`);
75
appendGitHubOutput(`image=${task.productId}`);
76
appendGitHubOutput(`jbBackendVersion=${targetRelease.version}`);
77
appendGitHubOutput(`editorSummary=${releaseItemStr(targetRelease)}`);
78
79