Build binary wheels for PyPI releases - #67
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #67 +/- ##
=======================================
Coverage 94.68% 94.68%
=======================================
Files 26 26
Lines 1035 1035
=======================================
Hits 980 980
Misses 55 55 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
virgesmith
added a commit
that referenced
this pull request
Aug 28, 2026
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The release workflow only built an sdist, so every install from PyPI compiled the extension from source. Add cibuildwheel jobs for linux-x86_64, windows-amd64 and macos-arm64 plus a separate sdist job, and have deploy collect their artifacts rather than building anything itself. Adds a workflow_dispatch trigger so the wheel build can be exercised on demand; deploy is guarded on refs/tags/v* so a manual run builds without publishing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
They packaged an examples/ directory that does not exist in the repo, so the step would fail - after uv publish had already run, leaving a tagged release published but the workflow red. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
virgesmith
force-pushed
the
ci/build-wheels
branch
from
August 28, 2026 18:50
1a61bba to
c4b81ff
Compare
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 release workflow only ever built an sdist, so every
pip install humanleaguefrom PyPI had to compile the nanobind extension from source — which needs a toolchain, CMake and nanobind on the user's machine.Changes
wheelsjob —cibuildwheelacrossubuntu-latest,windows-latestandmacos-latest, uploading one artifact per platform.sdistjob —uv build --sdist, unchanged in substance, just split out so it runs in parallel.deployjob — nowneeds: [wheels, sdist]and downloads their artifacts instead of building anything itself, then publishes the lot.workflow_dispatchtrigger so the wheel build can be exercised without cutting a release.deployis guarded withif: startsWith(github.ref, 'refs/tags/v'), so a manual run builds and uploads artifacts but does not publish.zip examplessteps. They packaged anexamples/directory that does not exist in the repo and never has (git log -- examplesis empty, and it isn't gitignored), sozip -r examples.zip examples/would exit non-zero. Because they sat indeployafteruv publish, a tagged release would have published to PyPI and then gone red.Open item
There is no
[tool.cibuildwheel]section inpyproject.toml. The comment above thesetup-uvstep explains thatbuild-frontend = "build[uv]"needs uv on the runner, but no such setting exists in the repo — cibuildwheel will use its default pip-based frontend, making that step redundant. Either add the config the comment assumes, or drop the comment and the step.Worth doing a
workflow_dispatchrun on this branch before merging — that exerciseswheelsandsdistend to end while the tag guard keepsdeployfrom firing.🤖 Generated with Claude Code