diff options
| -rw-r--r-- | generateJava.py | 105 | ||||
| -rw-r--r-- | meta/common/__init__.py | 6 | ||||
| -rw-r--r-- | meta/model/java.py | 41 | ||||
| -rw-r--r-- | updateJava.py | 33 |
4 files changed, 120 insertions, 65 deletions
diff --git a/generateJava.py b/generateJava.py index 982895725f..5e3420bfb4 100644 --- a/generateJava.py +++ b/generateJava.py @@ -1,11 +1,6 @@ import copy -import hashlib import os -from collections import defaultdict, namedtuple -from operator import attrgetter -from pprint import pprint -from packaging import version as pversion -from typing import Optional, List +from typing import Optional from meta.common import ensure_component_dir, launcher_path, upstream_path, static_path @@ -21,6 +16,7 @@ from meta.model.java import ( JavaRuntimeMap, JavaRuntimeMeta, JavaVersionMeta, + JavaPackageType, JavaChecksumMeta, JavaChecksumType, JavaRuntimeDownloadType, @@ -143,26 +139,29 @@ def mojang_runtime_to_java_runtime( while len(version_parts) < 3: version_parts.append(0) - if len(version_parts) < 4: - version_parts.append(None) + + build = None + if len(version_parts) >= 4: + build = version_parts[3] version = JavaVersionMeta( major=version_parts[0], minor=version_parts[1], security=version_parts[2], - build=version_parts[3], + build=build, name=mojang_runtime.version.name, ) return JavaRuntimeMeta( name=f"mojang_jre_{mojang_runtime.version.name}", vendor="mojang", url=mojang_runtime.manifest.url, - release_time=mojang_runtime.version.released, + releaseTime=mojang_runtime.version.released, checksum=JavaChecksumMeta( type=JavaChecksumType.Sha1, hash=mojang_runtime.manifest.sha1 ), recommended=True, - download_type=JavaRuntimeDownloadType.Manifest, + downloadType=JavaRuntimeDownloadType.Manifest, + packageType=JavaPackageType.Jre, version=version, ) @@ -170,10 +169,20 @@ def mojang_runtime_to_java_runtime( def adoptium_release_binary_to_java_runtime( rls: AdoptiumRelease, binary: AdoptiumBinary ) -> JavaRuntimeMeta: + assert binary.package is not None + + checksum = None + if binary.package.checksum is not None: + checksum = JavaChecksumMeta( + type=JavaChecksumType.Sha256, hash=binary.package.checksum + ) + + pkg_type = JavaPackageType(str(binary.image_type)) + version = JavaVersionMeta( - major=rls.version_data.major, - minor=rls.version_data.minor, - security=rls.version_data.security, + major=rls.version_data.major if rls.version_data.major is not None else 0, + minor=rls.version_data.minor if rls.version_data.minor is not None else 0, + security=rls.version_data.security if rls.version_data.security is not None else 0, build=rls.version_data.build, ) rls_name = f"{rls.vendor}_temurin_{binary.image_type}{version}" @@ -181,38 +190,51 @@ def adoptium_release_binary_to_java_runtime( name=rls_name, vendor=rls.vendor, url=binary.package.link, - release_time=rls.timestamp, - checksum=JavaChecksumMeta( - type=JavaChecksumType.Sha256, hash=binary.package.checksum - ), + releaseTime=rls.timestamp, + checksum=checksum, recommended=False, - download_type=JavaRuntimeDownloadType.Archive, + downloadType=JavaRuntimeDownloadType.Archive, + packageType=pkg_type, version=version, ) def azul_package_to_java_runtime(pkg: ZuluPackageDetail) -> JavaRuntimeMeta: version_parts = copy.copy(pkg.java_version) - while len(version_parts) < 4: - version_parts.append(None) + + build = None + while len(version_parts) < 3: + version_parts.append(0) + + if len(version_parts) >= 4: + build = version_parts[3] version = JavaVersionMeta( major=version_parts[0], minor=version_parts[1], security=version_parts[2], - build=version_parts[3], + build=build, ) + pkg_type = JavaPackageType(str(pkg.java_package_type)) + rls_name = f"azul_{pkg.product}_{pkg.java_package_type}{version}" + checksum = None + if pkg.sha256_hash is not None: + checksum = JavaChecksumMeta( + type=JavaChecksumType.Sha256, hash=pkg.sha256_hash + ) + return JavaRuntimeMeta( name=rls_name, vendor="azul", url=pkg.download_url, - release_time=pkg.build_date, - checksum=JavaChecksumMeta(type=JavaChecksumType.Sha256, hash=pkg.sha256_hash), + releaseTime=pkg.build_date, + checksum=checksum, recommended=False, - download_type=JavaRuntimeDownloadType.Archive, + downloadType=JavaRuntimeDownloadType.Archive, + packageType=pkg_type, version=version, ) @@ -236,9 +258,17 @@ def vendor_priority(vendor: str) -> int: return __PREFERED_VENDOR_ORDER.index(vendor) -def ensure_one_recommended(runtimes: list[JavaRuntimeMeta]): +def pkg_type_priority(pkg_type: JavaPackageType) -> int: + if pkg_type == JavaPackageType.Jre: + return 2 + elif pkg_type == JavaPackageType.Jdk: + return 1 + else: + return -1 + +def ensure_one_recommended(runtimes: list[JavaRuntimeMeta]) -> Optional[JavaRuntimeMeta]: if len(runtimes) < 1: - return # can't do anything + return None# can't do anything recommended: Optional[JavaRuntimeMeta] = None found_first = False @@ -252,15 +282,18 @@ def ensure_one_recommended(runtimes: list[JavaRuntimeMeta]): need_resort = True if recommended and not need_resort: - print("Recommending", recommended.name) - return # we have one recommended already + return recommended # we have one recommended already if recommended is None: recommended = runtimes[0] + def better_java_runtime(runtime: JavaRuntimeMeta): + assert recommended is not None if vendor_priority(runtime.vendor) < vendor_priority(recommended.vendor): return False + if pkg_type_priority(runtime.package_type) < pkg_type_priority(recommended.package_type): + return False if runtime.version < recommended.version: return False if runtime.release_time < recommended.release_time: @@ -273,7 +306,7 @@ def ensure_one_recommended(runtimes: list[JavaRuntimeMeta]): recommended = runtime recommended.recommended = True - print("Recommending", recommended.name) + return recommended def main(): @@ -316,7 +349,7 @@ def main(): adoptium_releases = AdoptiumReleases.parse_file( os.path.join(UPSTREAM_DIR, ADOPTIUM_VERSIONS_DIR, f"java{major}.json") ) - for rls in adoptium_releases: + for _, rls in adoptium_releases: for binary in rls.binaries: if binary.package is None: continue @@ -334,7 +367,7 @@ def main(): azul_packages = ZuluPackages.parse_file( os.path.join(UPSTREAM_DIR, AZUL_DIR, "packages.json") ) - for pkg in azul_packages: + for _, pkg in azul_packages: pkg_detail = ZuluPackageDetail.parse_file( os.path.join(UPSTREAM_DIR, AZUL_VERSIONS_DIR, f"{pkg.package_uuid}.json") ) @@ -357,9 +390,11 @@ def main(): add_java_runtime(runtime, major, java_os) for major, runtimes in javas.items(): - for java_os in runtimes: - print(f"Total runtimes for Java {major} {java_os}:", len(runtimes[java_os])) - ensure_one_recommended(runtimes[java_os]) + for java_os, runtime_list in runtimes: + print(f"Total runtimes for Java {major} {java_os}:", len(runtime_list)) + rec = ensure_one_recommended(runtime_list) + if rec is not None: + print(f"Recomending {rec.name} for Java {major} {java_os}") runtimes_file = os.path.join(LAUNCHER_DIR, JAVA_COMPONENT, f"java{major}.json") runtimes.write(runtimes_file) diff --git a/meta/common/__init__.py b/meta/common/__init__.py index 7a6514b2be..f799cea500 100644 --- a/meta/common/__init__.py +++ b/meta/common/__init__.py @@ -32,13 +32,13 @@ def static_path(): return "static" -def ensure_upstream_dir(path): +def ensure_upstream_dir(path: str): path = os.path.join(upstream_path(), path) if not os.path.exists(path): os.makedirs(path) -def ensure_component_dir(component_id): +def ensure_component_dir(component_id: str): path = os.path.join(launcher_path(), component_id) if not os.path.exists(path): os.makedirs(path) @@ -48,7 +48,7 @@ def transform_maven_key(maven_key: str): return maven_key.replace(":", ".") -def replace_old_launchermeta_url(url): +def replace_old_launchermeta_url(url: str): o = urlparse(url) if o.netloc == "launchermeta.mojang.com": return o._replace(netloc="piston-meta.mojang.com").geturl() diff --git a/meta/model/java.py b/meta/model/java.py index 7c5da18cdc..d234b6cf59 100644 --- a/meta/model/java.py +++ b/meta/model/java.py @@ -5,9 +5,8 @@ from pydantic import Field from datetime import datetime from enum import IntEnum, Enum from .enum import StrEnum -from typing import Optional, List, Dict, Any, Iterator, Iterable, NamedTuple -from collections import namedtuple -from urllib.parse import urljoin, urlencode, urlparse, urlunparse +from typing import Optional, Any, NamedTuple, Generator +from urllib.parse import urlencode, urlparse, urlunparse from functools import total_ordering # namedtuple to match the internal signature of urlunparse @@ -52,7 +51,7 @@ class JavaVersionMeta(MetaBase): build = self.build return (self.major, self.minor, self.security, build) - def __eq__(self, other: 'JavaVersionMeta'): + def __eq__(self, other: Any): return (self.to_tuple() == other.to_tuple()) def __lt__(self, other: 'JavaVersionMeta'): @@ -69,6 +68,10 @@ class JavaChecksumMeta(MetaBase): hash: str +class JavaPackageType(StrEnum): + Jre = "jre" + Jdk = "jdk" + class JavaRuntimeMeta(MetaBase): name: str vendor: str @@ -77,6 +80,7 @@ class JavaRuntimeMeta(MetaBase): checksum: Optional[JavaChecksumMeta] recommended: bool download_type: JavaRuntimeDownloadType = Field(alias="downloadType") + package_type: JavaPackageType = Field(alias="packageType") version: JavaVersionMeta @@ -85,10 +89,10 @@ class JavaRuntimeMap(MetaBase): os: [] for os in JavaRuntimeOS if os != JavaRuntimeOS.Unknown } - def __iter__(self) -> Iterator[JavaRuntimeOS]: - return iter(self.__root__) + def __iter__(self) -> Generator[tuple[str, list[JavaRuntimeMeta]], None, None]: + yield from ((str(os), runtime) for os, runtime in self.__root__.items()) - def __getitem__(self, item) -> list[JavaRuntimeMeta]: + def __getitem__(self, item:JavaRuntimeOS) -> list[JavaRuntimeMeta]: return self.__root__[item] def __len__(self): @@ -299,10 +303,11 @@ class AdoptiumRelease(MetaBase): class AdoptiumReleases(MetaBase): __root__: list[AdoptiumRelease] - def __iter__(self) -> Iterator[AdoptiumRelease]: - return iter(self.__root__) + def __iter__(self) -> Generator[tuple[str, AdoptiumRelease], None, None]: + yield from ((str(i), val) for i, val in enumerate(self.__root__)) + - def __getitem__(self, item) -> AdoptiumRelease: + def __getitem__(self, item: int) -> AdoptiumRelease: return self.__root__[item] def append(self, rls: AdoptiumRelease): @@ -458,8 +463,8 @@ class AzulApiPackagesQuery(APIQuery): distro_version: Optional[str] = None java_package_features: list[str] = [] release_status: Optional[AzulReleaseStatus] = None - availability_types: list[AzulAvailabilityType] = None - certifications: list[AzulCertifications] = None + availability_types: list[AzulAvailabilityType] = [] + certifications: list[AzulCertifications] = [] include_fields: list[str] = [] page: int = 0 page_size: int = 100 @@ -528,10 +533,10 @@ class ZuluPackageList(MetaBase): class ZuluPackages(MetaBase): __root__: list[ZuluPackageList] - def __iter__(self) -> Iterator[ZuluPackageList]: - return iter(self.__root__) + def __iter__(self) -> Generator[tuple[str, ZuluPackageList], None, None]: + yield from ((str(i), val) for i, val in enumerate(self.__root__)) - def __getitem__(self, item) -> ZuluPackageList: + def __getitem__(self, item: int) -> ZuluPackageList: return self.__root__[item] def append(self, pkg: ZuluPackageList): @@ -541,10 +546,10 @@ class ZuluPackages(MetaBase): class ZuluPackagesDetail(MetaBase): __root__: list[ZuluPackageDetail] - def __iter__(self) -> Iterator[ZuluPackageDetail]: - return iter(self.__root__) + def __iter__(self) -> Generator[tuple[str, ZuluPackageDetail], None, None]: + yield from ((str(i), val) for i, val in enumerate(self.__root__)) - def __getitem__(self, item) -> ZuluPackageDetail: + def __getitem__(self, item: int) -> ZuluPackageDetail: return self.__root__[item] def append(self, pkg: ZuluPackageDetail): diff --git a/updateJava.py b/updateJava.py index ece97690be..4d174c9d5d 100644 --- a/updateJava.py +++ b/updateJava.py @@ -1,6 +1,4 @@ -import json import os -import zipfile from meta.common import upstream_path, ensure_upstream_dir, static_path, default_session from meta.common.java import ( @@ -25,7 +23,6 @@ from meta.model.java import ( AzulArchiveType, AzulReleaseStatus, AzulAvailabilityType, - AzulJavaPackageType, azulApiPackageDetailUrl, ZuluPackageDetail, ZuluPackagesDetail, @@ -57,16 +54,35 @@ def main(): for feature in available.available_releases: print("Getting Manifests for Adoptium feature release:", feature) - page = 0 + page_size = 10 releases_for_feature: list[AdoptiumRelease] = [] - + page = 0 while True: query = AdoptiumAPIFeatureReleasesQuery( image_type=AdoptiumImageType.Jre, page_size=page_size, page=page) api_call = adoptiumAPIFeatureReleasesUrl(feature, query=query) - print("Fetching Page:", page, api_call) + print("Fetching JRE Page:", page, api_call) + r_rls = sess.get(api_call) + if r_rls.status_code == 404: + break + else: + r_rls.raise_for_status() + + releases = list(AdoptiumRelease(**rls) for rls in r_rls.json()) + releases_for_feature.extend(releases) + + if len(r_rls.json()) < page_size: + break + page += 1 + + page = 0 + while True: + query = AdoptiumAPIFeatureReleasesQuery( + image_type=AdoptiumImageType.Jdk, page_size=page_size, page=page) + api_call = adoptiumAPIFeatureReleasesUrl(feature, query=query) + print("Fetching JDK Page:", page, api_call) r_rls = sess.get(api_call) if r_rls.status_code == 404: break @@ -96,7 +112,6 @@ def main(): archive_type=AzulArchiveType.Zip, release_status=AzulReleaseStatus.Ga, availability_types=[AzulAvailabilityType.CA], - java_package_type=AzulJavaPackageType.Jre, javafx_bundled=False, page=page, page_size=page_size) @@ -121,9 +136,9 @@ def main(): azul_manifest_file = os.path.join(UPSTREAM_DIR, AZUL_DIR, "packages.json") packages.write(azul_manifest_file) - azul_major_versions: dict[int, ZuluPackages] = {} + azul_major_versions: dict[int, ZuluPackagesDetail] = {} - for pkg in packages: + for _, pkg in packages: major_version = pkg.java_version[0] if major_version not in azul_major_versions: |
