name: Wheels on: push: paths: - ".ci/requirements-cibw.txt" - ".github/workflows/wheel*" - "wheels/*" - "winbuild/build_prepare.py" - "winbuild/fribidi.cmake" tags: - "*" pull_request: paths: - ".ci/requirements-cibw.txt" - ".github/workflows/wheel*" - "wheels/*" - "winbuild/build_prepare.py" - "winbuild/fribidi.cmake" workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: FORCE_COLOR: 1 jobs: build: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - name: "macOS x86_64" os: macos-latest archs: x86_64 macosx_deployment_target: "10.10" - name: "macOS arm64" os: macos-latest archs: arm64 macosx_deployment_target: "11.0" - name: "manylinux2014 and musllinux x86_64" os: ubuntu-latest archs: x86_64 - name: "manylinux_2_28 x86_64" os: ubuntu-latest archs: x86_64 build: "*manylinux*" manylinux: "manylinux_2_28" steps: - uses: actions/checkout@v4 with: submodules: true - uses: actions/setup-python@v4 with: python-version: "3.x" - name: Build wheels run: | python3 -m pip install -r .ci/requirements-cibw.txt python3 -m cibuildwheel --output-dir wheelhouse env: CIBW_ARCHS: ${{ matrix.archs }} CIBW_BUILD: ${{ matrix.build }} CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux }} CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux }} CIBW_SKIP: pp38-* CIBW_TEST_SKIP: "*-macosx_arm64" MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macosx_deployment_target }} - uses: actions/upload-artifact@v3 with: name: dist path: ./wheelhouse/*.whl windows: name: Windows ${{ matrix.arch }} runs-on: windows-latest strategy: fail-fast: false matrix: include: - arch: x86 cibw_arch: x86 - arch: x64 cibw_arch: AMD64 - arch: ARM64 cibw_arch: ARM64 steps: - uses: actions/checkout@v4 - name: Checkout extra test images uses: actions/checkout@v4 with: repository: python-pillow/test-images path: Tests\test-images - uses: actions/setup-python@v4 with: python-version: "3.x" - name: Prepare for build run: | choco install nasm --no-progress echo "C:\Program Files\NASM" >> $env:GITHUB_PATH # Install extra test images xcopy /S /Y Tests\test-images\* Tests\images & python.exe -m pip install -r .ci/requirements-cibw.txt # Cannot cross-compile FriBiDi (only used for tests) $FLAGS = ("--no-imagequant", "--architecture=${{ matrix.arch }}") if ('${{ matrix.arch }}' -eq 'ARM64') { $FLAGS += "--no-fribidi" } & python.exe winbuild\build_prepare.py -v @FLAGS shell: pwsh - name: Build wheels run: | setlocal EnableDelayedExpansion for %%f in (winbuild\build\license\*) do ( set x=%%~nf rem Skip FriBiDi license, it is not included in the wheel. set fribidi=!x:~0,7! if NOT !fribidi!==fribidi ( rem Skip imagequant license, it is not included in the wheel. set libimagequant=!x:~0,13! if NOT !libimagequant!==libimagequant ( echo. >> LICENSE echo ===== %%~nf ===== >> LICENSE echo. >> LICENSE type %%f >> LICENSE ) ) ) call winbuild\\build\\build_env.cmd %pythonLocation%\python.exe -m cibuildwheel . --output-dir wheelhouse env: CIBW_ARCHS: ${{ matrix.cibw_arch }} CIBW_BEFORE_ALL: "{package}\\winbuild\\build\\build_dep_all.cmd" CIBW_CACHE_PATH: "C:\\cibw" CIBW_TEST_SKIP: "*-win_arm64" CIBW_TEST_COMMAND: 'docker run --rm -v {project}:C:\pillow -v C:\cibw:C:\cibw -v %CD%\..\venv-test:%CD%\..\venv-test -e CI -e GITHUB_ACTIONS mcr.microsoft.com/windows/servercore:ltsc2022 powershell C:\pillow\.github\workflows\wheels-test.ps1 %CD%\..\venv-test' shell: cmd - name: Upload wheels uses: actions/upload-artifact@v3 with: name: dist path: ./wheelhouse/*.whl - name: Prepare to upload FriBiDi if: "matrix.arch != 'ARM64'" run: | mkdir fribidi\${{ matrix.arch }} copy winbuild\build\bin\fribidi* fribidi\${{ matrix.arch }} shell: cmd - name: Upload fribidi.dll if: "matrix.arch != 'ARM64'" uses: actions/upload-artifact@v3 with: name: fribidi path: fribidi\* sdist: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.x" cache: pip cache-dependency-path: "Makefile" - run: make sdist - uses: actions/upload-artifact@v3 with: name: dist path: dist/*.tar.gz success: permissions: contents: none needs: [build, windows, sdist] runs-on: ubuntu-latest name: Wheels Successful steps: - name: Success run: echo Wheels Successful