Repository navigation
JVM wheels: py3-none-<platform>, one wheel per platform (4 per release, not 16) - #92
Merged
Merged
Conversation
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]>
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]>
This was referenced Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
arcadedb-jvmwheels becomepy3-none-<platform>: one wheel per platform, 4 per release (wascp311..cp314x 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.pykeepsBinaryDistribution.has_ext_modules() -> True(platform wheel, platlib, bundled JRE) and adds abdist_wheelsubclass whoseget_tag()takes the platform from the base class and returns("py3", "none", plat). The platform part is unchanged:--plat-name manylinux_2_28_*inDockerfile.build,_PYTHON_HOST_PLATFORMon macOS,win_amd64on Windows. Only the interpreter and ABI tags go.pyproject.tomlneeds setuptools >= 70.1 for its ownbdist_wheel.Python 3.15
requires-python = ">=3.11,<3.15", with a comment. The wheel tag no longer keeps pip off 3.15, andjpype11.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.pypins the cap to "minor after the newest classifier".CI
test-jvm.yml: abuildjob builds each platform once and uploadswheel-<platform>; thetestjob downloads it and installs it into one Python (no Java, Docker or build tools there). TheTest arcadedb (<platform>, Python <version>)names are unchanged; new checks areBuild arcadedb-jvm wheel (<platform>).main, nightly, dispatch and release; the extra legs tested the same file again).scripts/select_matrix.pyholds the legs (JVM_LEGS);--wheelsprints the build legs.release-jvm.ymlverify: 4 wheels, one per platform, allpy3-nonein name and in theWHEELfile (scripts/verify_wheel_tag.py, also run bybuild.shand the build job), sizes as before; downloadswheel-*.after_tag_verify.shreads the previous release's cpXY files as the py3-none set, so the first release after this compares cleanly.test-python-examples.ymlstill 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 saidmanylinux_2_34; the wheels aremanylinux_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 andWHEEL; 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
cp314tag kept the JVM wheel off 3.14t.py3-nonedoes not, and JPype has Linux cp314t wheels, so pip can now install the package there. Nothing tests it;concurrency.adocsays so. Not claimed in the classifiers.Checked locally
python -m buildwith--plat-name manylinux_2_28_x86_64,manylinux_2_28_aarch64,win_amd64and_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
tests/test_log_redirect.py: the Java stream probes and the JEP 498 trigger call JPype, so they now run on the JVM build only (arcadedb.__backend__ == "jvm") and the redirect-hygiene assertions stay on both builds (21 passed on the native wheel and on the JVM wheel locally).🤖 Generated with Claude Code