mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-28 02:04:36 +03:00
Merge pull request #2368 from wiredfool/travis-docker
Docker images for additional travis runs
This commit is contained in:
commit
fea66e9c1c
128
.travis.yml
128
.travis.yml
|
@ -6,49 +6,38 @@ notifications:
|
||||||
# Run slow PyPy* first, to give them a headstart and reduce waiting time.
|
# Run slow PyPy* first, to give them a headstart and reduce waiting time.
|
||||||
# Run latest 3.x and 2.x next, to get quick compatibility results.
|
# Run latest 3.x and 2.x next, to get quick compatibility results.
|
||||||
# Then run the remainder.
|
# Then run the remainder.
|
||||||
python:
|
|
||||||
- "pypy"
|
matrix:
|
||||||
- "pypy3"
|
fast_finish: true
|
||||||
- 3.6
|
allow_failures:
|
||||||
- 2.7
|
- python: nightly
|
||||||
- "2.7_with_system_site_packages" # For PyQt4
|
include:
|
||||||
- 3.5
|
- python: "pypy"
|
||||||
- 3.4
|
- python: "pypy3"
|
||||||
- 3.3
|
- python: '3.6'
|
||||||
- nightly
|
- python: '2.7'
|
||||||
|
- env: DOCKER="alpine"
|
||||||
|
- env: DOCKER="ubuntu-trusty-x86"
|
||||||
|
- env: DOCKER="ubuntu-xenial-amd64"
|
||||||
|
- env: DOCKER="ubuntu-precise-amd64"
|
||||||
|
- python: "2.7_with_system_site_packages" # For PyQt4
|
||||||
|
- python: '3.5'
|
||||||
|
- python: '3.4'
|
||||||
|
- python: '3.3'
|
||||||
|
- python: 'nightly'
|
||||||
|
|
||||||
dist: trusty
|
dist: trusty
|
||||||
|
|
||||||
|
sudo: required
|
||||||
|
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- "travis_retry sudo apt-get update"
|
- if [ "$DOCKER" == "" ]; then .travis/install.sh; fi
|
||||||
- "travis_retry sudo apt-get -qq install libfreetype6-dev liblcms2-dev python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick"
|
|
||||||
- "travis_retry pip install cffi"
|
|
||||||
- "travis_retry pip install nose"
|
|
||||||
- "travis_retry pip install check-manifest"
|
|
||||||
- "travis_retry pip install olefile"
|
|
||||||
# Pyroma tests sometimes hang on PyPy; skip
|
|
||||||
- if [ $TRAVIS_PYTHON_VERSION != "pypy" ]; then travis_retry pip install pyroma; fi
|
|
||||||
|
|
||||||
- "travis_retry pip install coverage"
|
|
||||||
|
|
||||||
# docs only on python 2.7
|
|
||||||
- if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ]; then travis_retry pip install -r requirements.txt ; fi
|
|
||||||
|
|
||||||
# clean checkout for manifest
|
|
||||||
- mkdir /tmp/check-manifest && cp -a . /tmp/check-manifest
|
|
||||||
|
|
||||||
# webp
|
|
||||||
- pushd depends && ./install_webp.sh && popd
|
|
||||||
|
|
||||||
# openjpeg
|
|
||||||
- pushd depends && ./install_openjpeg.sh && popd
|
|
||||||
|
|
||||||
# libimagequant
|
|
||||||
- pushd depends && ./install_imagequant.sh && popd
|
|
||||||
|
|
||||||
# extra test images
|
|
||||||
- pushd depends && ./install_extra_test_images.sh && popd
|
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- if [ "$DOCKER" ]; then docker pull pythonpillow/$DOCKER; fi
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
# Qt needs a display for some of the tests, and it's only run on the system site packages install
|
# Qt needs a display for some of the tests, and it's only run on the system site packages install
|
||||||
|
@ -56,59 +45,15 @@ before_script:
|
||||||
- "sh -e /etc/init.d/xvfb start"
|
- "sh -e /etc/init.d/xvfb start"
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- coverage erase
|
- |
|
||||||
- python setup.py clean
|
if [ "$DOCKER" == "" ]; then
|
||||||
- CFLAGS="-coverage" python setup.py build_ext --inplace
|
.travis/script.sh
|
||||||
|
else
|
||||||
- coverage run --append --include=PIL/* selftest.py
|
docker run -v $TRAVIS_BUILD_DIR:/Pillow pythonpillow/$DOCKER
|
||||||
- coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py
|
fi
|
||||||
- pushd /tmp/check-manifest && check-manifest --ignore ".coveragerc,.editorconfig,*.yml,*.yaml,tox.ini" && popd
|
|
||||||
|
|
||||||
# Docs
|
|
||||||
- if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ]; then make install && make doccheck; fi
|
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
# gather the coverage data
|
- .travis/after_success.sh
|
||||||
- travis_retry sudo apt-get -qq install lcov
|
|
||||||
- lcov --capture --directory . -b . --output-file coverage.info
|
|
||||||
# filter to remove system headers
|
|
||||||
- lcov --remove coverage.info '/usr/*' -o coverage.filtered.info
|
|
||||||
# convert to json
|
|
||||||
- travis_retry gem install coveralls-lcov
|
|
||||||
- coveralls-lcov -v -n coverage.filtered.info > coverage.c.json
|
|
||||||
|
|
||||||
- coverage report
|
|
||||||
- travis_retry pip install coveralls-merge
|
|
||||||
- coveralls-merge coverage.c.json
|
|
||||||
|
|
||||||
- travis_retry pip install pep8 pyflakes
|
|
||||||
- pep8 --statistics --count PIL/*.py
|
|
||||||
- pep8 --statistics --count Tests/*.py
|
|
||||||
- pyflakes *.py | tee >(wc -l)
|
|
||||||
- pyflakes PIL/*.py | tee >(wc -l)
|
|
||||||
- pyflakes Tests/*.py | tee >(wc -l)
|
|
||||||
|
|
||||||
# Coverage and quality reports on just the latest diff.
|
|
||||||
# (Installation is very slow on Py3, so just do it for Py2.)
|
|
||||||
- if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then depends/diffcover-install.sh; fi
|
|
||||||
- if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then depends/diffcover-run.sh; fi
|
|
||||||
|
|
||||||
# after_all
|
|
||||||
- |
|
|
||||||
if [ "$TRAVIS_REPO_SLUG" = "python-pillow/Pillow" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ]; then
|
|
||||||
curl -Lo travis_after_all.py https://raw.github.com/dmakhno/travis_after_all/master/travis_after_all.py
|
|
||||||
python travis_after_all.py
|
|
||||||
export $(cat .to_export_back)
|
|
||||||
if [ "$BUILD_LEADER" = "YES" ]; then
|
|
||||||
if [ "$BUILD_AGGREGATE_STATUS" = "others_succeeded" ]; then
|
|
||||||
echo "All jobs succeded! Triggering macOS build..."
|
|
||||||
# Trigger a macOS build at the pillow-wheels repo
|
|
||||||
./build_children.sh
|
|
||||||
else
|
|
||||||
echo "Some jobs failed"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
after_failure:
|
after_failure:
|
||||||
- |
|
- |
|
||||||
|
@ -131,11 +76,6 @@ after_script:
|
||||||
echo leader=$BUILD_LEADER status=$BUILD_AGGREGATE_STATUS
|
echo leader=$BUILD_LEADER status=$BUILD_AGGREGATE_STATUS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- python: nightly
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
# travis encrypt AUTH_TOKEN=
|
# travis encrypt AUTH_TOKEN=
|
||||||
|
|
46
.travis/after_success.sh
Executable file
46
.travis/after_success.sh
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# gather the coverage data
|
||||||
|
sudo apt-get -qq install lcov
|
||||||
|
lcov --capture --directory . -b . --output-file coverage.info
|
||||||
|
# filter to remove system headers
|
||||||
|
lcov --remove coverage.info '/usr/*' -o coverage.filtered.info
|
||||||
|
# convert to json
|
||||||
|
gem install coveralls-lcov
|
||||||
|
coveralls-lcov -v -n coverage.filtered.info > coverage.c.json
|
||||||
|
|
||||||
|
coverage report
|
||||||
|
pip install coveralls-merge
|
||||||
|
coveralls-merge coverage.c.json
|
||||||
|
|
||||||
|
if [ "$DOCKER" == "" ]; then
|
||||||
|
pip install pep8 pyflakes
|
||||||
|
pep8 --statistics --count PIL/*.py
|
||||||
|
pep8 --statistics --count Tests/*.py
|
||||||
|
pyflakes *.py | tee >(wc -l)
|
||||||
|
pyflakes PIL/*.py | tee >(wc -l)
|
||||||
|
pyflakes Tests/*.py | tee >(wc -l)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ] && [ "$DOCKER" == "" ]; then
|
||||||
|
# Coverage and quality reports on just the latest diff.
|
||||||
|
# (Installation is very slow on Py3, so just do it for Py2.)
|
||||||
|
depends/diffcover-install.sh
|
||||||
|
depends/diffcover-run.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# after_all
|
||||||
|
|
||||||
|
if [ "$TRAVIS_REPO_SLUG" = "python-pillow/Pillow" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ]; then
|
||||||
|
curl -Lo travis_after_all.py https://raw.github.com/dmakhno/travis_after_all/master/travis_after_all.py
|
||||||
|
python travis_after_all.py
|
||||||
|
export $(cat .to_export_back)
|
||||||
|
if [ "$BUILD_LEADER" = "YES" ]; then
|
||||||
|
if [ "$BUILD_AGGREGATE_STATUS" = "others_succeeded" ]; then
|
||||||
|
echo "All jobs succeded! Triggering macOS build..."
|
||||||
|
# Trigger a macOS build at the pillow-wheels repo
|
||||||
|
./build_children.sh
|
||||||
|
else
|
||||||
|
echo "Some jobs failed"
|
||||||
|
fi
|
||||||
|
fi
|
34
.travis/install.sh
Executable file
34
.travis/install.sh
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get -qq install libfreetype6-dev liblcms2-dev\
|
||||||
|
python-qt4 ghostscript libffi-dev libjpeg-turbo-progs cmake imagemagick
|
||||||
|
pip install cffi
|
||||||
|
pip install nose
|
||||||
|
pip install check-manifest
|
||||||
|
pip install olefile
|
||||||
|
# Pyroma tests sometimes hang on PyPy; skip
|
||||||
|
if [ "$TRAVIS_PYTHON_VERSION" != "pypy" ]; then pip install pyroma; fi
|
||||||
|
|
||||||
|
pip install coverage
|
||||||
|
|
||||||
|
# docs only on python 2.7
|
||||||
|
if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ]; then pip install -r requirements.txt ; fi
|
||||||
|
|
||||||
|
# clean checkout for manifest
|
||||||
|
mkdir /tmp/check-manifest && cp -a . /tmp/check-manifest
|
||||||
|
|
||||||
|
# webp
|
||||||
|
pushd depends && ./install_webp.sh && popd
|
||||||
|
|
||||||
|
# openjpeg
|
||||||
|
pushd depends && ./install_openjpeg.sh && popd
|
||||||
|
|
||||||
|
# libimagequant
|
||||||
|
pushd depends && ./install_imagequant.sh && popd
|
||||||
|
|
||||||
|
# extra test images
|
||||||
|
pushd depends && ./install_extra_test_images.sh && popd
|
||||||
|
|
14
.travis/script.sh
Executable file
14
.travis/script.sh
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
coverage erase
|
||||||
|
python setup.py clean
|
||||||
|
CFLAGS="-coverage" python setup.py build_ext --inplace
|
||||||
|
|
||||||
|
coverage run --append --include=PIL/* selftest.py
|
||||||
|
coverage run --append --include=PIL/* -m nose -vx Tests/test_*.py
|
||||||
|
pushd /tmp/check-manifest && check-manifest --ignore ".coveragerc,.editorconfig,*.yml,*.yaml,tox.ini" && popd
|
||||||
|
|
||||||
|
# Docs
|
||||||
|
if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ]; then make install && make doccheck; fi
|
|
@ -135,7 +135,12 @@ class TestNumpy(PillowTestCase):
|
||||||
img = Image.fromarray(arr * 255).convert('1')
|
img = Image.fromarray(arr * 255).convert('1')
|
||||||
self.assertEqual(img.mode, '1')
|
self.assertEqual(img.mode, '1')
|
||||||
arr_back = numpy.array(img)
|
arr_back = numpy.array(img)
|
||||||
numpy.testing.assert_array_equal(arr, arr_back)
|
# numpy 1.8 and earlier return this as a boolean. (trusty/precise)
|
||||||
|
if arr_back.dtype == numpy.bool:
|
||||||
|
arr_bool = numpy.array([[1, 0, 0, 1, 0], [0, 1, 0, 0, 0]], 'bool')
|
||||||
|
numpy.testing.assert_array_equal(arr_bool, arr_back)
|
||||||
|
else:
|
||||||
|
numpy.testing.assert_array_equal(arr, arr_back)
|
||||||
|
|
||||||
def test_save_tiff_uint16(self):
|
def test_save_tiff_uint16(self):
|
||||||
# Tests that we're getting the pixel value in the right byte order.
|
# Tests that we're getting the pixel value in the right byte order.
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
from helper import unittest, PillowTestCase
|
from helper import unittest, PillowTestCase
|
||||||
|
from distutils.version import StrictVersion
|
||||||
try:
|
try:
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from numpy.testing import assert_equal
|
from numpy.testing import assert_equal
|
||||||
|
|
||||||
from scipy import misc
|
from scipy import misc
|
||||||
|
import scipy
|
||||||
HAS_SCIPY = True
|
HAS_SCIPY = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_SCIPY = False
|
HAS_SCIPY = False
|
||||||
|
@ -27,6 +28,11 @@ class Test_scipy_resize(PillowTestCase):
|
||||||
im1 = misc.imresize(im, T(1.101))
|
im1 = misc.imresize(im, T(1.101))
|
||||||
self.assertEqual(im1.shape, (11, 22))
|
self.assertEqual(im1.shape, (11, 22))
|
||||||
|
|
||||||
|
# this test fails prior to scipy 0.14.0b1
|
||||||
|
# https://github.com/scipy/scipy/commit/855ff1fff805fb91840cf36b7082d18565fc8352
|
||||||
|
@unittest.skipIf(HAS_SCIPY and
|
||||||
|
(StrictVersion(scipy.__version__) < StrictVersion('0.14.0')),
|
||||||
|
"Test fails on scipy < 0.14.0")
|
||||||
def test_imresize4(self):
|
def test_imresize4(self):
|
||||||
im = np.array([[1, 2],
|
im = np.array([[1, 2],
|
||||||
[3, 4]])
|
[3, 4]])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user