Merge pull request #25 from joerick/python3-ci

Add CI runs for Python3 as well as Python2
This commit is contained in:
Joe Rickerby
2017-09-10 22:42:48 +01:00
committed by GitHub
9 changed files with 72 additions and 12 deletions
+3
View File
@@ -85,7 +85,10 @@ celerybeat-schedule
# virtualenv # virtualenv
.venv .venv
venv/ venv/
venv3/
ENV/ ENV/
env/
env3/
# Spyder project settings # Spyder project settings
.spyderproject .spyderproject
+33 -4
View File
@@ -1,17 +1,46 @@
language: generic
matrix: matrix:
include: include:
# Linux Python 2
- sudo: required - sudo: required
language: python
services: services:
- docker - docker
env:
- "PYTHON=python2"
# Linux Python 3
- sudo: required
language: python
services:
- docker
env:
- "PYTHON=python3"
before_install:
- sudo apt-get -qq update
- sudo apt-get install -y python3-pip
# macOS Python 2
- os: osx - os: osx
env:
- "PYTHON=python2"
# macOS Python 3
- os: osx
env:
- "PYTHON=python3"
before_install:
- brew update
- brew install python3
script: script:
- | - |
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
pip install -r requirements-dev.txt $PYTHON -m pip install -r requirements-dev.txt
python ./bin/run_tests.py $PYTHON ./bin/run_tests.py
else else
# linux test requires root to clean up the wheelhouse (docker runs as root) # linux test requires root to clean up the wheelhouse (docker runs as root)
sudo pip install -r requirements-dev.txt sudo $PYTHON -m pip install -r requirements-dev.txt
sudo python ./bin/run_tests.py sudo $PYTHON ./bin/run_tests.py
fi fi
+7 -2
View File
@@ -1,5 +1,10 @@
environment:
matrix:
- PYTHON: "C:\\Python27\\python.exe"
- PYTHON: "C:\\Python35\\python.exe"
build_script: build_script:
- pip install -r requirements-dev.txt - "%PYTHON% -m pip install -r requirements-dev.txt"
# the '-u' flag is required so the output is in the correct order. # the '-u' flag is required so the output is in the correct order.
# See https://github.com/joerick/cibuildwheel/pull/24 for more info. # See https://github.com/joerick/cibuildwheel/pull/24 for more info.
- python -u ./bin/run_tests.py - "%PYTHON% -u ./bin/run_tests.py"
+1 -1
View File
@@ -17,7 +17,7 @@ def single_run(test_project):
project_env = {str(k): str(v) for k, v in project_env.items()} # unicode not allowed in env project_env = {str(k): str(v) for k, v in project_env.items()} # unicode not allowed in env
env.update(project_env) env.update(project_env)
print('Building %s with environment %s' % (test_project, project_env)) print('Building %s with environment %s' % (test_project, project_env))
subprocess.check_call(['cibuildwheel', test_project], env=env) subprocess.check_call([sys.executable, '-m', 'cibuildwheel', test_project], env=env)
wheels = glob('wheelhouse/*.whl') wheels = glob('wheelhouse/*.whl')
print('%s built successfully. %i wheels built.' % (test_project, len(wheels))) print('%s built successfully. %i wheels built.' % (test_project, len(wheels)))
+1 -1
View File
@@ -10,7 +10,7 @@ if __name__ == '__main__':
### run the unit tests ### run the unit tests
subprocess.check_call(['python', '-m', 'pytest', 'unit_test']) subprocess.check_call([sys.executable, '-m', 'pytest', 'unit_test'])
### run the integration tests ### run the integration tests
+2
View File
@@ -59,6 +59,8 @@ def main():
platform = 'macos' platform = 'macos'
elif 'APPVEYOR' in os.environ: elif 'APPVEYOR' in os.environ:
platform = 'windows' platform = 'windows'
elif 'BITRISE_BUILD_NUMBER' in os.environ:
platform = 'macos'
else: else:
print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, ' print('cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server, '
'Travis CI and Appveyor are supported. You can run on your development ' 'Travis CI and Appveyor are supported. You can run on your development '
+6 -2
View File
@@ -1,4 +1,4 @@
import subprocess, shlex import subprocess, shlex, sys
from collections import namedtuple from collections import namedtuple
import bashlex import bashlex
@@ -60,8 +60,12 @@ def evaluate_word_node(node, context):
def evaluate_command_node(node, context): def evaluate_command_node(node, context):
words = [evaluate_node(part, context=context) for part in node.parts] words = [evaluate_node(part, context=context) for part in node.parts]
command = ' '.join(words) command = ' '.join(words)
return subprocess.check_output(shlex.split(command), env=context.environment) output = subprocess.check_output(shlex.split(command), env=context.environment)
if sys.version_info[0] >= 3:
return output.decode('utf8', 'replace')
else:
return output
def evaluate_parameter_node(node, context): def evaluate_parameter_node(node, context):
return context.environment.get(node.value, '') return context.environment.get(node.value, '')
+17
View File
@@ -22,3 +22,20 @@ class BuildSkipper(object):
def __repr__(self): def __repr__(self):
return 'BuildSkipper(%r)' % ' '.join(self.patterns) return 'BuildSkipper(%r)' % ' '.join(self.patterns)
# Taken from https://stackoverflow.com/a/107717
class Unbuffered(object):
def __init__(self, stream):
self.stream = stream
def write(self, data):
self.stream.write(data)
self.stream.flush()
def writelines(self, datas):
self.stream.writelines(datas)
self.stream.flush()
def __getattr__(self, attr):
return getattr(self.stream, attr)
+2 -2
View File
@@ -7,13 +7,13 @@ except ImportError:
from collections import namedtuple from collections import namedtuple
from glob import glob from glob import glob
from .util import prepare_command from .util import prepare_command, Unbuffered
def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, skip, environment): def build(project_dir, package_name, output_dir, test_command, test_requires, before_build, skip, environment):
# Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print' # Python under AppVeyor/Windows seems to be buffering by default, giving problems interleaving subprocess call output with unflushed calls to 'print'
sys.stdout.flush() sys.stdout.flush()
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) sys.stdout = Unbuffered(sys.stdout)
# run_with_env is a cmd file that sets the right environment variables to # run_with_env is a cmd file that sets the right environment variables to
run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd') run_with_env = os.path.join(tempfile.gettempdir(), 'appveyor_run_with_env.cmd')