Skip to content

Commit 2351d78

Browse files
committed
Use Travis CI to produce wheels for Linux and macOS
1 parent 5389b30 commit 2351d78

File tree

6 files changed

+169
-22
lines changed

6 files changed

+169
-22
lines changed

.ci/build-manylinux-wheels.sh

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/bin/bash
2+
3+
set -e -x
4+
5+
yum update -y
6+
yum install -y libtool autoconf automake
7+
8+
PYTHON_VERSIONS="cp35-cp35m"
9+
10+
# Compile wheels
11+
for PYTHON_VERSION in ${PYTHON_VERSIONS}; do
12+
PYTHON="/opt/python/${PYTHON_VERSION}/bin/python"
13+
PIP="/opt/python/${PYTHON_VERSION}/bin/pip"
14+
${PIP} install --upgrade pip wheel
15+
${PIP} install --upgrade setuptools
16+
${PIP} install -r /io/.ci/requirements.txt
17+
make -C /io/ PYTHON="${PYTHON}" distclean
18+
make -C /io/ PYTHON="${PYTHON}"
19+
${PIP} wheel /io/ -w /io/dist/
20+
done
21+
22+
#Bundle external shared libraries into the wheels.
23+
for whl in /io/dist/*.whl; do
24+
auditwheel repair $whl -w /io/dist/
25+
rm /io/dist/*-linux_*.whl
26+
done
27+
28+
for PYTHON_VERSION in ${PYTHON_VERSIONS}; do
29+
PYTHON="/opt/python/${PYTHON_VERSION}/bin/python"
30+
PIP="/opt/python/${PYTHON_VERSION}/bin/pip"
31+
${PIP} install ${PYMODULE} --no-index -f file:///io/dist
32+
rm -rf /io/tests/__pycache__
33+
make -C /io/ PYTHON="${PYTHON}" test
34+
rm -rf /io/tests/__pycache__
35+
done

.ci/requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cython>=0.24
2+
aiohttp
3+
twine

.ci/travis-build-and-upload.sh

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/bin/bash
2+
3+
set -e -x
4+
5+
6+
if [ -z "${TRAVIS_TAG}" ]; then
7+
# Not a release
8+
exit 0
9+
fi
10+
11+
12+
pushd $(dirname $0) > /dev/null
13+
_root=$(dirname $(pwd -P))
14+
popd > /dev/null
15+
16+
17+
_upload_wheels() {
18+
set +x
19+
echo python -m twine upload \
20+
--username "${PYPI_USER}" --password "<secret>" \
21+
"${_root}/dist"/*.whl
22+
python -m twine upload \
23+
--username "${PYPI_USER}" --password "${PYPI_PASSWD}" \
24+
"${_root}/dist"/*.whl
25+
26+
set -x
27+
sudo rm -rf "${_root}/dist"/*.whl
28+
}
29+
30+
31+
# Release build
32+
if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
33+
docker pull quay.io/pypa/manylinux1_x86_64
34+
docker run --rm \
35+
-v "${_root}":/io -e "PYMODULE=${PYMODULE}" \
36+
quay.io/pypa/manylinux1_x86_64 \
37+
/io/.ci/build-manylinux-wheels.sh
38+
39+
_upload_wheels
40+
41+
docker pull quay.io/pypa/manylinux1_i686
42+
docker run --rm \
43+
-v "${_root}":/io -e "PYMODULE=${PYMODULE}" \
44+
quay.io/pypa/manylinux1_i686 linux32 \
45+
/io/.ci/build-manylinux-wheels.sh
46+
47+
_upload_wheels
48+
49+
elif [ "${TRAVIS_OS_NAME}" == "osx" ]; then
50+
eval "$(pyenv init -)"
51+
pyenv local ${PYTHON_VERSION}
52+
53+
make -C "${_root}" distclean
54+
make -C "${_root}"
55+
pip wheel "${_root}" -w "${_root}/dist/"
56+
57+
pip install ${PYMODULE} --no-index -f "file:///${_root}/dist"
58+
pushd / >/dev/null
59+
make -C "${_root}" test
60+
popd >/dev/null
61+
62+
_upload_wheels
63+
64+
else
65+
echo "Cannot build on ${TRAVIS_OS_NAME}."
66+
fi

.ci/travis-install.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
set -e -x
4+
5+
if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
6+
brew update
7+
8+
brew install gnu-sed --with-default-names
9+
brew outdated libtool || brew upgrade libtool
10+
brew outdated autoconf || brew upgrade autoconf --with-default-names
11+
brew outdated automake || brew upgrade automake --with-default-names
12+
13+
brew install pyenv
14+
eval "$(pyenv init -)"
15+
pyenv versions
16+
17+
if ! (pyenv versions | grep "${PYTHON_VERSION}$"); then
18+
pyenv install ${PYTHON_VERSION}
19+
fi
20+
pyenv local ${PYTHON_VERSION}
21+
fi
22+
23+
pip install --upgrade pip wheel
24+
pip install --upgrade setuptools
25+
pip install -r .ci/requirements.txt

.travis.yml

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,49 @@
1-
language: python
1+
language: generic
22

3-
os:
4-
- linux
3+
sudo: required
54

6-
python:
7-
- 3.5
5+
env:
6+
global:
7+
- PYMODULE=uvloop
8+
- PYPI_USER=magicstack-ci
9+
- secure: "uVBP1RmdqLS8iQKDZLP8k5ByHAkwDorOztk1HynEr3gSnMLZH3bhibvtXfVoz+bpdDI+JY3RF1uNhR14XdQX6KMmBqSyU1c/fcOVURBVhKBeMbaUXR0nUAuh7Ac9xIuEhVvO6S/4vAsDzgnR4CJ/99Ns5tyo9GYMjlpdKAI87bqmnpHI2YZ7qaQ+yab4LUrAQzd6QVByJaaHoH0WgCUWqZ3CJfPBk8ROB1Jj+oPWpOB1zw70fh+MSxYtuS/527DbGkHWWg/h7fzDEIUvYX02rNnmdC48ewXlA+yZx03W4cAK0v+RT0XT4+hgGGPl2G+DDYyXLVvwQlqV4GnbTRFKLX8DI+Gu2Lc1Cyni125lq7TormDWMh0kA2miUIMg35Mp/YaYCQORSY3cXZsNZH1QvfaP25GIsRc+KrzXdmksXb6osZLXTpDFNKjSRVh1Os4JlaPTeSo48f90dk662bcdQQIfiNqEpqA3Lf96bHvw62J1QkKxWyzz7BodhOBwB6y+KH4h3GwuCI58DKjX6VIZvw9W6B0yvP9Yu7a2InNMAmsQsiB0SIICN5zT+O9BR/9bHZBWXC/hL5estVz5p6Q/+fmYzCaYbiSjuOJzFJ42ku8NxMQBaJvjG1lAH8wGHTiE1ApufWQBL9VJR1nY+nFdG6n9QgLKKHVe1QtseTVgStg="
10+
11+
matrix:
12+
include:
13+
- os: osx
14+
osx_image: xcode7.1 # OS X 10.10
15+
# Travis macOS env does not support Python yet,
16+
# so we have to set things up manually in install.sh.
17+
env: PYTHON_VERSION=3.5.2
18+
PIP_USER=1
19+
20+
- os: linux
21+
dist: trusty
22+
language: python
23+
python: "3.5"
24+
services: [docker]
25+
26+
cache:
27+
pip
828

929
install:
10-
- "pip install cython"
11-
- "pip install aiohttp"
30+
- .ci/travis-install.sh
1231

1332
script:
14-
- make && make test
15-
- make debug && make test
33+
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then eval "$(pyenv init -)"; fi
34+
- make distclean && make && make test
35+
- make distclean && make debug && make test
1636

1737
before_deploy:
18-
- rm -rf dist
19-
- make sdist
20-
- mv `find dist -name 'uvloop-*.tar.gz' | head -1` uvloop-release.tar.gz
38+
- .ci/travis-build-and-upload.sh
2139

2240
deploy:
23-
provider: releases
24-
skip_cleanup: true
25-
api_key:
26-
secure: Rf7uGIR9IH7wPXHKB7LcdjQN2i0P0l7zsOz1IDzT/aNla/tWkxDawIbWTFE1gqaRwAZNAQvLh3xjPAh4XWAtd3Q06NbOFrL3/2uhwzb7fOyRbtqTN3OWkxBDgaTyNee4zVG/guhuDAp2keMIOA6DAk3ZpbIx6QTWErjo8c5mubQqAFKPmFuRhvYTzqg0TZD+iAaen7neAOXa0LDa23T929J96rHE2JmFG21Wx6tPOV31c5/gQmd6fcmmNL524I6pSz7TeRFKveKX6RJzcQwxJtrCsQNMq1pLqm3bd7cd/2MaaPP1EyHt7FXejnXqB0FPSssCgG5TbRzCpatrzRugsWl86uqVxINK8pE/h5wA0T1EwsdJkTeYitZmpQL3mbndArNWkzS+5AuVNEByuzdSSfBMukCgq6vfQI8vUnfF74UIvuzYlGANvAyCTpI7g3g33pgL+BicG5qGOUGvFBG+j2gmiwqsmwC5OxT2JljhI2s6udOu56hNNa9M+MhEvrEya0mNOoReqrZrQruxM4M9WKEWd3y13VVN2aaPoyNh8BLXYnU+CZ+d+O/j0sXoUwx2NG1yU+xYirsoSR3NVURQu10ZvS+H8H3Uu8C6b+XJYfz3w7LXdyjXKSRIjtbsVNreda6dnRR7NfK9PCG9lgchmVkd9+Cc2DcDwfHOXjdy2qs=
27-
file:
28-
- uvloop-release.tar.gz
29-
on:
30-
repo: MagicStack/uvloop
31-
tags: true
41+
skip_cleanup: true
42+
provider: pypi
43+
user: magicstack-ci
44+
password:
45+
secure: F08sPDASx4iqS7q9vXbaeIR/lgAaCQVgXQoKB6kXT1I/hMjjev86XesNeGmrAnyhz/nj9VlU5axl0Pjf3nk3t6dwPgH4W7SCxkqLrwWSNUcalEmFMZW3FWNSZApevrK1Tj0naY96j+7xcoO5UwoWQI5N5lJAEGRFYYXkenfp2YHLPRT0imTL78Xydom9Ab+HFyUWGnrF95aizC+c+19KKvRQBySxbSztNinztJ1mHa66UY/kv1x8irJPhvS33SWG7SVEAqUTnD7vZa/OtT96MD6RZTNNFS++wFPSI3TEsIwLeIPS26I/vR6ta5Hga3xa9q+1XZw/fx44Q+aVvOd0sTrr9ZvbpPlKO4QJJQZ04+6Mi7zvCrq+6fq5TDQmU0K9l3vWWpQFSL4cWejyDEv8qjB+fok7fWLOWHqDlaoBIUKAYJu9KwWMWx7r81cpPUhZaZ5mULgcXhZiYMiI2dWzZNYKPvrzkXm1Mw8csotM+GXguLUGVbgSO0KzUk+L6yiVjWC5zYNJbLDALrU0Iw+FYYE6JssWm8meXHn0M9kS3FABi/EgHlITVwTHrfQrfhCPvcZU3NBtgUnPiEEQpsrLw4tWL5jgh8Y71WJAkFn5Lmhx2UCsBE5HVWuCPMPfeYr2PrhtyXz1WoapTk8EM/RA3IeA1PmZkaLuairMX4pw56o=
46+
distributions: sdist
47+
on:
48+
tags: true
49+
all_branches: true

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ check-env:
2020

2121

2222
clean-libuv:
23-
git -C vendor/libuv clean -dfX
23+
(cd vendor/libuv; git clean -dfX)
2424

2525

2626
sdist-libuv: clean-libuv

0 commit comments

Comments
 (0)