name: Build on: [push, pull_request] jobs: build-wheels: name: Build wheels for ${{ matrix.os }} runs-on: ${{ matrix.runs-on }} strategy: matrix: include: - os: linux-intel runs-on: ubuntu-latest - os: linux-arm runs-on: ubuntu-24.04-arm - os: windows-intel runs-on: windows-latest - os: macos-intel runs-on: macos-13 - os: macos-arm runs-on: macos-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Build wheels uses: pypa/cibuildwheel@v3.0.0 - uses: actions/upload-artifact@v4 with: name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl - name: Get coverage files if: matrix.os == 'linux-intel' id: get-coverage-files run: | FILES=$(find ./wheelhouse -type f -name 'coverage*' -printf '%p ') echo "files=$FILES" >> $GITHUB_OUTPUT - name: Coveralls if: matrix.os == 'linux-intel' uses: coverallsapp/github-action@v2 with: files: ${{ steps.get-coverage-files.outputs.files }} build-sdist: name: Build source distribution runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Build sdist run: pipx run build --sdist - uses: actions/upload-artifact@v4 with: name: cibw-sdist path: dist/*.tar.gz upload-pypi: name: Publish to PyPI needs: [build-wheels, build-sdist] runs-on: ubuntu-latest environment: pypi permissions: id-token: write if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') steps: - uses: actions/download-artifact@v4 with: pattern: cibw-* path: dist merge-multiple: true - uses: pypa/gh-action-pypi-publish@release/v1