Pillow/.github/workflows/test-windows.yml

198 lines
6.3 KiB
YAML
Raw Normal View History

2019-09-23 14:12:01 +03:00
name: Test Windows
on: [push, pull_request, workflow_dispatch]
2019-09-23 14:12:01 +03:00
jobs:
build:
runs-on: windows-latest
2019-09-23 14:12:01 +03:00
strategy:
fail-fast: false
2019-09-23 14:12:01 +03:00
matrix:
2021-10-18 10:14:18 +03:00
python-version: ["3.7", "3.8", "3.9", "3.10"]
architecture: ["x86", "x64"]
include:
# PyPy 7.3.4+ only ships 64-bit binaries for Windows
2020-12-17 18:23:12 +03:00
- python-version: "pypy-3.7"
architecture: "x64"
2021-10-18 10:16:29 +03:00
- python-version: "pypy-3.8"
architecture: "x64"
2021-09-06 15:07:53 +03:00
timeout-minutes: 30
2019-10-14 23:22:21 +03:00
name: Python ${{ matrix.python-version }} ${{ matrix.architecture }}
2019-10-14 23:22:21 +03:00
2019-09-23 14:12:01 +03:00
steps:
2020-01-01 04:43:00 +03:00
- name: Checkout Pillow
2020-03-29 21:18:39 +03:00
uses: actions/checkout@v2
2020-01-01 04:43:00 +03:00
- name: Checkout cached dependencies
2020-03-29 21:18:39 +03:00
uses: actions/checkout@v2
2019-11-20 21:20:01 +03:00
with:
repository: python-pillow/pillow-depends
2020-03-29 21:18:39 +03:00
path: winbuild\depends
2019-11-20 21:20:01 +03:00
# sets env: pythonLocation
- name: Set up Python
2020-06-30 22:01:19 +03:00
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.architecture }}
2021-11-18 14:42:41 +03:00
cache: pip
cache-dependency-path: ".github/workflows/test-windows.yml"
2019-09-25 10:58:29 +03:00
2020-01-01 04:43:00 +03:00
- name: Print build system information
run: python .github/workflows/system-info.py
- name: python -m pip install wheel pytest pytest-cov pytest-timeout defusedxml
run: python -m pip install wheel pytest pytest-cov pytest-timeout defusedxml
2019-10-14 23:22:21 +03:00
2020-06-16 05:05:34 +03:00
- name: Install dependencies
id: install
2019-09-23 14:47:45 +03:00
run: |
7z x winbuild\depends\nasm-2.15.05-win64.zip "-o$env:RUNNER_WORKSPACE\"
echo "$env:RUNNER_WORKSPACE\nasm-2.15.05" >> $env:GITHUB_PATH
2019-09-27 11:18:32 +03:00
2021-09-27 16:19:05 +03:00
winbuild\depends\gs9550w32.exe /S
echo "C:\Program Files (x86)\gs\gs9.55.0\bin" >> $env:GITHUB_PATH
2019-11-08 01:23:59 +03:00
xcopy /S /Y winbuild\depends\test_images\* Tests\images\
# make cache key depend on VS version
& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" | find """catalog_buildVersion""" | ForEach-Object { $a = $_.split(" ")[1]; echo "::set-output name=vs::$a" }
2020-06-16 05:05:34 +03:00
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 }}-${{ steps.install.outputs.vs }}
2020-06-16 05:05:34 +03:00
- name: Prepare build
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
& python.exe winbuild\build_prepare.py -v --python=$env:pythonLocation --srcdir
2019-09-23 14:47:45 +03:00
shell: pwsh
2019-09-27 11:18:32 +03:00
- name: Build dependencies / libjpeg-turbo
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_libjpeg.cmd"
2020-11-21 17:07:31 +03:00
2019-09-23 14:47:45 +03:00
- name: Build dependencies / zlib
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_zlib.cmd"
2020-11-21 17:07:31 +03:00
- name: Build dependencies / LibTiff
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_libtiff.cmd"
2020-11-21 17:07:31 +03:00
2019-09-25 12:28:52 +03:00
- name: Build dependencies / WebP
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_libwebp.cmd"
2020-11-21 17:07:31 +03:00
# for FreeType CBDT/SBIX font support
- name: Build dependencies / libpng
if: steps.build-cache.outputs.cache-hit != 'true'
run: "& winbuild\\build\\build_dep_libpng.cmd"
2020-11-21 17:07:31 +03:00
2019-09-25 12:28:52 +03:00
- name: Build dependencies / FreeType
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_freetype.cmd"
2020-11-21 17:07:31 +03:00
2019-09-25 12:28:52 +03:00
- name: Build dependencies / LCMS2
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_lcms2.cmd"
2020-11-21 17:07:31 +03:00
2019-09-25 12:28:52 +03:00
- name: Build dependencies / OpenJPEG
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_openjpeg.cmd"
2020-06-21 13:32:37 +03:00
# GPL licensed
2019-09-27 13:37:54 +03:00
- name: Build dependencies / libimagequant
2020-06-21 13:32:37 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_libimagequant.cmd"
2019-09-27 13:37:54 +03:00
2019-12-31 20:13:16 +03:00
# Raqm dependencies
2019-09-30 02:04:26 +03:00
- name: Build dependencies / HarfBuzz
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_harfbuzz.cmd"
2020-11-21 17:07:31 +03:00
# Raqm dependencies
2019-09-30 02:04:26 +03:00
- name: Build dependencies / FriBidi
2020-06-16 05:05:34 +03:00
if: steps.build-cache.outputs.cache-hit != 'true'
2020-01-01 04:43:00 +03:00
run: "& winbuild\\build\\build_dep_fribidi.cmd"
2020-11-21 17:07:31 +03:00
2020-06-16 05:05:34 +03:00
# 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
2019-09-23 23:01:19 +03:00
- name: Build Pillow
run: |
2020-06-21 13:32:37 +03:00
$FLAGS=""
if ('${{ github.event_name }}' -ne 'pull_request') { $FLAGS="--disable-imagequant" }
2020-06-21 13:32:37 +03:00
& winbuild\build\build_pillow.cmd $FLAGS install
& $env:pythonLocation\python.exe selftest.py --installed
shell: pwsh
2019-10-14 23:22:21 +03:00
# skip PyPy for speed
- name: Enable heap verification
if: "!contains(matrix.python-version, 'pypy')"
run: |
& reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\python.exe" /v "GlobalFlag" /t REG_SZ /d "0x02000000" /f
2019-09-23 23:01:19 +03:00
- name: Test Pillow
2019-09-23 23:45:21 +03:00
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
2019-10-14 23:22:21 +03:00
- name: Prepare to upload errors
if: failure()
run: |
mkdir -p Tests/errors
2021-03-08 14:21:22 +03:00
shell: bash
2019-10-12 13:59:03 +03:00
- name: Upload errors
2020-06-30 22:01:19 +03:00
uses: actions/upload-artifact@v2
2019-10-12 13:59:03 +03:00
if: failure()
with:
name: errors
path: Tests/errors
2020-01-19 15:45:41 +03:00
- name: After success
run: |
.ci/after_success.sh
2020-01-19 22:20:13 +03:00
shell: pwsh
2020-01-19 15:45:41 +03:00
2019-09-23 23:45:21 +03:00
- name: Upload coverage
2019-12-24 11:11:46 +03:00
uses: codecov/codecov-action@v1
with:
2019-12-31 20:13:16 +03:00
file: ./coverage.xml
flags: GHA_Windows
2020-01-01 03:48:13 +03:00
name: ${{ runner.os }} Python ${{ matrix.python-version }} ${{ matrix.architecture }}
2019-09-25 10:58:29 +03:00
- name: Build wheel
id: wheel
if: "github.event_name != 'pull_request'"
2019-09-25 10:58:29 +03:00
run: |
for /f "tokens=3 delims=/" %%a in ("${{ github.ref }}") do echo ::set-output name=dist::dist-%%a
2020-06-21 13:32:37 +03:00
winbuild\\build\\build_pillow.cmd --disable-imagequant bdist_wheel
shell: cmd
2019-09-25 10:58:29 +03:00
- uses: actions/upload-artifact@v2
if: "github.event_name != 'pull_request'"
2019-09-25 10:58:29 +03:00
with:
name: ${{ steps.wheel.outputs.dist }}
2020-03-29 21:18:39 +03:00
path: dist\*.whl
2020-05-23 18:58:06 +03:00
success:
2021-09-06 15:07:53 +03:00
needs: build
runs-on: ubuntu-latest
name: Windows Test Successful
steps:
- name: Success
run: echo Windows Test Successful