travis-ci: switch to trusty; cache pip packages

This applies several changes to the non-docker travis-ci builds:

- Make all builds use trusty rather than precise.  pybind can't really
  build in precise anyway (we install essentially the entire toolchain
  backported from trusty on every build), and so this saves needing to
  install all the backported packages during the build setup.
- Updated the 3.5 build to 3.6 (via deadsnakes, which didn't backport
  3.6 to ubuntu releases earlier than trusty).
- As a result of the switch to trusty, the BAREBONES build now picks up
  the (default installed) python 3.5 installation.
- Invoke pip everywhere via $PYTHON -m pip rather than the pip
  executable, which saves us having to figure out what the pip
  executable is, and ensures that we are using the correct pip.
- Install packages with `pip --user` rather than in a virtualenv.
- Add the local user python package archive to the travis-ci cache
  (rather than the pip cache).  This saves needing to install packages
  during installation (unless there are updates, in which case the
  package and the cache are updated).
- Install numpy and scipy on the pypy build.  This has to build from
  source (and so blas and fortran need to be installed on the build),
  but given the above caching, the build will only be slow for the first
  build after a new numpy/scipy release.  This testing is valuable:
  numpy has various behaviour differences under pypy.
- Added set -e/+e around the before_install/install blocks so that a
  failure here (e.g. a pip install failure or dependency download
  failure) triggers a build failure.
- Update eigen version to latest (3.3.3), mainly to be consistent with
  the appveyor build.
- The travis trusty environment has an upgraded cmake, so this
  downgrades cmake (to the stock trusty version) on the first couple
  jobs so that we're still including some cmake 2.8.12 testing.
This commit is contained in:
Jason Rhinelander 2017-04-13 14:18:13 -04:00
parent b4cbd7a1fe
commit 3d5005168b

View File

@ -1,4 +1,5 @@
language: cpp
dist: trusty
sudo: false
matrix:
include:
@ -6,14 +7,13 @@ matrix:
env: PYTHON=2.7 CPP=11 GCC=4.8
addons:
apt:
sources: [ubuntu-toolchain-r-test, kubuntu-backports]
packages: [g++-4.8, cmake]
packages: [cmake=2.\*, cmake-data=2.\*]
- os: linux
env: PYTHON=3.5 CPP=11 GCC=4.8
env: PYTHON=3.6 CPP=11 GCC=4.8
addons:
apt:
sources: [ubuntu-toolchain-r-test, kubuntu-backports, deadsnakes]
packages: [g++-4.8, cmake, python3.5-dev]
sources: [deadsnakes]
packages: [python3.6-dev python3.6-venv, cmake=2.\*, cmake-data=2.\*]
- sudo: true
services: docker
env: PYTHON=2.7 CPP=14 GCC=6
@ -34,11 +34,10 @@ matrix:
env: PYTHON=3.6 CPP=14 CLANG
# Test a PyPy 2.7 build
- os: linux
dist: trusty
env: PYPY=5.7 PYTHON=2.7 CPP=11 GCC=4.8
addons:
apt:
packages: [g++-4.8, cmake]
packages: [libblas-dev, liblapack-dev, gfortran]
- sudo: true
services: docker
env: ARCH=i386 PYTHON=3.5 CPP=14 GCC=6
@ -58,22 +57,19 @@ matrix:
# A barebones build makes sure everything still works without optional deps (numpy/scipy/eigen)
# and also tests the automatic discovery functions in CMake (Python version, C++ standard).
- os: linux
env: BAREBONES
addons:
apt:
sources: [ubuntu-toolchain-r-test, kubuntu-backports]
packages: [g++-4.8, cmake]
install: pip install pytest
env: BAREBONES PYTHON=3.5
install: $PY_CMD -m pip install --user --upgrade pytest
# Documentation build:
- os: linux
language: docs
env: DOCS STYLE LINT
install:
- pip install --upgrade sphinx sphinx_rtd_theme flake8 pep8-naming
- export PATH="~/.local/bin:$PATH"
- $PY_CMD -m pip install --user --upgrade sphinx sphinx_rtd_theme flake8 pep8-naming
- |
curl -fsSL ftp://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.12.linux.bin.tar.gz | tar xz
export PATH="$PWD/doxygen-1.8.12/bin:$PATH"
pip install https://github.com/michaeljones/breathe/archive/master.zip
$PY_CMD -m pip install --user --upgrade https://github.com/michaeljones/breathe/archive/master.zip
script:
- make -C docs html SPHINX_OPTIONS=-W
- tools/check-style.sh
@ -83,8 +79,9 @@ matrix:
- env: PYTHON=3.5 CPP=17 CLANG=4.0
cache:
directories:
- $HOME/.cache/pip
- $HOME/Library/Caches/pip
- $HOME/.local/bin
- $HOME/.local/lib
- $HOME/Library/Python
before_install:
- |
# Configure build variables
@ -107,18 +104,11 @@ before_install:
fi
if [ -n "$CPP" ]; then export CPP=-std=c++$CPP; fi
if [ "${PYTHON:0:1}" = "3" ]; then export PY=3; fi
if [ "$PYPY" = "5.7" ]; then
curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.7.0-linux64.tar.bz2 | tar -xj
export PYPY_BINARY=$(echo `pwd`/pypy2-v5.7.0-linux64/bin/pypy)
export CMAKE_EXTRA_ARGS="-DPYTHON_EXECUTABLE:FILEPATH=$PYPY_BINARY"
fi
if [ -n "$DEBUG" ]; then export CMAKE_EXTRA_ARGS="-DCMAKE_BUILD_TYPE=Debug"; fi
- |
# Initialize environment
if [ -n "$PYPY" ]; then
$PYPY_BINARY -m ensurepip
$PYPY_BINARY -m pip install pytest
elif [ -n "$DOCKER" ]; then
set -e
if [ -n "$DOCKER" ]; then
docker pull $DOCKER
export containerid=$(docker run --detach --tty \
@ -130,24 +120,30 @@ before_install:
export SCRIPT_RUN_PREFIX="docker exec --tty $containerid"
$SCRIPT_RUN_PREFIX sh -c 'for s in 0 15; do sleep $s; apt-get update && apt-get -qy dist-upgrade && break; done'
else
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
pip install --user --upgrade pip virtualenv
virtualenv -p python$PYTHON venv
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
if [ "$PY" = "3" ]; then
brew update; brew install python$PY;
else
curl -fsSL -O https://bootstrap.pypa.io/get-pip.py
sudo -H python get-pip.py
if [ "$PYPY" = "5.7" ]; then
curl -fSL https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.7.1-linux64.tar.bz2 | tar -xj
export PY_CMD=$(echo `pwd`/pypy2-v5.7.1-linux64/bin/pypy)
export CMAKE_EXTRA_ARGS="-DPYTHON_EXECUTABLE:FILEPATH=$PY_CMD"
else
export PY_CMD=python$PYTHON
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
if [ "$PY" = "3" ]; then
brew update; brew install python$PY;
else
curl -fsSL https://bootstrap.pypa.io/get-pip.py | $PY_CMD - --user
fi
fi
pip$PY install --user --upgrade pip virtualenv
python$PY -m virtualenv venv
fi
source venv/bin/activate
if [ "$PY" = 3 ] || [ -n "$PYPY" ]; then
$PY_CMD -m ensurepip --user
fi
$PY_CMD -m pip install --user --upgrade pip wheel
fi
set +e
install:
- |
# Install dependencies
set -e
if [ -n "$DOCKER" ]; then
if [ -n "$DEBUG" ]; then
PY_DEBUG="python$PY-dbg python$PY-scipy-dbg"
@ -171,13 +167,17 @@ install:
if [ "$CPP" = "-std=c++17" ]; then export CPP="-std=c++1z"; fi
fi
elif [ -z "$PYPY" ]; then
pip install numpy scipy pytest
else
export NPY_NUM_BUILD_JOBS=2
echo "Installing pytest, numpy, scipy..."
${PYPY:+travis_wait 30} $PY_CMD -m pip install --user --upgrade --quiet pytest numpy scipy
echo "done."
wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.0.tar.gz
wget -q -O eigen.tar.gz https://bitbucket.org/eigen/eigen/get/3.3.3.tar.gz
tar xzf eigen.tar.gz
export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_INCLUDE_PATH=$PWD/eigen-eigen-26667be4f70b"
export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DCMAKE_INCLUDE_PATH=$PWD/eigen-eigen-67e894c6cd8f"
fi
set +e
script:
- $SCRIPT_RUN_PREFIX cmake ${CMAKE_EXTRA_ARGS}
-DPYBIND11_PYTHON_VERSION=$PYTHON