summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Gedminas <marius@gedmin.as>2019-11-10 11:21:55 +0200
committerMarius Gedminas <marius@gedmin.as>2019-11-11 19:18:24 +0200
commit83eb07270b98d5441fe772d9fcd6d05380968d8e (patch)
treed4459abcb1602391e86fbce3a7b4163fde810909
parent4ccde6889d8a795eaf5107f2837bba7b7b6f1bb1 (diff)
downloadzope-security-83eb07270b98d5441fe772d9fcd6d05380968d8e.tar.gz
Build manylinux and MacOS wheels
-rwxr-xr-x.manylinux-install.sh22
-rwxr-xr-x.manylinux.sh5
-rw-r--r--.travis.yml124
3 files changed, 130 insertions, 21 deletions
diff --git a/.manylinux-install.sh b/.manylinux-install.sh
new file mode 100755
index 0000000..f82f0c4
--- /dev/null
+++ b/.manylinux-install.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+
+set -e -x
+
+# Compile wheels
+for PYBIN in /opt/python/*/bin; do
+ if [[ "${PYBIN}" == *"cp27"* ]] || \
+ [[ "${PYBIN}" == *"cp35"* ]] || \
+ [[ "${PYBIN}" == *"cp36"* ]] || \
+ [[ "${PYBIN}" == *"cp37"* ]] || \
+ [[ "${PYBIN}" == *"cp38"* ]]; then
+ "${PYBIN}/pip" install -U pip setuptools cffi
+ "${PYBIN}/pip" install -e /io/
+ "${PYBIN}/pip" wheel /io/ -w wheelhouse/
+ rm -rf /io/build /io/*.egg-info
+ fi
+done
+
+# Bundle external shared libraries into the wheels
+for whl in wheelhouse/zope.security*.whl; do
+ auditwheel repair "$whl" -w /io/wheelhouse/
+done
diff --git a/.manylinux.sh b/.manylinux.sh
new file mode 100755
index 0000000..2fed778
--- /dev/null
+++ b/.manylinux.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -e -x
+
+docker run --rm -v "$(pwd)":/io $DOCKER_IMAGE $PRE_CMD /io/.manylinux-install.sh
diff --git a/.travis.yml b/.travis.yml
index c9f6e54..8d5abf3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,31 +1,113 @@
language: python
-dist: xenial
+
+env:
+ global:
+ TWINE_USERNAME: zope.wheelbuilder
+ TWINE_PASSWORD:
+ secure: "U6CeZtNEPDN3qKXfrLcvHFLrowqNWxmapXLWygZRxKgfR+ypowe1Y0a4kCBEBZKtysbY26MmIkrMV07tEMxny1yUWVCvRvUaQw0Ic3t5CM0R019zjVh9fQUTdWGCwri86Qj/OaeuPeMR0LCr6d9nMSun0GWSWhjOUhkTCdchfQw="
+
+python:
+ - 2.7
+ - 3.5
+ - 3.6
+ - 3.7
+ - 3.8
+ - pypy
+ - pypy3
+
matrix:
include:
- - python: 2.7
- - python: 3.5
- - python: 3.6
- - python: 3.7
- - python: 3.8
- - python: pypy2.7-6.0
- - python: pypy3.5-6.0
- - python: 2.7
- env:
- - PURE_PYTHON=1
- - ZOPE_WATCH_CHECKERS=1
- - python: 3.7
+
+ - name: "Python: 2.7, pure (no C extensions), with ZOPE_WATCH_CHECKERS enabled"
+ python: "2.7"
+ env: PURE_PYTHON=1 ZOPE_WATCH_CHECKERS=1
+
+ - name: "Python: 3.7, with ZOPE_WATCH_CHECKERS enabled"
+ python: 3.7
env: ZOPE_WATCH_CHECKERS=1
- - python: 3.7
+
+ - name: "Python: 3.7, pure (no C extensions)"
+ python: 3.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.0'
+ - name: Python 3.7 wheels for MacOS
+ os: osx
+ language: generic
+ env: TERRYFY_PYTHON='macpython 3.7.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 setuptools
- - pip install -U coveralls coverage
- - pip install -U -e .[test,docs]
+ - pip install -U pip setuptools
+ - pip install -U coveralls coverage
+ - pip install -U -e .[test,docs]
+
script:
- - coverage run -m zope.testrunner --test-path=src
- - coverage run -a -m sphinx -b doctest -d docs/_build/doctrees docs docs/_build/doctest
+ - python --version
+ - coverage run -m zope.testrunner --test-path=src
+ - coverage run -a -m sphinx -b doctest -d docs/_build/doctrees docs docs/_build/doctest
+ - python setup.py bdist_wheel
+
after_success:
- - coveralls
+ - 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
+ email: false
+
cache: pip
+before_cache:
+ - rm -f $HOME/.cache/pip/log/debug.log