diff --git a/.travis.yml b/.travis.yml index 3eb89dc4f..d285b0a4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,10 @@ language: python sudo: false +cache: + directories: + - $HOME/.wheelhouse + env: - TOX_ENV=py27-flake8 - TOX_ENV=py27-docs @@ -28,6 +32,7 @@ env: install: - pip install tox + - export WHEEL_DIR=$HOME/.wheelhouse/$TOX_ENV script: - tox -e $TOX_ENV diff --git a/custom_pip_install.sh b/custom_pip_install.sh new file mode 100755 index 000000000..8b0655bf8 --- /dev/null +++ b/custom_pip_install.sh @@ -0,0 +1,21 @@ +#!/bin/bash +if [[ "$@" == "djangorestframework" ]]; then + # Caching djangorestframework package would invalidate Travis cache on every build + pip install "$@" +else + # Try to install from cache + pip install --no-index --find-links=$WHEEL_DIR "$@" + EXIT_STATUS=$? + # If that fails, try to make a wheel + if [ $EXIT_STATUS -ne 0 ]; then + pip wheel --wheel-dir=$WHEEL_DIR "$@" + EXIT_STATUS=$? + # If that fails, install wheel and make wheel + if [ $EXIT_STATUS -ne 0 ]; then + pip install wheel==0.24.0 + pip wheel --wheel-dir=$WHEEL_DIR "$@" + fi + # Install from cache + pip install --no-index --find-links=$WHEEL_DIR "$@" + fi +fi diff --git a/tox.ini b/tox.ini index c986250c5..df6a63dcb 100644 --- a/tox.ini +++ b/tox.ini @@ -6,6 +6,9 @@ envlist = {py27,py32,py33,py34}-django{17,18beta} [testenv] +install_command = + {toxinidir}/custom_pip_install.sh {packages} + commands = ./runtests.py --fast setenv = PYTHONDONTWRITEBYTECODE=1