Skip to content

Commit

Permalink
Merge pull request #569 from jmadler/master
Browse files Browse the repository at this point in the history
Build Image w/ wheel support
  • Loading branch information
edschofield committed Nov 30, 2021
2 parents 5e5af71 + 2abe00d commit 80523f3
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 62 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -21,6 +21,8 @@ develop-eggs
.installed.cfg
lib
lib64
MANIFEST
MANIFEST.in

# Backup files
*.bak
Expand Down
47 changes: 6 additions & 41 deletions .travis.yml
@@ -1,46 +1,11 @@
sudo: false
language: python
cache: pip
language: generic


matrix:
include:
- python: 2.6
env: TOXENV=py26
dist: trusty
- python: 2.7
env: TOXENV=py27
- python: 3.3
env: TOXENV=py33
dist: trusty
sudo: false
- python: 3.4
env: TOXENV=py34
- python: 3.5
env: TOXENV=py35
- python: 3.6
env: TOXENV=py36
- python: 3.7
env: TOXENV=py37
dist: xenial # required for Python 3.7 (travis-ci/travis-ci#9069)
sudo: required # required for Python 3.7 (travis-ci/travis-ci#9069)

install:
- pip install typing==3.7.4.1 # required for Python 3.3
- pip install tox==2.9.1
- pip install virtualenv==15.2.0
- pip install py==1.4.30
- pip install pluggy==0.5.2
services:
- docker

before_script:
# Run flake8 tests only on Python 2.7 and 3.7...
# 1) stop the build if there are Python syntax errors or undefined names
# 2) exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- if [[ $TRAVIS_PYTHON_VERSION == *.7 ]]; then
pip install flake8;
flake8 . --count --exit-zero --select=E901,E999,F821,F822,F823 --show-source --statistics;
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics;
fi
- docker pull jmadler/python-future-builder:latest

script:
- tox
- ./build.sh
- ./lint.sh
40 changes: 40 additions & 0 deletions Dockerfile
@@ -0,0 +1,40 @@
FROM debian:9
# This docker image has a copy of a wide array of Pythons installed
RUN apt-get update
RUN apt-get install --yes --no-install-recommends make build-essential zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libffi-dev liblzma-dev libssl1.0-dev
RUN apt-get install --yes git vim
RUN apt-get install --yes python3-pip
ENV PYENV_ROOT=/opt/pyenv
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
RUN echo export PATH="/opt/pyenv/bin:$PATH" >> ~/.bashrc
RUN echo 'eval "$(pyenv init -)"' >> ~/.bashrc
RUN echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
# venv 15.2.0 is the last to support Python 2.6.
RUN pip3 install virtualenv==15.2.0
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 2.6.9
RUN virtualenv /root/py26 --python /opt/pyenv/versions/2.6.9/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.3.7
RUN virtualenv /root/py33 --python /opt/pyenv/versions/3.3.7/bin/python
RUN pip3 install virtualenv==20.0.21
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.4.10
RUN virtualenv /root/py34 --python /opt/pyenv/versions/3.4.10/bin/python
RUN apt-get install --yes libssl-dev libxmlsec1-dev
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 2.7.18
RUN virtualenv /root/py27 --python /opt/pyenv/versions/2.7.18/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.5.9
RUN virtualenv /root/py35 --python /opt/pyenv/versions/3.5.9/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.6.10
RUN virtualenv /root/py36 --python /opt/pyenv/versions/3.6.10/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.7.7
RUN virtualenv /root/py37 --python /opt/pyenv/versions/3.7.7/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.8.3
RUN virtualenv /root/py38 --python /opt/pyenv/versions/3.8.3/bin/python
RUN PATH=/opt/pyenv/bin:$PATH pyenv install 3.9.0
RUN virtualenv /root/py39 --python /opt/pyenv/versions/3.9.0/bin/python
# Lint tools
RUN pip3 install flake8
RUN ln -s /usr/bin/python3 /usr/bin/python
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
WORKDIR /root/python-future
ADD . /root/python-future
8 changes: 3 additions & 5 deletions TESTING.txt
@@ -1,13 +1,11 @@
Currently the tests are passing on OS X and Linux on Python 2.7 and 3.4.
A docker image, python-future-builder, is used to do testing and building. The test suite can be run with:

The test suite can be run with:

$ tox
$ bash build.sh

which tests the module under a number of different python versions, where available, or with:

$ py.test

To execute a single test:

$ pytest -k test_chained_exceptions_stacktrace
$ pytest -k test_chained_exceptions_stacktrace
17 changes: 17 additions & 0 deletions build.sh
@@ -0,0 +1,17 @@
# XXX: TODO: we should make this include -e once tests pass
set -xuo pipefail

DOCKER_IMAGE=jmadler/python-future-builder
# XXX: TODO: Perhaps this version shouldn't be hardcoded
version=0.18.2

docker build . -t $DOCKER_IMAGE
docker push $DOCKER_IMAGE:latest

for i in py26 py27 py33 py34 py35 py36 py37 py38 py39; do
docker run -ti -v $(realpath dist):/root/python-future/dist $DOCKER_IMAGE /root/python-future/setup.sh $version $(basename $i)
done

python setup.py sdist
python setup.py clean
echo You may now run: "twine upload dist/*"
3 changes: 3 additions & 0 deletions lint.sh
@@ -0,0 +1,3 @@
# TODO: Run under Python 2.7 and 3.7
flake8 . --count --exit-zero --select=E901,E999,F821,F822,F823 --show-source --statistics || true
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics || true
20 changes: 20 additions & 0 deletions setup.sh
@@ -0,0 +1,20 @@
#!/bin/bash

set -exo pipefail

version=$1
pytag=$2

if [ $pytag = 'py33' ]; then
pip3 install virtualenv==16.2.0
fi

source /root/$pytag/bin/activate

if [ $pytag = 'py26' ]; then
pip install importlib
fi
pip install pytest unittest2
python setup.py bdist_wheel --python-tag=$pytag
pip install dist/future-$version-$pytag-none-any.whl
pytest tests/
16 changes: 0 additions & 16 deletions tox.ini

This file was deleted.

1 comment on commit 80523f3

@johnthagen
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@edschofield Thanks for working on this. Do you think we could get a new release pushed to PyPI with wheels?

Please sign in to comment.