| # we only CI the master, release branches, tags and PRs |
| if: tag IS present OR type = pull_request OR ((branch = master OR branch =~ release-*) AND type = push) |
| |
| language: python |
| # cache package wheels (1 cache per python version) |
| cache: pip |
| # also cache the directories where we set up our custom pythons in some builds |
| cache: |
| directories: |
| - $HOME/python-debug |
| # I ran into some issues with this but will investigate again later. |
| # - $HOME/.pyenv/versions |
| - $HOME/Library/Caches/pip |
| |
| # newer python versions are available only on xenial (while some older only on trusty) Ubuntu distribution |
| dist: xenial |
| |
| env: |
| TOXENV=py |
| EXTRA_ARGS="-n 12" |
| TEST_MYPYC=0 |
| PYTHON_DEBUG_BUILD=0 |
| |
| jobs: |
| include: |
| # Specifically request 3.5.1 because we need to be compatible with that. |
| - name: "run test suite with python 3.5.1" |
| python: 3.5.1 |
| dist: trusty |
| - name: "run test suite with python 3.6" |
| python: 3.6 # 3.6.3 pip 9.0.1 |
| - name: "run test suite with python 3.7" |
| python: 3.7 # 3.7.0 pip 10.0.1 |
| - name: "run test suite with python 3.8-dev" |
| python: 3.8-dev |
| - name: "run mypyc runtime tests with python 3.6 debug build" |
| language: generic |
| env: |
| - TOXENV=py36 |
| - PYTHONVERSION=3.6.8 |
| - PYTHON_DEBUG_BUILD=1 |
| - EXTRA_ARGS="-n 12 mypyc/test/test_run.py mypyc/test/test_external.py" |
| - name: "run mypyc runtime tests with python 3.6 on OS X" |
| os: osx |
| osx_image: xcode8.3 |
| language: generic |
| env: |
| - PYTHONVERSION=3.6.3 |
| - EXTRA_ARGS="-n 12 mypyc/test/test_run.py mypyc/test/test_external.py" |
| - name: "run test suite with python 3.7 (compiled with mypyc)" |
| python: 3.7 |
| env: |
| - TOXENV=py |
| - EXTRA_ARGS="-n 12" |
| - TEST_MYPYC=1 |
| - name: "type check our own code" |
| python: 3.7 |
| env: |
| - TOXENV=type |
| - EXTRA_ARGS= |
| - name: "check code style with flake8" |
| python: 3.7 |
| env: |
| - TOXENV=lint |
| - EXTRA_ARGS= |
| - name: "trigger a build of wheels" |
| python: 3.7 |
| script: if [[ ($TRAVIS_BRANCH = "master" || $TRAVIS_BRANCH =~ release-*) && $TRAVIS_PULL_REQUEST = "false" ]]; then ./misc/trigger_wheel_build.sh; fi |
| - name: "check documentation build" |
| python: 3.7 |
| env: |
| - TOXENV=docs |
| # Disabled because of some pip bug? See #6716 |
| # - name: "check dev environment builds" |
| # python: 3.7 |
| # env: |
| # - TOXENV=dev |
| # - EXTRA_ARGS= |
| |
| install: |
| - pip install -U pip setuptools |
| - pip install -U tox==3.9.0 |
| - tox --notest |
| |
| # This is a big hack and only works because the layout of our directories |
| # means that tox picks up the mypy from the source directories instead of |
| # the version it installed into a venv. This is also *why* we need to do this, |
| # since if we arranged for tox to build with mypyc, pytest wouldn't use it. |
| - if [[ $TEST_MYPYC == 1 ]]; then pip install -r mypy-requirements.txt; CC=clang MYPYC_OPT_LEVEL=0 python3 setup.py --use-mypyc build_ext --inplace; fi |
| |
| script: |
| - tox -- $EXTRA_ARGS |
| |
| # Getting our hands on a debug build or the right OS X build is |
| # annoying, unfortunately. |
| before_install: | |
| set -e |
| if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then |
| if [[ $PYTHON_DEBUG_BUILD == 1 ]]; then |
| PYTHONDIR=~/python-debug/python-$PYTHONVERSION |
| VENV=$PYTHONDIR/env |
| misc/build-debug-python.sh $PYTHONVERSION $PYTHONDIR $VENV |
| source $VENV/bin/activate |
| fi |
| elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then |
| # Attempt to install, skipping if version already exists. |
| pyenv install $PYTHONVERSION -s |
| # Regenerate shims |
| pyenv rehash |
| # Manually set pyenv variables per https://pythonhosted.org/CodeChat/.travis.yml.html |
| export PYENV_VERSION=$PYTHONVERSION |
| export PATH="/Users/travis/.pyenv/shims:${PATH}" |
| fi |