name: Build on: [push, pull_request] jobs: build_wheels: name: Build wheels on ${{ matrix.os }} ${{ matrix.arch }} runs-on: ${{ matrix.os }} strategy: max-parallel: 99 fail-fast: false matrix: include: - os: ubuntu-latest arch: x86_64 - os: ubuntu-latest arch: i686 - os: ubuntu-latest arch: aarch64 - os: ubuntu-latest arch: ppc64le - os: ubuntu-latest arch: s390x - os: macos-13 arch: x86_64 - os: macos-14 arch: arm64 # Disabled until someone figures out how to build capnproto for arm64 and x86_64 simultaneously # - os: macOS-latest # arch: universal2 - os: windows-2022 arch: AMD64 - os: windows-2022 arch: x86 # Does not build currently # - os: windows-2019 # arch: ARM64 steps: - uses: actions/checkout@v5 - name: Set up QEMU if: runner.os == 'Linux' uses: docker/setup-qemu-action@v3 - name: Build wheels uses: pypa/cibuildwheel@v3.1.4 with: output-dir: wheelhouse env: CIBW_ARCHS: ${{ matrix.arch }} # TODO: Disable building PyPy wheels. If the build system gets modernized, this should be # auto-detected based on the Cython dependency. CIBW_SKIP: pp* CIBW_TEST_REQUIRES: pytest pytest-asyncio CIBW_TEST_COMMAND: pytest {project} # Only needed to make the macosx arm64 build work CMAKE_OSX_ARCHITECTURES: "${{ matrix.arch == 'arm64' && 'arm64' || '' }}" - uses: actions/upload-artifact@v4 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl build_sdist: name: Build source distribution runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Build sdist run: pipx run build --sdist - uses: actions/upload-artifact@v4 with: name: cibw-sdist path: dist/*.tar.gz lint: name: Lint with flake8 and check black runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Lint with flake8 and check black run: | pip install black flake8 flake8 . --filename '*.py,*.pyx,*.pxd' --count --show-source --statistics --exclude benchmark,build,capnp/templates/module.pyx flake8 . --count --show-source --statistics --exclude benchmark,build black . --check --diff --color # upload_pypi: # needs: [build_wheels, build_sdist] # runs-on: ubuntu-latest # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') # steps: # - uses: actions/download-artifact@v3 # with: # # unpacks default artifact into dist/ # # if `name: artifact` is omitted, the action will create extra parent dir # name: artifact # path: dist # - uses: pypa/gh-action-pypi-publish@v1.5.0 # with: # user: __token__ # password: ${{ secrets.PYPI_PASSWORD_RELEASE }} # # password: ${{ secrets.PYPI_PASSWORD }} # # repository_url: https://test.pypi.org/legacy/