name: Build and deploy on: workflow_dispatch: release: types: - published jobs: build_wheels: name: Build wheels on ${{ matrix.os }}-${{ matrix.cibw_archs }} runs-on: ${{ matrix.os }} strategy: # Ensure that a wheel builder finishes even if another fails fail-fast: false matrix: include: - os: ubuntu-20.04 cibw_archs: "auto64" #- os: ubuntu-20.04 # cibw_archs: "auto32" - os: ubuntu-20.04 cibw_archs: "aarch64" - os: ubuntu-20.04 cibw_archs: "ppc64le" - os: windows-2019 cibw_archs: "auto64" #- os: windows-2019 # cibw_archs: "auto32" - os: macos-13 cibw_archs: "universal2" steps: - uses: actions/checkout@v4 - name: Set up QEMU if: runner.os == 'Linux' uses: docker/setup-qemu-action@v3 with: platforms: all - name: Build wheels uses: pypa/cibuildwheel@v2.16.5 env: CIBW_BUILD_VERBOSITY: 1 CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7" CIBW_BUILD: cp37-* cp38-* cp39-* cp310-* cp311-* cp312-* # Do not build for pypy, muslinux and python3.12 on ppc64le CIBW_SKIP: pp* *-musllinux_* cp312-*linux_ppc64le CIBW_ARCHS: ${{ matrix.cibw_archs }} # Use silx wheelhouse: needed for ppc64le CIBW_ENVIRONMENT_LINUX: "PIP_FIND_LINKS=https://www.silx.org/pub/wheelhouse/ PIP_TRUSTED_HOST=www.silx.org" CIBW_BEFORE_TEST: "pip install --only-binary :all: fabio PyQt5" CIBW_TEST_EXTRAS: full CIBW_TEST_COMMAND: pytest {project}/test # Skip tests for 32bits and emulated architectures, arm64 macos and on Windows CIBW_TEST_SKIP: "*-*linux_i686 *-*linux_{aarch64,ppc64le,s390x} *-macosx_arm64 *-macosx_universal2:arm64 *-win32 *-win_amd64" - 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@v4 - uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' - name: Install dependencies run: | python -m pip install --upgrade pip pip install build twine - name: Build sdist run: python -m build --sdist - name: Check the package run: | python -m twine check dist/* - name: Install and test sdist run: | pip install "$(ls dist/imaged11*.tar.gz)[full]" pytest test - uses: actions/upload-artifact@v4 with: name: cibw-sdist path: dist/*.tar.gz pypi-publish: needs: [build_wheels, build_sdist] name: Upload release to PyPI runs-on: ubuntu-latest environment: name: pypi permissions: id-token: write if: github.event_name == 'release' && github.event.action == 'published' # or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this) # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') steps: - uses: actions/download-artifact@v4 with: pattern: cibw-* path: dist merge-multiple: true - uses: pypa/gh-action-pypi-publish@release/v1