Add cross-platform wheel builds (macOS ARM64, Linux x86_64/aarch64)#99
Open
skypher wants to merge 16 commits intogoogle:masterfrom
Open
Add cross-platform wheel builds (macOS ARM64, Linux x86_64/aarch64)#99skypher wants to merge 16 commits intogoogle:masterfrom
skypher wants to merge 16 commits intogoogle:masterfrom
Conversation
Add support for building wheels on: - Linux x86_64 (existing) - Linux aarch64 (new) - macOS x86_64 (new) - macOS arm64 (new) Changes: - pyproject.toml: Add [build-system] and [tool.cibuildwheel] config - .github/workflows/wheels.yaml: New workflow for building and publishing - STATUS.md: Document testing results and implementation plan Tested on macOS 15.6 ARM64 (M1) with Python 3.12 and 3.13. Key finding: macOS builds require Homebrew LLVM and must link against Homebrew's libc++ to avoid symbol mismatch with system libc++. Addresses google#52
- Add deployment/Dockerfile.aarch64 for ARM64 Linux builds - Add .github/workflows/linux-wheels.yaml for Docker-based builds - Linux builds require LLVM from source (~30-60 min x86_64, ~2-3h aarch64) - Update STATUS.md with workflow documentation
- Add 'wheel' to build-system requires - Document Homebrew runtime dependency in workflow header - Remove unused Linux cibuildwheel config (use Docker instead) - Clean up misleading comments about multi-platform support
- Replace UTF-8 ellipsis character with ASCII '...' in pyproject.toml - Document macOS ARM64 Homebrew runtime dependency in README
- Pin aarch64 LLVM to same commit as x86_64 (0982db188b...) for reproducible builds and consistent libFuzzer versions - Add tag-push trigger to linux-wheels.yaml so Linux wheels build on releases automatically - Add publish job to linux-wheels.yaml so Linux wheels are uploaded to PyPI alongside macOS wheels from the main workflow
- Remove publish jobs from wheels.yaml and linux-wheels.yaml - Add release.yaml that waits for all build workflows to complete before downloading artifacts and publishing to PyPI - Prevents partial PyPI releases when one workflow fails On tag push, all three workflows run: 1. wheels.yaml builds macOS + sdist 2. linux-wheels.yaml builds Linux x86_64 + aarch64 3. release.yaml waits for both, then publishes everything
- Add checks:read permission for wait-for-builds job - Use --commit instead of --branch for gh run list (--branch doesn't work for tag refs, would return wrong/no runs) - Fix stale comment in linux-wheels.yaml header
- Add 240-minute timeout to wait-for-builds job (aarch64 build can take up to 180 min, plus buffer for other builds) - Add skip-existing: true to PyPI publish step so failed releases can be retried without manual cleanup
2 tasks
|
Nice. We really need it in Airfow! |
potiuk
approved these changes
Jan 10, 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
Add automated wheel builds for macOS ARM64 and Linux (x86_64 + aarch64), addressing #52.
Platforms
Known Limitations
brew install llvm) due to libc++ linkage. This is documented in README.md.Workflow Structure
On tag push (
v*):wheels.yaml- builds macOS ARM64 + sdistlinux-wheels.yaml- builds Linux x86_64 + aarch64release.yaml- waits for both, then publishes all to PyPIChanges
pyproject.toml- cibuildwheel configuration + build-system requirements.github/workflows/wheels.yaml- macOS ARM64 builds.github/workflows/linux-wheels.yaml- Linux Docker builds.github/workflows/release.yaml- unified PyPI publishingdeployment/Dockerfile.aarch64- ARM64 Linux containerREADME.md- documents macOS Homebrew dependencyTesting
Fixes #52