summaryrefslogtreecommitdiff
path: root/.travis.yml
blob: db51783bedd85b95a5aa3e030db6f36858190cff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
language: python

env:
  global:
    TWINE_USERNAME: zope.wheelbuilder
    TWINE_PASSWORD:
      secure: "BWyhZtoO9jM3vatjfwdloThv7RY2p8AaN3D8T/8nEIupcgT5E6QKfLlIDibtlMNds2UU0q/HOJiSM/CwBsm5nzMke55m8OhfxfyHG+5TuBafwHtEkMyXe1VQtxnyB7Rlya2ylI9f4/3qXYqyLinBr3F+osE1g2nQmqQL2tpNmRA="

python:
  - 2.7
  - 3.5
  - 3.6
  - 3.7
  - 3.8
  - pypy
  - pypy3

jobs:
  include:
    - name: "Python: 2.7, pure (no C extensions)"
      python: "2.7"
      env: PURE_PYTHON=1

    # manylinux wheel builds
    - name: 64-bit manylinux wheels (all Pythons)
      services: docker
      env: DOCKER_IMAGE=quay.io/pypa/manylinux2010_x86_64
      install: docker pull $DOCKER_IMAGE
      script: bash .manylinux.sh

    - name: 32-bit manylinux wheels (all Pythons)
      services: docker
      env: DOCKER_IMAGE=quay.io/pypa/manylinux2010_i686 PRE_CMD=linux32
      install: docker pull $DOCKER_IMAGE
      script: bash .manylinux.sh

    # It's important to use 'macpython' builds to get the least
    # restrictive wheel tag. It's also important to avoid
    # 'homebrew 3' because it floats instead of being a specific version.
    - name: Python 2.7 wheels for MacOS
      os: osx
      language: generic
      env: TERRYFY_PYTHON='macpython 2.7.17'
    - name: Python 3.5 wheels for MacOS
      os: osx
      language: generic
      env: TERRYFY_PYTHON='macpython 3.5'
    - name: Python 3.6 wheels for MacOS
      os: osx
      language: generic
      env: TERRYFY_PYTHON='macpython 3.6.2'
    - name: Python 3.7 wheels for MacOS
      os: osx
      language: generic
      env: TERRYFY_PYTHON='macpython 3.7.0'
    - name: Python 3.8 wheels for MacOS
      os: osx
      language: generic
      env: TERRYFY_PYTHON='macpython 3.8.0'

before_install:
  - |
    if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
      git clone https://github.com/MacPython/terryfy
      source terryfy/travis_tools.sh
      get_python_environment $TERRYFY_PYTHON venv
    fi

install:
  - pip install -U pip
  - pip install -U setuptools
  - pip install -U coverage coveralls
  # NB: let's install . (zope.proxy) first separately, because we have a nasty
  # dependency loop: .[test] wants zope.security that setup_requires zope.proxy
  # (and setup_requires is broken on Mac OS Python 3.5 due to TLS version
  # compatibility issues that pip knows how to work around, but setuptools
  # don't).
  - pip install -e .
  - pip install -e .[test,docs]

script:
  - python --version
  - coverage run -m zope.testrunner --test-path=src
  - sphinx-build              -b html    -d docs/_build/doctrees docs docs/_build/html
  - coverage run -a -m sphinx -b doctest -d docs/_build/doctrees docs docs/_build/doctest
  - python setup.py bdist_wheel

after_success:
  - coveralls
  - |
    if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
      # macpython 3.5 doesn't support recent TLS protocols which causes twine
      # upload to fail, so we use the system Python to run twine
      /usr/bin/python -m ensurepip --user
      /usr/bin/python -m pip install --user -U pip
      /usr/bin/python -m pip install --user -U -I twine
      /usr/bin/python -m twine check dist/*
      if [[ $TRAVIS_TAG ]]; then
        /usr/bin/python -m twine upload --skip-existing dist/*
      fi
    fi
  - |
    if [[ -n "$DOCKER_IMAGE" ]]; then
      pip install twine
      twine check wheelhouse/*
      if [[ $TRAVIS_TAG ]]; then
        twine upload --skip-existing wheelhouse/*
      fi
    fi

notifications:
  email: false

cache: pip
before_cache:
  - rm -f $HOME/.cache/pip/log/debug.log