Mapped linux-arm variants to mojang provider

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2024-05-10 23:58:50 +03:00
parent 60a3f5f194
commit adef8d673c
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318

View File

@ -123,6 +123,26 @@ def mojang_os_to_java_os(mojang_os: MojangJavaOsName) -> JavaRuntimeOS:
return JavaRuntimeOS.Unknown
def mojang_component_to_major(mojang_component: MojangJavaComponent) -> int:
match mojang_component:
case MojangJavaComponent.JreLegacy:
return 8
case MojangJavaComponent.Alpha:
return 17
case MojangJavaComponent.Beta:
return 17
case MojangJavaComponent.Gamma:
return 17
case MojangJavaComponent.GammaSnapshot:
return 17
case MojangJavaComponent.Exe:
return 0
case MojangJavaComponent.Delta:
return 21
case _:
return 0
def mojang_runtime_to_java_runtime(
mojang_runtime: MojangJavaRuntime,
mojang_component: MojangJavaComponent,
@ -240,34 +260,6 @@ def azul_package_to_java_runtime(
)
PREFERED_VENDOR_ORDER = ["mojang", "eclipse", "azul"]
__PREFERED_VENDOR_ORDER = list(reversed(PREFERED_VENDOR_ORDER))
def vendor_priority(vendor: str) -> int:
"""Get a numeric priority for a given vendor
Args:
vendor (str): the vendor to check
Returns:
int: how preferable the vendor is, the higher the better
"""
if vendor not in PREFERED_VENDOR_ORDER:
return -1
return __PREFERED_VENDOR_ORDER.index(vendor)
def pkg_type_priority(pkg_type: JavaPackageType) -> int:
match pkg_type:
case JavaPackageType.Jre:
return 2
case JavaPackageType.Jdk:
return 1
return -1
def writeJavas(javas: dict[int, list[JavaRuntimeMeta]], uid: str):
def oldest_timestamp(a: datetime.datetime | None, b: datetime.datetime):
if a is None or a > b:
@ -308,6 +300,7 @@ def writeJavas(javas: dict[int, list[JavaRuntimeMeta]], uid: str):
def main():
javas: dict[int, list[JavaRuntimeMeta]] = {}
extra_mojang_javas: dict[int, list[JavaRuntimeMeta]] = {}
def add_java_runtime(runtime: JavaRuntimeMeta, major: int):
if major not in javas:
@ -315,37 +308,27 @@ def main():
print(f"Regestering runtime: {runtime.name} for Java {major}")
javas[major].append(runtime)
print("Processing Mojang Javas")
mojang_java_manifest = JavaIndex.parse_file(
os.path.join(UPSTREAM_DIR, JAVA_MANIFEST_FILE)
)
for mojang_os_name in mojang_java_manifest:
if mojang_os_name == MojangJavaOsName.Gamecore:
continue # empty
java_os = mojang_os_to_java_os(mojang_os_name)
for comp in mojang_java_manifest[mojang_os_name]:
if comp == MojangJavaComponent.Exe:
continue # doesn't appear to be used and not marked with a full verison so I don't trust it
mojang_runtimes = mojang_java_manifest[mojang_os_name][comp]
if (
len(mojang_runtimes) == 0
and mojang_os_name
in [MojangJavaOsName.WindowsArm64, MojangJavaOsName.MacOSArm64]
and comp in [MojangJavaComponent.Alpha, MojangJavaComponent.Beta]
):
mojang_runtimes = mojang_java_manifest[mojang_os_name][
MojangJavaComponent.Gamma
# only add specific versions to the list
if (
(
runtime.runtime_os
in [JavaRuntimeOS.MacOsArm64, JavaRuntimeOS.WindowsArm64]
and major == 8
)
or (
runtime.runtime_os
in [
JavaRuntimeOS.WindowsArm32,
JavaRuntimeOS.LinuxArm32,
JavaRuntimeOS.LinuxArm64,
]
for mojang_runtime in mojang_runtimes:
if comp == MojangJavaComponent.JreLegacy:
major = 8
else:
major = int(mojang_runtime.version.name.partition(".")[0])
runtime = mojang_runtime_to_java_runtime(mojang_runtime, comp, java_os)
add_java_runtime(runtime, major)
writeJavas(javas=javas, uid=JAVA_MINECRAFT_COMPONENT)
javas = {}
and major in [8, 17, 21]
)
or (runtime.runtime_os == JavaRuntimeOS.LinuxX86 and major in [17, 21])
):
if major not in extra_mojang_javas:
extra_mojang_javas[major] = list[JavaRuntimeMeta]()
extra_mojang_javas[major].append(runtime)
print("Processing Adoptium Releases")
adoptium_path = os.path.join(UPSTREAM_DIR, ADOPTIUM_DIR, "available_releases.json")
@ -411,6 +394,88 @@ def main():
writeJavas(javas=javas, uid=JAVA_AZUL_COMPONENT)
javas = {}
# constructs the missing mojang javas based on adoptium or azul
def get_mojang_extra_java(
mojang_component: MojangJavaComponent, java_os: JavaRuntimeOS
) -> JavaRuntimeMeta | None:
java_major = mojang_component_to_major(mojang_component)
if not java_major in extra_mojang_javas:
return None
posible_javas = list(
filter(lambda x: x.runtime_os == java_os, extra_mojang_javas[java_major])
)
if len(posible_javas) == 0:
return None
prefered_vendor = list(filter(lambda x: x.vendor != "azul", posible_javas))
if len(prefered_vendor) == 0:
prefered_vendor = posible_javas
prefered_vendor.sort(key=lambda x: x.version, reverse=True)
runtime = prefered_vendor[0]
runtime.name = mojang_component
return runtime
print("Processing Mojang Javas")
mojang_java_manifest = JavaIndex.parse_file(
os.path.join(UPSTREAM_DIR, JAVA_MANIFEST_FILE)
)
for mojang_os_name in mojang_java_manifest:
if mojang_os_name == MojangJavaOsName.Gamecore:
continue # empty
java_os = mojang_os_to_java_os(mojang_os_name)
for comp in mojang_java_manifest[mojang_os_name]:
if comp == MojangJavaComponent.Exe:
continue # doesn't appear to be used and not marked with a full verison so I don't trust it
mojang_runtimes = mojang_java_manifest[mojang_os_name][comp]
if len(mojang_runtimes) == 0:
if mojang_os_name in [
MojangJavaOsName.WindowsArm64,
MojangJavaOsName.MacOSArm64,
]:
if comp in [MojangJavaComponent.Alpha, MojangJavaComponent.Beta]:
mojang_runtimes = mojang_java_manifest[mojang_os_name][
MojangJavaComponent.Gamma
]
elif (
comp == MojangJavaComponent.JreLegacy
): # arm version of win and mac is missing the legacy java
runtime = get_mojang_extra_java(comp, java_os)
if runtime != None:
add_java_runtime(runtime, mojang_component_to_major(comp))
if (
mojang_os_name == MojangJavaOsName.Linuxi386
and comp != MojangJavaComponent.JreLegacy
): # the linux x86 is missing all but legacy
runtime = get_mojang_extra_java(comp, java_os)
if runtime != None:
add_java_runtime(runtime, mojang_component_to_major(comp))
for mojang_runtime in mojang_runtimes:
if comp == MojangJavaComponent.JreLegacy:
major = 8
else:
major = int(mojang_runtime.version.name.partition(".")[0])
runtime = mojang_runtime_to_java_runtime(mojang_runtime, comp, java_os)
add_java_runtime(runtime, major)
# mojang doesn't provide any versions for the following systems so borrow info from adoptium/azul
for java_os in [
JavaRuntimeOS.WindowsArm32,
JavaRuntimeOS.LinuxArm32,
JavaRuntimeOS.LinuxArm64,
]:
for comp in [
MojangJavaComponent.JreLegacy,
MojangJavaComponent.Alpha,
MojangJavaComponent.Beta,
MojangJavaComponent.Gamma,
MojangJavaComponent.GammaSnapshot,
MojangJavaComponent.Delta,
]:
runtime = get_mojang_extra_java(comp, java_os)
if runtime != None:
add_java_runtime(runtime, mojang_component_to_major(comp))
writeJavas(javas=javas, uid=JAVA_MINECRAFT_COMPONENT)
javas = {}
if __name__ == "__main__":
main()