Skip to content

arcadedb-jvm: bundle Eclipse Temurin 25 and tag the Linux wheels manylinux_2_28 - #86

Merged
tae898 merged 2 commits into
mainfrom
jvm-manylinux-2-28
Oct 26, 2026
Merged

tae898 merged 2 commits into
mainfrom
jvm-manylinux-2-28

Conversation

@tae898

@tae898 tae898 commented Oct 26, 2026

Copy link
Copy Markdown
Collaborator

The Linux arcadedb-jvm wheels were manylinux_2_34, which excludes RHEL, Rocky and AlmaLinux 8, Debian 10 and 11 and Ubuntu 20.04. The native wheels move to manylinux_2_28 in #83. This does the same for the JVM wheels, so the two packages are a choice and not a platform split.

Why it was 2_34

The floor came from the bundled JRE, and the JRE came from the amazoncorretto:25 Docker image, which is Amazon Linux 2023 (glibc 2.34). That image's JDK is built against it. It is the image, not the vendor. I scanned the JDKs for the highest GLIBC_x.y they reference (the same scan scripts/verify_wheel_platform_tag.py does):

JDK x86_64 aarch64
amazoncorretto:25 image (25.0.5) 2.34, in 54 ELF files incl. bin/java, lib/libjava.so not scanned
Corretto 25.0.5.0.9 tarball from corretto.aws 2.17 2.17
Eclipse Temurin 25.0.5+8 tarball 2.17 2.17

So this takes the JDK from eclipse-temurin:25-jdk (multi-arch, carries the Temurin tarball unchanged, no download step in the Dockerfile). jlink copies the libraries of the JDK it runs, so the bundled JRE gets the same floor. Both Corretto and Temurin are GPLv2 with the Classpath Exception, redistributable under the same terms; nothing in the repo names Corretto as the bundled vendor.

Why 2_28 and not 2_17

The wheel itself is pure Python plus the JRE and the jars, so the only other floor is the Python dependency: JPype 1.7.1 publishes manylinux_2_28 Linux wheels (manylinux_2_24 and manylinux_2_28 tags for x86_64 and aarch64), and a lower tag would send pip to a source build. The native wheels use manylinux_2_28 too. The jars the wheel carries (gremlin, grpcw and jline are excluded) hold JNI libraries for x86_64 and aarch64 that need glibc 2.17 at most.

Changes

  • scripts/Dockerfile.build: jre-builder is eclipse-temurin:25-jdk (apt instead of yum for binutils); WHEEL_PLAT is manylinux_2_28_x86_64 / manylinux_2_28_aarch64; the comment says why.
  • scripts/verify_wheel_platform_tag.py: the expected tag is the higher of MANYLINUX_FLOOR (2.28) and the JRE's requirement. It still fails a tag above that (the #4037 case) and a tag below it. --jre prints the same tag. tests/test_wheel_platform_tag.py covers a 2.17 JRE at the floor, a tag below the floor, a tag above both, and --jre.
  • .github/workflows/test-jvm.yml: on both Linux legs, the built wheel is installed in quay.io/pypa/manylinux_2_28_{x86_64,aarch64} with pip install --only-binary=:all:, then import arcadedb and SELECT 1. pip refuses a wheel tagged above 2.28 there, so this guards the floor.

Verification

Dispatched on this branch (all legs): Test JVM 40250801621 and Test Python Examples 40250804041. The bar: wheel tag manylinux_2_28, all legs green, the new container step green on linux/amd64 and linux/arm64. actionlint is clean and tests/test_wheel_platform_tag.py passes (10 tests, run without the package installed).

Not in this PR

The docs still name the JVM wheel as glibc 2.34: docs/modules/ROOT/pages/installation.adoc (the JVM tag rows) and docs/modules/ROOT/pages/which-package.adoc (the Platforms row). #83, #84 and #85 rewrite exactly those lines, so I left them to avoid three rebases; they need a one-line follow-up once those merge. scripts/after_tag_verify.sh checks pip download --platform manylinux_2_34_*, which pip expands to the lower tags, so it still accepts the 2_28 wheels.

🤖 Generated with Claude Code

tae898 and others added 2 commits October 26, 2026 09:44
…linux_2_28

The jlink step took its JDK from the amazoncorretto:25 image (Amazon Linux 2023), whose binaries all need GLIBC_2.34. Temurin's Linux JDK needs glibc 2.17 at most on x86_64 and aarch64, and JPype's own Linux wheels are manylinux_2_28, so the wheels are tagged manylinux_2_28 like the native ones.

verify_wheel_platform_tag.py expects the higher of the floor (2.28) and the JRE's requirement. test-jvm.yml installs the built wheel in a quay.io/pypa/manylinux_2_28 container on both Linux legs and runs SELECT 1.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…DK fallback

The eclipse-temurin JDK has no jmods directory (JEP 493), so the jmods-only branch of the
jre-builder stage fell back to copying the whole JDK: a 251 MB JRE and a 130 MB wheel,
which scripts/verify_wheel_size.py rejects (over 100 MB). jlink links from the run-time
image when --module-path is absent (40 MB JRE in the same image). The silent fallback is
removed so a jlink failure stops the build.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@tae898
tae898 merged commit 2950c78 into main Oct 26, 2026
20 checks passed
@tae898
tae898 deleted the jvm-manylinux-2-28 branch October 26, 2026 02:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant