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