Repository navigation
CircleCI: build and test platform wheels with release artifact bundles - #218
eresende-nuodb wants to merge 3 commits into
Conversation
|
Thanks for getting all this set up! Is there a way to install the pure-python version by choice? |
|
🤖 AI-assisted reply There isn’t a separate pure-Python package name on PyPI — it’s always Default (PyPI / a matching wheel): Pure-Python by choice: use a source install and make sure the optional extension does not build. In For a released version, something like: python -m pip install --no-binary pynuodb pynuodbwith no usable C toolchain (or an intentionally broken There is no supported runtime switch or pip extra to turn off the accelerator when the extension module is already installed — uninstall/reinstall from source without building the extension. If we want this called out explicitly for operators, we can add a short “forcing pure-Python” note to README/CONTRIBUTING in a follow-up; happy to do that if you think it’s worth documenting. |
🤖 AI-assisted PR
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.