Path: blob/main/components/ide/gha-update-image/index-jb-nightly.ts
2498 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.34// Update JetBrains latest editor images5//6// ```7// bun run index-jb-nightly.ts --task=<id> --productCode=<code>8// ```910import { $ } from "bun";11import { appendGitHubOutput, pathToBackendPluginGradleLatest, readWorkspaceYaml } from "./lib/common";12import { maybeCompatible, parseGradleProperties, parseGradlePropertiesFromTaskConfig } from "./lib/jb-helper/jb-helper";13import { fetchProductReleases, ReleaseItem, releaseItemStr } from "./lib/jb-helper/jb-releases";14import { getTaskFromArgs } from "./lib/jb-helper/jb-gradle-task-config";1516$.nothrow(); // git likes to respond with non-zero codes, but it is alright for us1718const task = getTaskFromArgs(true);1920if (task.id !== 1) {21throw new Error(`Only task 1 is supported, got ${task.id}`);22}2324console.log(`Updating nightly editor for ${task.productId} (${task.productType})`);2526const { parsedObj: parsedWorkspaceYaml } = await readWorkspaceYaml();2728const downloadUrl = parsedWorkspaceYaml.defaultArgs[task.productId + "DownloadUrl"] as string;2930const latestGradle = parseGradleProperties(await Bun.file(pathToBackendPluginGradleLatest).text());3132const platformVersionType = "build";3334const releases = await fetchProductReleases({ productCode: task.productCode, productType: task.productType });3536let maybeCompatibleRelease: ReleaseItem | undefined;37for (const release of releases) {38switch (platformVersionType) {39case "build": {40const ok = maybeCompatible(release, latestGradle);41if (ok) {42maybeCompatibleRelease = release;43break;44} else {45console.error(`${releaseItemStr(release)} incompatible`);46}47}48}49if (maybeCompatibleRelease) {50break;51}52}5354if (maybeCompatibleRelease) {55console.log(`${releaseItemStr(maybeCompatibleRelease)} maybe compatible`);56}5758const targetRelease = maybeCompatibleRelease || releases.find((e) => e.downloads.linux?.link === downloadUrl);5960if (!targetRelease) {61throw new Error(`No compatible release found`);62}6364console.log(`Preparing to use ${releaseItemStr(targetRelease)} as latest version for ${task.productId}`);6566const targetConfig = parseGradlePropertiesFromTaskConfig(task, targetRelease);6768// TODO: actually update nightly editor69console.log(70`Going to exec \`leeway build -Dversion=latest -DimageRepoBase=$imageRepoBase -DbuildNumber=${targetConfig.platformVersion} components/ide/jetbrains/image:${task.productId}-latest -DjbBackendVersion=${targetRelease.version}\``,71);7273appendGitHubOutput(`buildNumber=${targetConfig.platformVersion}`);74appendGitHubOutput(`image=${task.productId}`);75appendGitHubOutput(`jbBackendVersion=${targetRelease.version}`);76appendGitHubOutput(`editorSummary=${releaseItemStr(targetRelease)}`);777879