name: Test Windows on: [push, pull_request] jobs: build: runs-on: windows-2019 strategy: fail-fast: false matrix: python-version: ["3.5", "3.6", "3.7", "3.8", "pypy3"] architecture: ["x86", "x64"] include: - architecture: "x86" platform-vcvars: "x86" platform-msbuild: "Win32" - architecture: "x64" platform-vcvars: "x86_amd64" platform-msbuild: "x64" exclude: # PyPy does not support 64-bit on Windows - python-version: "pypy3" architecture: "x64" timeout-minutes: 30 name: Python ${{ matrix.python-version }} ${{ matrix.architecture }} steps: - name: Checkout Pillow uses: actions/checkout@v2 - name: Checkout cached dependencies uses: actions/checkout@v2 with: repository: python-pillow/pillow-depends path: winbuild\depends - name: Cache pip uses: actions/cache@v2 with: path: ~\AppData\Local\pip\Cache key: ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.architecture }}-${{ hashFiles('**/.github/workflows/test-windows.yml') }} restore-keys: | ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.architecture }}- ${{ runner.os }}-${{ matrix.python-version }}- # sets env: pythonLocation - name: Set up Python uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} architecture: ${{ matrix.architecture }} - name: Set up TCL if: "contains(matrix.python-version, 'pypy')" run: Write-Host "::set-env name=TCL_LIBRARY::$env:pythonLocation\tcl\tcl8.5" shell: pwsh - name: Print build system information run: python .github/workflows/system-info.py - name: pip install wheel pytest pytest-cov run: python -m pip install wheel pytest pytest-cov - name: Prepare dependencies run: | 7z x winbuild\depends\nasm-2.14.02-win64.zip "-o$env:RUNNER_WORKSPACE\" Write-Host "::add-path::$env:RUNNER_WORKSPACE\nasm-2.14.02" winbuild\depends\gs950w32.exe /S Write-Host "::add-path::C:\Program Files (x86)\gs\gs9.50\bin" xcopy /s winbuild\depends\test_images\* Tests\images\ & python.exe winbuild\build_prepare.py -v --python=$env:pythonLocation shell: pwsh - name: Build dependencies / libjpeg-turbo run: "& winbuild\\build\\build_dep_libjpeg.cmd" - name: Build dependencies / zlib run: "& winbuild\\build\\build_dep_zlib.cmd" - name: Build dependencies / LibTiff run: "& winbuild\\build\\build_dep_libtiff.cmd" - name: Build dependencies / WebP run: "& winbuild\\build\\build_dep_libwebp.cmd" - name: Build dependencies / FreeType run: "& winbuild\\build\\build_dep_freetype.cmd" - name: Build dependencies / LCMS2 run: "& winbuild\\build\\build_dep_lcms2.cmd" - name: Build dependencies / OpenJPEG run: "& winbuild\\build\\build_dep_openjpeg.cmd" # GPL licensed; skip if building wheels - name: Build dependencies / libimagequant if: "github.event_name != 'push'" run: "& winbuild\\build\\build_dep_libimagequant.cmd" # Raqm dependencies - name: Build dependencies / HarfBuzz run: "& winbuild\\build\\build_dep_harfbuzz.cmd" - name: Build dependencies / FriBidi run: "& winbuild\\build\\build_dep_fribidi.cmd" - name: Build dependencies / Raqm run: "& winbuild\\build\\build_dep_libraqm.cmd" - name: Build Pillow run: | & winbuild\build\build_pillow.cmd install & $env:pythonLocation\python.exe selftest.py --installed shell: pwsh # failing with PyPy3 - name: Enable heap verification if: "!contains(matrix.python-version, 'pypy')" run: "& 'C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86\\gflags.exe' /p /enable $env:pythonLocation\\python.exe" - name: Test Pillow run: | path %GITHUB_WORKSPACE%\\winbuild\\build\\bin;%PATH% python.exe -m pytest -vx -W always --cov PIL --cov Tests --cov-report term --cov-report xml Tests shell: cmd - name: Prepare to upload errors if: failure() run: | mkdir -p Tests/errors shell: pwsh - name: Upload errors uses: actions/upload-artifact@v2 if: failure() with: name: errors path: Tests/errors - name: After success run: | .ci/after_success.sh shell: pwsh - name: Upload coverage uses: codecov/codecov-action@v1 with: file: ./coverage.xml flags: GHA_Windows name: ${{ runner.os }} Python ${{ matrix.python-version }} ${{ matrix.architecture }} - name: Build wheel id: wheel if: "github.event_name == 'push'" run: | for /f "tokens=3 delims=/" %%a in ("${{ github.ref }}") do echo ::set-output name=dist::dist-%%a winbuild\\build\\build_pillow.cmd bdist_wheel" shell: cmd - uses: actions/upload-artifact@v2 if: "github.event_name == 'push'" with: name: ${{ steps.wheel.outputs.dist }} path: dist\*.whl msys: runs-on: windows-2019 strategy: fail-fast: false matrix: mingw: ["MINGW32", "MINGW64"] include: - mingw: "MINGW32" package: "mingw-w64-i686" - mingw: "MINGW64" package: "mingw-w64-x86_64" defaults: run: shell: bash.exe --login -eo pipefail "{0}" env: MSYSTEM: ${{ matrix.mingw }} CHERE_INVOKING: 1 timeout-minutes: 30 name: MSYS2 ${{ matrix.mingw }} steps: - uses: actions/checkout@v2 - name: Set up shell run: echo ::add-path::C:\msys64\usr\bin\ shell: pwsh - name: Install Dependencies run: | pacman -S --noconfirm \ ${{ matrix.package }}-python3-pip \ ${{ matrix.package }}-python3-setuptools \ ${{ matrix.package }}-python3-pytest \ ${{ matrix.package }}-python3-pytest-cov \ ${{ matrix.package }}-python3-cffi \ ${{ matrix.package }}-python3-olefile \ ${{ matrix.package }}-python3-numpy \ ${{ matrix.package }}-python3-pyqt5 \ ${{ matrix.package }}-python3-numpy \ ${{ matrix.package }}-freetype \ ${{ matrix.package }}-lcms2 \ ${{ matrix.package }}-libwebp \ ${{ matrix.package }}-libjpeg-turbo \ ${{ matrix.package }}-openjpeg2 \ ${{ matrix.package }}-libimagequant \ ${{ matrix.package }}-libraqm \ ${{ matrix.package }}-ghostscript \ subversion python3 -m pip install pyroma pushd depends && ./install_extra_test_images.sh && popd - name: Build Pillow run: | # libtiff is unable to open files CFLAGS="-coverage" python3 setup.py build_ext --disable-tiff install - name: Test Pillow run: | python3 selftest.py --installed python3 -m pytest -vx --cov PIL --cov Tests --cov-report term --cov-report xml Tests - name: Upload coverage run: | python3 -m pip install codecov bash <(curl -s https://codecov.io/bash) -F GHA_Windows env: CODECOV_NAME: MSYS2 ${{ matrix.mingw }}