Repository navigation
CircleCI: build and test platform wheels with release artifact bundles - #218
Open
eresende-nuodb wants to merge 3 commits into
Open
eresende-nuodb wants to merge 3 commits into
eresende-nuodb wants to merge 3 commits into
Conversation
eresende-nuodb
requested review from
TheDistributor,
madscientist and
rshaull
October 22, 2026 17:55
TheDistributor
approved these changes
Oct 23, 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.
Summary
Implement the complete public build/test/artifact stage in CircleCI only. Publishing remains an internal responsibility; no PyPI publishing credentials are used by these jobs. The earlier GitHub Actions workflow has been removed.
release-bundle.tar.gzartifact containing the 26 distributions, checksums, and manifest with CircleCI pipeline/workflow/job identities.Only the existing database/performance jobs use
common-config; source/wheel/bundle jobs do not use a secret context. The organization must have access to Linux ARM,m4pro.medium, andwindows.mediumexecutors.Understanding the wheel filenames and build matrix
The
cp39tag means CPython 3.9. CPython is the standard Python interpreter most users install. Cython is the build-time tool that translates our extension sources into C, which is then compiled into a native module. The Cython version is not encoded in the wheel filename.A wheel filename follows this pattern:
For example,
pynuodb-5.0.0-cp39-cp39-win_amd64.whlmeans:pynuodb5.0.0cp39cp39win_amd64The Python tags in this PR are
cp39,cp310,cp311,cp312, andcp313, meaning CPython 3.9 through 3.13 respectively.Why 25 wheels?
Unlike a pure-Python package, this Cython extension contains compiled native code. For the build configuration used here, each wheel must match both the Python interpreter/ABI and the operating system/CPU architecture. A CPython 3.9 wheel is not interchangeable with a CPython 3.13 wheel, and a Windows x86-64 binary cannot serve a Linux ARM64 system.
We therefore build 5 Python versions × 5 OS/CPU targets = 25 wheels:
Linux uses the
manylinux2014compatibility standard, so we do not need a separate wheel for every glibc-based Linux distribution. Each wheel is installed and tested for its Python/architecture combination, with Intel macOS tests running under Rosetta.Users still run
pip install pynuodb. All wheels belong to the same package/version on PyPI;pipautomatically selects the compatible one. Installing a matching wheel requires neither Cython nor a C compiler. The additional source archive provides an installation path when no matching wheel is available, including the existing optional pure-Python fallback.Documentation
The documentation-only follow-up commit
47839daincludes:python -m pipfor installation.twine check --strict, its package description contains the updated README, and all 36 CI-helper tests pass.The documentation follow-up has its own CircleCI check run (see the PR Checks tab). The completed workflow and independent artifact inspection below remain explicitly scoped to implementation commit
c839de1.Validation
twine check --strictpassed.c839de1passed all nine jobs; its downloaded release bundle was independently inspected as detailed below. The later47839dacommit changes documentation only.CircleCI validation completed (implementation commit c839de1)
All 9 CircleCI jobs passed for commit
c839de10ab88ba70ed98ab8f033d53cebe4d376cin pipeline 274, workflow3b4f0f4f-a094-4c95-b32e-0c5bce459002(approximately 11 minutes).Downloaded artifact inspection
Inspected the actual
release-bundle.tar.gzartifact from assembly job 347, not a local rebuild. No issues were found in the following checks:5.0.0. All 26 distribution sizes and SHA-256 checksums match the manifest;SHA256SUMSalso verifies successfully.c839de1.RECORDhashes/sizes, package/dependency metadata, non-pure-Python wheel flags, and Python/ABI/platform tags all check out. Every wheel contains a compiled accelerator whose actual binary format and CPU architecture match its target (ELF on Linux, Mach-O on macOS, PE on Windows).twine check --strictpasses for all 26 downloaded distributions.Outer archive SHA-256:
No distributions are uploaded to PyPI by this PR. Successful branch/PR test artifacts are not automatically approved releases.