Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/ide/jetbrains/image/BUILD.js
2499 views
1
// Copyright (c) 2022 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
const ideConfigs = [
6
{
7
name: "intellij",
8
productCode: "IIU",
9
},
10
{
11
name: "goland",
12
productCode: "GO",
13
},
14
{
15
name: "pycharm",
16
productCode: "PCP",
17
},
18
{
19
name: "phpstorm",
20
productCode: "PS",
21
},
22
{
23
name: "rubymine",
24
productCode: "RM",
25
},
26
{
27
name: "webstorm",
28
productCode: "WS",
29
},
30
{
31
name: "rider",
32
productCode: "RD",
33
},
34
{
35
name: "clion",
36
productCode: "CL",
37
},
38
{
39
name: "rustrover",
40
productCode: "RR",
41
},
42
];
43
44
const getIDEVersion = function (qualifier, url) {
45
if (qualifier == "latest") {
46
return args.jbBackendVersion;
47
} else {
48
// https://download.jetbrains.com/idea/ideaIU-2022.2.4.tar.gz
49
const str = url.split("-");
50
return str[str.length - 1].replace(".tar.gz", "");
51
}
52
};
53
54
const packages = [];
55
const generateIDEBuildPackage = function (ideConfig, qualifier) {
56
let name = ideConfig.name + (qualifier === "stable" ? "" : "-" + qualifier);
57
let helmName = ideConfig.name + (qualifier === "stable" ? "" : "Latest");
58
let pkg = {
59
name,
60
type: "docker",
61
srcs: ["startup.sh", `supervisor-ide-config_${name}.json`],
62
deps: [`:download-${name}`, "components/ide/jetbrains/cli:app"],
63
config: {
64
dockerfile: "leeway.Dockerfile",
65
metadata: {
66
"helm-component": `workspace.desktopIdeImages.${helmName}`,
67
},
68
buildArgs: {
69
JETBRAINS_DOWNLOAD_QUALIFIER: name,
70
SUPERVISOR_IDE_CONFIG: `supervisor-ide-config_${name}.json`,
71
JETBRAINS_BACKEND_QUALIFIER: qualifier,
72
JETBRAINS_BACKEND_VERSION: getIDEVersion(qualifier, args[`${ideConfig.name}DownloadUrl`]),
73
},
74
image: [],
75
},
76
};
77
if (qualifier === "stable") {
78
pkg.config.image.push(`${args.imageRepoBase}/ide/${ideConfig.name}` + ":commit-${__git_commit}");
79
} else {
80
if (args.version === "latest") {
81
pkg.config.image.push(`${args.imageRepoBase}/ide/${ideConfig.name}:${args.version}`);
82
} else {
83
pkg.config.image.push(`${args.imageRepoBase}/ide/${ideConfig.name}` + ":commit-${__git_commit}-latest");
84
}
85
}
86
return pkg;
87
};
88
const generateIDEDownloadPackage = function (ideConfig, qualifier) {
89
let name = "download-" + ideConfig.name + (qualifier === "stable" ? "" : "-" + qualifier);
90
let pkg = {
91
name,
92
type: "generic",
93
srcs: ["download.sh"],
94
env: [],
95
config: {
96
commands: [["./download.sh"]],
97
},
98
deps: [],
99
};
100
if (qualifier === "stable") {
101
pkg.env.push(`JETBRAINS_BACKEND_URL=${args[`${ideConfig.name}DownloadUrl`]}`);
102
} else {
103
let url = `https://download.jetbrains.com/product?type=release,rc,eap&distribution=linux&code=${ideConfig.productCode}`;
104
if (args["buildNumber"]) {
105
url = `${url}&build=${args["buildNumber"]}`;
106
} else {
107
pkg.srcs.push("resolve-latest-ide-version.sh");
108
pkg.deps.push("components/ide/jetbrains/backend-plugin:latest-info");
109
pkg.env.push("PRODUCT_CODE=" + ideConfig.productCode);
110
pkg.env.push("PARSE_URL_FROM_LATEST_INFO=true");
111
}
112
pkg.env.push(`JETBRAINS_BACKEND_URL=${url}`);
113
}
114
return pkg;
115
};
116
117
for (let ideConfig of ideConfigs) {
118
packages.push(generateIDEDownloadPackage(ideConfig, "stable"));
119
packages.push(generateIDEDownloadPackage(ideConfig, "latest"));
120
packages.push(generateIDEBuildPackage(ideConfig, "stable"));
121
packages.push(generateIDEBuildPackage(ideConfig, "latest"));
122
}
123
124
packages.push({
125
name: "docker",
126
type: "generic",
127
deps: packages.map((d) => ":" + d.name),
128
});
129
130