diff --git a/.ci/after_success.sh b/.ci/after_success.sh
index 53832c573dd..23a6fcd4d45 100755
--- a/.ci/after_success.sh
+++ b/.ci/after_success.sh
@@ -3,7 +3,7 @@
# gather the coverage data
python3 -m pip install codecov
if [[ $MATRIX_DOCKER ]]; then
- coverage xml --ignore-errors
+ python3 -m coverage xml --ignore-errors
else
- coverage xml
+ python3 -m coverage xml
fi
diff --git a/.ci/build.sh b/.ci/build.sh
index a2e3041bd27..e678f68ec85 100755
--- a/.ci/build.sh
+++ b/.ci/build.sh
@@ -2,7 +2,7 @@
set -e
-coverage erase
+python3 -m coverage erase
if [ $(uname) == "Darwin" ]; then
export CPPFLAGS="-I/usr/local/miniconda/include";
fi
diff --git a/.ci/install.sh b/.ci/install.sh
index 028d6879544..c588af42ffa 100755
--- a/.ci/install.sh
+++ b/.ci/install.sh
@@ -13,13 +13,17 @@ aptget_update()
return 1
fi
}
-aptget_update || aptget_update retry || aptget_update retry
+if [[ $(uname) != CYGWIN* ]]; then
+ aptget_update || aptget_update retry || aptget_update retry
+fi
set -e
-sudo apt-get -qq install libfreetype6-dev liblcms2-dev python3-tk\
- ghostscript libffi-dev libjpeg-turbo-progs libopenjp2-7-dev\
- cmake meson imagemagick libharfbuzz-dev libfribidi-dev
+if [[ $(uname) != CYGWIN* ]]; then
+ sudo apt-get -qq install libfreetype6-dev liblcms2-dev python3-tk\
+ ghostscript libffi-dev libjpeg-turbo-progs libopenjp2-7-dev\
+ cmake meson imagemagick libharfbuzz-dev libfribidi-dev
+fi
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade wheel
@@ -32,23 +36,28 @@ python3 -m pip install -U pytest-cov
python3 -m pip install -U pytest-timeout
python3 -m pip install pyroma
python3 -m pip install test-image-results
-# TODO Remove condition when NumPy supports 3.11
-if ! [ "$GHA_PYTHON_VERSION" == "3.11-dev" ]; then python3 -m pip install numpy ; fi
-# PyQt6 doesn't support PyPy3
-if [[ $GHA_PYTHON_VERSION == 3.* ]]; then
- sudo apt-get -qq install libegl1 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxkbcommon-x11-0
- python3 -m pip install pyqt6
-fi
+if [[ $(uname) != CYGWIN* ]]; then
+ # TODO Remove condition when NumPy supports 3.11
+ if ! [ "$GHA_PYTHON_VERSION" == "3.11-dev" ]; then python3 -m pip install numpy ; fi
-# webp
-pushd depends && ./install_webp.sh && popd
+ # PyQt6 doesn't support PyPy3
+ if [[ $GHA_PYTHON_VERSION == 3.* ]]; then
+ sudo apt-get -qq install libegl1 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxkbcommon-x11-0
+ python3 -m pip install pyqt6
+ fi
+
+ # webp
+ pushd depends && ./install_webp.sh && popd
-# libimagequant
-pushd depends && ./install_imagequant.sh && popd
+ # libimagequant
+ pushd depends && ./install_imagequant.sh && popd
-# raqm
-pushd depends && ./install_raqm.sh && popd
+ # raqm
+ pushd depends && ./install_raqm.sh && popd
-# extra test images
-pushd depends && ./install_extra_test_images.sh && popd
+ # extra test images
+ pushd depends && ./install_extra_test_images.sh && popd
+else
+ cd depends && ./install_extra_test_images.sh && cd ..
+fi
diff --git a/.github/mergify.yml b/.github/mergify.yml
index 8b289bda671..8dfa07f4ec5 100644
--- a/.github/mergify.yml
+++ b/.github/mergify.yml
@@ -8,6 +8,7 @@ pull_request_rules:
- status-success=Docker Test Successful
- status-success=Windows Test Successful
- status-success=MinGW Test Successful
+ - status-success=Cygwin Test Successful
- status-success=continuous-integration/appveyor/pr
actions:
merge:
diff --git a/.github/workflows/test-cygwin.yml b/.github/workflows/test-cygwin.yml
new file mode 100644
index 00000000000..2e8fc9c09f0
--- /dev/null
+++ b/.github/workflows/test-cygwin.yml
@@ -0,0 +1,107 @@
+name: Test Cygwin
+
+on: [push, pull_request, workflow_dispatch]
+
+jobs:
+ build:
+ runs-on: windows-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ python-minor-version: [7, 8, 9]
+
+ timeout-minutes: 40
+
+ name: Python 3.${{ matrix.python-minor-version }}
+
+ steps:
+ - name: Fix line endings
+ run: |
+ git config --global core.autocrlf input
+
+ - name: Checkout Pillow
+ uses: actions/checkout@v3
+
+ - name: Install Cygwin
+ uses: cygwin/cygwin-install-action@v2
+ with:
+ platform: x86_64
+ packages: >
+ ImageMagick gcc-g++ ghostscript jpeg libfreetype-devel
+ libimagequant-devel libjpeg-devel liblapack-devel
+ liblcms2-devel libopenjp2-devel libraqm-devel
+ libtiff-devel libwebp-devel libxcb-devel libxcb-xinerama0
+ make netpbm perl
+ python3${{ matrix.python-minor-version }}-cffi
+ python3${{ matrix.python-minor-version }}-cython
+ python3${{ matrix.python-minor-version }}-devel
+ python3${{ matrix.python-minor-version }}-numpy
+ python3${{ matrix.python-minor-version }}-sip
+ python3${{ matrix.python-minor-version }}-tkinter
+ qt5-devel-tools subversion xorg-server-extra zlib-devel
+
+ - name: Add Lapack to PATH
+ uses: egor-tensin/cleanup-path@v1
+ with:
+ dirs: 'C:\cygwin\bin;C:\cygwin\lib\lapack'
+
+ - name: pip cache
+ uses: actions/cache@v3
+ with:
+ path: 'C:\cygwin\home\runneradmin\.cache\pip'
+ key: ${{ runner.os }}-cygwin-pip3.${{ matrix.python-minor-version }}-${{ hashFiles('.ci/install.sh') }}
+ restore-keys: |
+ ${{ runner.os }}-cygwin-pip3.${{ matrix.python-minor-version }}-
+
+ - name: Build system information
+ run: |
+ dash.exe -c "python3 .github/workflows/system-info.py"
+
+ - name: Install dependencies
+ run: |
+ bash.exe .ci/install.sh
+
+ - name: Install a different NumPy
+ shell: dash.exe -l "{0}"
+ run: |
+ python3 -m pip install -U 'numpy!=1.21.*'
+
+ - name: Build
+ shell: bash.exe -eo pipefail -o igncr "{0}"
+ run: |
+ .ci/build.sh
+
+ - name: Test
+ run: |
+ bash.exe xvfb-run -s '-screen 0 1024x768x24' .ci/test.sh
+
+ - name: Prepare to upload errors
+ if: failure()
+ run: |
+ dash.exe -c "mkdir -p Tests/errors"
+
+ - name: Upload errors
+ uses: actions/upload-artifact@v3
+ if: failure()
+ with:
+ name: errors
+ path: Tests/errors
+
+ - name: After success
+ run: |
+ bash.exe .ci/after_success.sh
+
+ - name: Upload coverage
+ uses: codecov/codecov-action@v3
+ with:
+ file: ./coverage.xml
+ flags: GHA_Cygwin
+ name: Cygwin Python 3.${{ matrix.python-minor-version }}
+
+ success:
+ needs: build
+ runs-on: ubuntu-latest
+ name: Cygwin Test Successful
+ steps:
+ - name: Success
+ run: echo Cygwin Test Successful
diff --git a/README.md b/README.md
index 7bff737a289..5e9adaf7e95 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,9 @@ As of 2019, Pillow development is
+
diff --git a/docs/index.rst b/docs/index.rst
index f1a721c6ac1..5e886c2e82a 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -29,6 +29,10 @@ Pillow for enterprise is available via the Tidelift Subscription. `Learn more