Repository navigation
Conversation
Tag push (bare version) -> validate tag -> build and test wheels via the existing test workflows -> verify jar version, wheel count, versions and size -> publish job (environment pypi, id-token only there) with a guard that refuses anything but the distribution `arcadedb` -> install from PyPI and import on four platforms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tae898
marked this pull request as ready for review
October 23, 2026 12:32
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.
Adds
.github/workflows/release.yml, ported fromrelease-python-packages.ymlin humemai/arcadedb-embedded-python, for the release-workflow box of #19 and the PyPI discussion in #18. Draft: CI and release changes wait for review. Nothing here has been run on GitHub, no tag was pushed and no workflow was dispatched.What it does
A push of a bare-version tag (
26.11.1,26.11.1.post1,26.11.1.dev0; nov, same as ArcadeData/arcadedb) runs these jobs:validate-version: the tag must matchA.B.C,A.B.C.devNorA.B.C.postN(soaN,bN,rcNandv-prefixed tags are rejected). It derives thearcadedata/arcadedbimage tag: the base version for release and post tags,latestfor dev tags.testandtest-examples: call the existingtest-python-bindings.ymlandtest-python-examples.ymlthroughworkflow_callwitharcadedb-tagandbuild-version(both inputs already exist). They download the jars, build a wheel for each of 4 platforms and each Python version in the matrix (3.10 to 3.14, 20 wheels), run the tests and uploadwheel-<platform>-py<version>. A pinnedarcadedb-tagalready fails there when the image holds another engine version.verify-wheels(no publish rights): the tag must equal the version derived from the engine jar (extract_version.py --format=docker,-SNAPSHOTallowed only with a.devNtag and required for it); wheel count is 4 platforms x the Python versions in thepyproject.tomlclassifiers, with the per-platform count checked too; every wheel's version equals the tag; every wheel is under 100 MB throughscripts/verify_wheel_size.py(no override); all wheels agree on distribution name and one import package. Uploads the checked wheels asrelease-dist.publish:environment: pypi,permissions: id-token: writeon this job only (the workflow default iscontents: read),pypa/gh-action-pypi-publish. No token or secret anywhere.verify-pypi: after the upload, installsarcadedb==<tag>from PyPI withuv run --no-project --withon linux/amd64, linux/arm64, macOS arm64 and Windows amd64 (the same runners the test matrix uses, all standard), checks the installed version and imports the package (retries for up to 5 minutes while PyPI catches up).All actions are pinned by SHA to the ones the repo's workflows and ArcadeData/arcadedb-drivers'
publish-python.ymlalready use. uv is only used asuv run. No paid runners.Differences from the humemai workflow: the tag-versus-jar check moves from a pom.xml comparison to the engine jar (this repo has no pom.xml), the 16-wheel count follows the classifiers instead of a literal,
continue-on-erroron the publish job is gone (a failed upload should fail the release), and the PyPI install check is new.The guard
The
publishjob starts by refusing unless every wheel is the distributionarcadedb: both the wheel file name and theNamefield of itsMETADATAmust normalise toarcadedb.pyproject.tomlstill names the distributionarcadedb-embedded, so today a tag push builds and tests everything, then stops in this step before anything reaches PyPI. The rename is a separate PR (box in #19) and I did not touchpyproject.toml. I ran the guard script locally against fakearcadedb_embeddedandarcadedbwheels: it fails the first and passes the second.What it relies on (already set up)
arcadedbfrom ArcadeData/arcadedb-python, workflowrelease.yml, environmentpypi. Projectarcadedb-nativehas the same repository and workflow with environmentpypi-native; this PR has no native job yet, only a commented TODO at the top of the file.pypiandpypi-nativeexist in this repository, each limited by a deployment rule to tags matching[0-9]*.humemaiaccount ownsarcadedb,arcadedb-embedded,arcadedb-nativeandarcadedb-embedded-native; @robfrank co-ownsarcadedbandarcadedb-native.arcadedb;arcadedb-embeddedkeeps releasing from the humemai repo until then.Dependencies on #19
arcadedb-embeddedtoarcadedbinpyproject.toml(and the import package, which the PyPI check reads from the wheel instead of hard-coding). Blocks any real publish, by design of the guard.verify_wheel_size.pyalready exist here.native-wheel/,native-preview.yml,native-alias.yml): not ported, so there is noarcadedb-nativejob. It comes with that port, in environmentpypi-native.What ran locally
actionlint1.7.12 (the version the repo's pre-commit pins) with shellcheck 0.11.0 over everyrun:block: clean. The repo's.github/actionlint.yamlignores were not needed for the new file.26.11.1,.dev0,.post1(accepted) andrc1,a1,v26.11.1, bare.dev(rejected).pytestontest_build_scripts,test_wheel_size,test_wheel_platform_tag,test_extract_version*,test_build_wheel_checkandtest_no_monorepo_wording: 59 passed; 1 failed (test_dunder_version_matches_distribution_metadata) only because the package is not installed in that bare environment.Not verified: a real run of the jobs on GitHub (needs a tag, so it waits for review), and the
verify-pypiretry loop.🤖 Generated with Claude Code