diff --git a/pkgs/applications/editors/jetbrains/bin/update_bin.py b/pkgs/applications/editors/jetbrains/bin/update_bin.py index 604499203363..25616e2321fe 100755 --- a/pkgs/applications/editors/jetbrains/bin/update_bin.py +++ b/pkgs/applications/editors/jetbrains/bin/update_bin.py @@ -6,6 +6,8 @@ import logging import requests import subprocess import sys +from urllib.error import HTTPError +import urllib.request import xmltodict from packaging import version @@ -57,6 +59,19 @@ def download_sha256(url): channels = download_channels() +def get_url(template, version_or_build_number, version_number): + release = [str(n) for n in version.parse(version_number).release] + for k in range(len(release), 0, -1): + s = ".".join(release[0:k]) + url = template.format(version=version_or_build_number, versionMajorMinor=s) + try: + if urllib.request.urlopen(url).getcode() == 200: + return url + except HTTPError: + pass + return None + + def update_product(name, product): update_channel = product["update-channel"] logging.info("Updating %s", name) @@ -78,7 +93,9 @@ def update_product(name, product): else: version_or_build_number = new_build_number version_number = new_version.split(' ')[0] - download_url = product["url-template"].format(version=version_or_build_number, versionMajorMinor=version_number) + download_url = get_url(product["url-template"], version_or_build_number, version_number) + if not download_url: + raise Exception(f"No valid url for {name} version {version_or_build_number}") product["url"] = download_url if "sha256" not in product or product.get("build_number") != new_build_number: fromVersions[name] = product["version"]