Test Windows #273
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test Windows | |
on: [push, pull_request] | |
jobs: | |
build: | |
runs-on: windows-2019 | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.6", "3.7", "3.8", "3.9", "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: echo "TCL_LIBRARY=$env:pythonLocation\tcl\tcl8.5" >> $env:GITHUB_ENV | |
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 | |
# TODO Remove when 3.8 / 3.9 includes setuptools 49.3.2+: | |
- name: Upgrade setuptools | |
if: "contains(matrix.python-version, '3.8') || contains(matrix.python-version, '3.9')" | |
run: python -m pip install -U "setuptools>=49.3.2" | |
- name: Install dependencies | |
run: | | |
7z x winbuild\depends\nasm-2.14.02-win64.zip "-o$env:RUNNER_WORKSPACE\" | |
echo "$env:RUNNER_WORKSPACE\nasm-2.14.02" >> $env:GITHUB_PATH | |
winbuild\depends\gs9533w32.exe /S | |
echo "C:\Program Files (x86)\gs\gs9.53.3\bin" >> $env:GITHUB_PATH | |
xcopy /s winbuild\depends\test_images\* Tests\images\ | |
shell: pwsh | |
- name: Cache build | |
id: build-cache | |
uses: actions/cache@v2 | |
with: | |
path: winbuild\build | |
key: | |
${{ hashFiles('winbuild\build_prepare.py') }}-${{ hashFiles('.github\workflows\test-windows.yml') }}-${{ env.pythonLocation }} | |
- name: Prepare build | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: | | |
& python.exe winbuild\build_prepare.py -v --python=$env:pythonLocation --srcdir | |
shell: pwsh | |
- name: Build dependencies / libjpeg-turbo | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libjpeg.cmd" | |
- name: Build dependencies / zlib | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_zlib.cmd" | |
- name: Build dependencies / LibTiff | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libtiff.cmd" | |
- name: Build dependencies / WebP | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libwebp.cmd" | |
# for FreeType CBDT font support | |
- name: Build dependencies / libpng | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libpng.cmd" | |
- name: Build dependencies / FreeType | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_freetype.cmd" | |
- name: Build dependencies / LCMS2 | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_lcms2.cmd" | |
- name: Build dependencies / OpenJPEG | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_openjpeg.cmd" | |
# GPL licensed | |
- name: Build dependencies / libimagequant | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libimagequant.cmd" | |
# Raqm dependencies | |
- name: Build dependencies / HarfBuzz | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_harfbuzz.cmd" | |
- name: Build dependencies / FriBidi | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_fribidi.cmd" | |
- name: Build dependencies / Raqm | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: "& winbuild\\build\\build_dep_libraqm.cmd" | |
# trim ~150MB x 9 | |
- name: Optimize build cache | |
if: steps.build-cache.outputs.cache-hit != 'true' | |
run: rmdir /S /Q winbuild\build\src | |
shell: cmd | |
- name: Build Pillow | |
run: | | |
$FLAGS="" | |
if ('${{ github.event_name }}' -eq 'push') { $FLAGS="--disable-imagequant" } | |
& winbuild\build\build_pillow.cmd $FLAGS 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 --disable-imagequant 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" | |
name: "MSYS2 MinGW 32-bit" | |
package: "mingw-w64-i686" | |
- mingw: "MINGW64" | |
name: "MSYS2 MinGW 64-bit" | |
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: ${{ matrix.name }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up shell | |
run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH | |
shell: pwsh | |
- name: Install Dependencies | |
run: | | |
pacman -S --noconfirm \ | |
${{ matrix.package }}-python3-cffi \ | |
${{ matrix.package }}-python3-numpy \ | |
${{ matrix.package }}-python3-olefile \ | |
${{ matrix.package }}-python3-pip \ | |
${{ matrix.package }}-python3-pyqt5 \ | |
${{ matrix.package }}-python3-pytest \ | |
${{ matrix.package }}-python3-pytest-cov \ | |
${{ matrix.package }}-python3-setuptools \ | |
${{ matrix.package }}-freetype \ | |
${{ matrix.package }}-ghostscript \ | |
${{ matrix.package }}-lcms2 \ | |
${{ matrix.package }}-libimagequant \ | |
${{ matrix.package }}-libjpeg-turbo \ | |
${{ matrix.package }}-libraqm \ | |
${{ matrix.package }}-libtiff \ | |
${{ matrix.package }}-libwebp \ | |
${{ matrix.package }}-openjpeg2 \ | |
subversion | |
python3 -m pip install pyroma | |
pushd depends && ./install_extra_test_images.sh && popd | |
- name: Build Pillow | |
run: CFLAGS="-coverage" python3 setup.py build_ext 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: ${{ matrix.name }} | |
success: | |
needs: [build, msys] | |
runs-on: ubuntu-latest | |
name: Windows Test Successful | |
steps: | |
- name: Success | |
run: echo Windows Test Successful |