Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build Image w/ wheel support #569

Merged
merged 7 commits into from Nov 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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.