summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--generateJava.py105
-rw-r--r--meta/common/__init__.py6
-rw-r--r--meta/model/java.py41
-rw-r--r--updateJava.py33
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: