Unverified Commit 101eff13 authored by Matt Sturgeon's avatar Matt Sturgeon Committed by GitHub
Browse files

jetbrains.*-oss: updater: handle error on unreleased source versions (#485078)

parents a11d2a79 0ab0682f
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
import sys

import dataclasses
from urllib import request
from urllib.error import HTTPError
@@ -43,13 +45,17 @@ class VersionFetcher:
        self, ide: Ide, ignore_no_url_error=False
    ) -> VersionInfo | None:
        if ide.update_info is None:
            print(f"[!] no update info for {ide.name} in `updateInfo.json` - skipping!")
            print(
                f"[!] no update info for {ide.name} in `updateInfo.json` - skipping!",
                file=sys.stderr,
            )
            return None
        channel_name = ide.update_info["channel"]
        channel = self.channels.get(channel_name)
        if channel is None:
            print(
                f"[!] failed to find IDE channel {channel_name} - skipping! check {ide.name}'s `channel`!"
                f"[!] failed to find IDE channel {channel_name} - skipping! check {ide.name}'s `channel`!",
                file=sys.stderr,
            )
            return None
        try:
@@ -73,7 +79,8 @@ class VersionFetcher:
                )
                if not download_url and not ignore_no_url_error:
                    print(
                        f"[!] no valid URL found for '{ide.name}' for '{system}'! make sure `updater/updateInfo.json` contains an entry and is correct."
                        f"[!] no valid URL found for '{ide.name}' for '{system}'! make sure `updater/updateInfo.json` contains an entry and is correct.",
                        file=sys.stderr,
                    )
                    download_urls[system] = None
                else:
@@ -84,7 +91,10 @@ class VersionFetcher:
                urls=download_urls,
            )
        except Exception as e:
            print(f"[!] exception while trying to fetch version: {e} - skipping!")
            print(
                f"[!] exception while trying to fetch version: {e} - skipping!",
                file=sys.stderr,
            )
            return None

    @classmethod
+6 −2
Original line number Diff line number Diff line
import sys

from jetbrains_nix_updater.config import UpdaterConfig
from jetbrains_nix_updater.fetcher import VersionInfo
from jetbrains_nix_updater.ides import Ide
from jetbrains_nix_updater.util import replace_blocks, convert_hash_to_sri


def run_bin_update(ide: Ide, info: VersionInfo, config: UpdaterConfig):
def run_bin_update(ide: Ide, info: VersionInfo, config: UpdaterConfig) -> bool:
    urls_nix = ""
    for system, url in info.urls.items():
        urls_nix += f"""
@@ -33,5 +35,7 @@ def run_bin_update(ide: Ide, info: VersionInfo, config: UpdaterConfig):
                ),
            ],
        )
        return True
    except Exception as e:
        print(f"[!] Writing update info to file failed: {e}")
        print(f"[!] Writing update info to file failed: {e}", file=sys.stderr)
        return False
+21 −5
Original line number Diff line number Diff line
import sys

import json
import re
from pathlib import Path
from xmltodict import parse
from subprocess import CalledProcessError

from jetbrains_nix_updater.config import UpdaterConfig
from jetbrains_nix_updater.fetcher import VersionInfo
@@ -149,10 +152,22 @@ def maven_out_path(jb_root: Path, name: str) -> Path:
    return jb_root / "source" / f"{name}_maven_artefacts.json"


def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig):
def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig) -> bool:
    variant = ide.name.removesuffix("-oss")
    intellij_hash, intellij_outpath = prefetch_intellij_community(variant, info.version)
    try:
        intellij_hash, intellij_outpath = prefetch_intellij_community(
            variant, info.version
        )
        android_hash = prefetch_android(variant, info.version)
    except CalledProcessError:
        print(
            f"[!] Unable to fetch sources for version {info.version}. "
            f"This probably means, that JetBrains has not published a source release yet for this version. "
            f"Check: https://github.com/JetBrains/intellij-community/releases and https://github.com/JetBrains/android/tags",
            file=sys.stderr,
        )
        print(f"[!] Skipping update of {ide.name}.", file=sys.stderr)
        return False
    jps_hash = generate_jps_hash(config, intellij_outpath)
    restarter_hash = generate_restarter_hash(config, intellij_outpath)
    repositories = jar_repositories(intellij_outpath)
@@ -192,8 +207,8 @@ def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig):
            ],
        )
    except Exception as e:
        print(f"[!] Writing update info to file failed: {e}")
        return
        print(f"[!] Writing update info to file failed: {e}", file=sys.stderr)
        return False

    if not config.no_maven_deps:
        print("[*] Collecting maven hashes")
@@ -201,3 +216,4 @@ def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig):
        with open(maven_out_path(config.jetbrains_root, variant), "w") as f:
            json.dump(maven_hashes, f, indent=4)
            f.write("\n")
    return True
+11 −5
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3 python3.pkgs.packaging python3.pkgs.xmltodict python3.pkgs.requests nurl
import sys

import argparse
import json

@@ -54,12 +56,13 @@ def main():
    )

    print(f"[.] found IDEs to update: {', '.join(ide.name for ide in ides_to_run_for)}")
    success = True
    for ide in ides_to_run_for:
        if ide.is_source and config.no_src:
            print(f"[!] skipping {ide.name}, due to --no-src")
            print(f"[!] skipping {ide.name}, due to --no-src", file=sys.stderr)
            continue
        if not ide.is_source and config.no_bin:
            print(f"[!] skipping {ide.name}, due to --no-bin")
            print(f"[!] skipping {ide.name}, due to --no-bin", file=sys.stderr)
            continue

        print(f"[@] updating IDE {ide.name}")
@@ -67,15 +70,18 @@ def main():
        info = version_fetcher.latest_version_info(
            ide, ignore_no_url_error=ide.is_source
        )
        if info is not None:
        if info is None:
            success = False
        else:
            if config.old_version == info.version:
                print("[o] Version is the same, no update required")
                return

            if ide.is_source:
                run_src_update(ide, info, config)
                success &= run_src_update(ide, info, config)
            else:
                run_bin_update(ide, info, config)
                success &= run_bin_update(ide, info, config)
    exit(0 if success else 1)


if __name__ == "__main__":