Skip to content

JVM wheels: py3-none-<platform>, one wheel per platform (4 per release, not 16) - #92

Merged
tae898 merged 2 commits into
mainfrom
jvm-py3-none-wheels
Oct 26, 2026
Merged

tae898 merged 2 commits into
mainfrom
jvm-py3-none-wheels

Conversation

@tae898

@tae898 tae898 commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

The arcadedb-jvm wheels become py3-none-<platform>: one wheel per platform, 4 per release (was cp311..cp314 x 4 platforms = 16 wheels of about 65 MB, about 1 GB per release; PyPI's default project limit is 10 GB). 26.11.1.dev0 keeps its 16 files on PyPI; this lands for the next version.

Tag mechanism

setup.py keeps BinaryDistribution.has_ext_modules() -> True (platform wheel, platlib, bundled JRE) and adds a bdist_wheel subclass whose get_tag() takes the platform from the base class and returns ("py3", "none", plat). The platform part is unchanged: --plat-name manylinux_2_28_* in Dockerfile.build, _PYTHON_HOST_PLATFORM on macOS, win_amd64 on Windows. Only the interpreter and ABI tags go. pyproject.toml needs setuptools >= 70.1 for its own bdist_wheel.

Python 3.15

requires-python = ">=3.11,<3.15", with a comment. The wheel tag no longer keeps pip off 3.15, and jpype1 1.7.1 has no cp315 wheel (support is merged in jpype-project/jpype#1501, not released). Remove the cap, add the classifier and the matrix entry when JPype ships cp315 wheels. tests/test_select_matrix.py pins the cap to "minor after the newest classifier".

CI

  • test-jvm.yml: a build job builds each platform once and uploads wheel-<platform>; the test job downloads it and installs it into one Python (no Java, Docker or build tools there). The Test arcadedb (<platform>, Python <version>) names are unchanged; new checks are Build arcadedb-jvm wheel (<platform>).
  • Test legs now mirror test-native.yml: every Python (3.11 to 3.14) on linux/amd64, only 3.11 and 3.14 on linux/arm64, macOS arm64 and Windows. That is 10 legs on every event (it was 16 on main, nightly, dispatch and release; the extra legs tested the same file again). scripts/select_matrix.py holds the legs (JVM_LEGS); --wheels prints the build legs.
  • release-jvm.yml verify: 4 wheels, one per platform, all py3-none in name and in the WHEEL file (scripts/verify_wheel_tag.py, also run by build.sh and the build job), sizes as before; downloads wheel-*.
  • after_tag_verify.sh reads the previous release's cpXY files as the py3-none set, so the first release after this compares cleanly.
  • Not changed: test-python-examples.yml still builds a wheel in each of its legs (the same py3-none file); a follow-up can build once per platform there too.

Docs and tests

development/ci.adoc (one wheel per platform, the 10 legs, 24 checks on a pull request and 36 elsewhere), release.adoc, installation.adoc, which-package.adoc, concurrency.adoc, CLAUDE.md. The JVM platform tags in the docs said manylinux_2_34; the wheels are manylinux_2_28 (as on PyPI for 26.11.1.dev0), fixed.

Tests: tests/test_wheel_tags.py (new: builds with setup.py for three platform names and checks name and WHEEL; installed-wheel check), test_select_matrix.py, test_release_name_guards.py (4 wheels accepted; the old 16, a cpXY wheel and a missing platform refused).

Behaviour change to know

Free-threaded 3.14t: the old cp314 tag kept the JVM wheel off 3.14t. py3-none does not, and JPype has Linux cp314t wheels, so pip can now install the package there. Nothing tests it; concurrency.adoc says so. Not claimed in the classifiers.

Checked locally

python -m build with --plat-name manylinux_2_28_x86_64, manylinux_2_28_aarch64, win_amd64 and _PYTHON_HOST_PLATFORM=macosx-11.0-arm64: Tag: py3-none-<plat>, Root-Is-Purelib: false, Requires-Python: <3.15,>=3.11. scripts/check_no_embedded_name.py --root . clean, bandit (as in CI) clean, the touched test files pass.

Also

🤖 Generated with Claude Code

The wheel bundles a platform-specific JRE but nothing compiled against CPython, yet
has_ext_modules() = True also stamped cpXY-cpXY tags, so a release was 16 wheels of
about 65 MB (1 GB; PyPI's default project limit is 10 GB). setup.py now subclasses
bdist_wheel and keeps only the platform tag (--plat-name, _PYTHON_HOST_PLATFORM or the
host's), so the manylinux_2_28, macosx_11_0_arm64 and win_amd64 tags work as before and
the wheel is py3-none-<platform>, like the native arcadedb wheel. A release is 4 wheels.

- pyproject.toml: requires-python >=3.11,<3.15. The tag no longer keeps pip off 3.15, and
  jpype1 has no cp315 wheel yet (jpype-project/jpype#1501); the cap goes with it.
  setuptools >= 70.1 (its own bdist_wheel) for the build.
- test-jvm.yml: a build job builds each platform once (wheel-<platform>); the test job
  downloads that wheel and installs it, builds nothing. Test legs are the shape of
  test-native.yml: every Python on linux/amd64, 3.11 and 3.14 on the other platforms,
  10 legs on every event (scripts/select_matrix.py, --wheels gives the build legs).
- release-jvm.yml: verify expects 4 wheels, one per platform, all py3-none; the tag check
  (scripts/verify_wheel_tag.py, also run by build.sh) reads the name and the WHEEL file.
- after_tag_verify.sh reads a previous release's cpXY files as the py3-none set.
- tests: test_wheel_tags.py, test_select_matrix.py, test_release_name_guards.py.
- docs and CLAUDE.md: one wheel per platform, the 10 legs, the 3.15 cap; the JVM
  manylinux tag in the docs was manylinux_2_34, the wheels are manylinux_2_28.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@tae898 tae898 mentioned this pull request Oct 26, 2026
4 of 7 tasks
… 498 trigger and probes)

#88 made the child of the redirect tests call jpype.JClass("java.lang.System") for the Java stream probes and the
SimpleMappedReader$Supplier trigger of the JEP 498 Unsafe warning. The native build has no JVM, so four tests of the file failed
in the native parity run (job 121437057831). The redirect hygiene is shared behaviour, so the tests stay on both builds; only the
Java-level probes, the trigger and the UNSAFE_WARNING assertions are gated on arcadedb.__backend__ == "jvm".

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@tae898
tae898 merged commit 7250984 into main Oct 26, 2026
32 checks passed
@tae898
tae898 deleted the jvm-py3-none-wheels branch October 26, 2026 08:15
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