diff options
Diffstat (limited to '.travis.yml')
-rw-r--r-- | .travis.yml | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8a55575 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,208 @@ +dist: trusty +language: python + +# Used: travis encrypt "chat.freenode.net#scons" --add notifications.irc +notifications: + irc: + secure: TTb+41Bj1qIUc6vj+kDqBME8H3lqXdAe1RWAjjz5hL7bzFah6qCBHNJn4DwzqYs6+Pwuwp+6wFy8hgmQttJnXve4h6GtjtvlWprDqxaC7RkFqMWFDBzDalgbB54Bi4+TTZmSJ1K/duI3LrDaN873nyn+2GBnj+3TiNtgURp1fsJMpPxXJzAsoC8UthEsbx0Zkoal/WF+IfsT2q1yQRmAwB9r/drbahx/FfL16r1QjDbI9y1fKvN5J3PirLUvxtHfuH1r8zq1vlLew2fvldgVRtFv7+Lsk2waG/eiRpMf94V5JWP1rNreV/i4AUbZaTLb3bkrhtvTjSKhvx69Ydm+ygXdRgWOD/KRgqpLNAfA+t/a2J1R++89svQI4dPBpQjlfua1elcDCFddeIslgnjDUPO23Y0o7tHAy8sWkwhTcZH1Wm42uJP6Z6tHTH6+dMLvvZpkq4RUKUcrXvoUvCsVlWMGjcsBX+AEQSFGDJnLtLehO9x0QbgVga/IRKjgpDWgQDZgro3AkGg/zzVj5uFRUoU+rbmEXq9feh5i3HfExAvA3UoEtnQ6uadDyWqtQcLRFmPSWDU82CO+sanGdFL0jBjigE8ubPObzxEAz3Fg1xk56OYBkAdEd+2KEzeO1nqJmrhsnc3c/3+b1cBvaL5ozW4XB4XcWsOi268SoiBrcBo= + +addons: + apt: + update: true + +os: + - linux + +install: + # needed for Docbook tests, must be in virtualenv context + - pip install lxml==4.3.3 + # do the rest of the image setup + - ./.travis/install.sh + +# pypy is not passing atm, but still report build success for now +# allow coverage to fail, so we can still do testing for all platforms +matrix: + allow_failures: + - python: pypy + - python: pypy3 + - stage: Coverage + +# run coverage first as its still useful to collect +stages: + - Coverage + - Test + +# Note: Travis does not provide a way to specify the order of +# jobs within a Stage, which are "run in parallel", but with +# limitations: from observation four or five are kicked +# off, then additional jobs as initial ones complete. +# We want the slowest jobs in the first batch since the +# faster ones are less than half the time of the slowest, +# we should be able to finish the Test task in the time of the +# slowest job rather than (a fast job + the slowest job). +# Putting the pypy jobs first may help with this, though it's +# apparently not guaranteed. + +jobs: + include: + - &test_job + stage: Test + script: python runtest.py -a -t -j 2 || if [[ $? == 2 ]]; then true; else false; fi + before_script: skip + after_success: skip + python: pypy3 + env: + - PYVER=pypy3 + - PYTHON=pypy3 + sudo: required + + - <<: *test_job + python: pypy + env: + - PYVER=pypy + - PYTHON=pypy + sudo: required + + - <<: *test_job + python: 2.7 + env: + - PYVER=27 + - PYTHON=2.7 + sudo: required + + - <<: *test_job + python: 3.5 + env: + - PYVER=35 + - PYTHON=3.5 + sudo: required + + - <<: *test_job + python: 3.6 + env: + - PYVER=36 + - PYTHON=3.6 + sudo: required + + - <<: *test_job + python: 3.7 + env: + - PYVER=37 + - PYTHON=3.7 + sudo: required + dist: xenial # required for Python >= 3.7 + + - <<: *test_job + python: 3.8-dev + env: + - PYVER=38 + - PYTHON=3.8 + sudo: required + dist: xenial # required for Python >= 3.7 + + + - &coverage_jobs + stage: Coverage + python: 2.7 + before_script: + # install our own python so we can modify usercustomize.py + - deactivate + - sudo add-apt-repository -y ppa:deadsnakes/ppa + - sudo apt-get update || true + - sudo apt-get -y install python$PYTHON + - wget https://bootstrap.pypa.io/get-pip.py + - sudo -H python$PYTHON get-pip.py + - which python$PYTHON + - python$PYTHON --version + - python$PYTHON -m pip install --user -U coverage codecov + # set this ensure user sites are available + - export PYTHONNOUSERSITE= + # attempt to get a location where we can store the usercustomize.py file + - python$PYTHON -m site + - export PYSITEDIR=$(python$PYTHON -m site --user-site) + - sudo mkdir -p $PYSITEDIR + - sudo touch ${PYSITEDIR}/usercustomize.py + - export COVERAGE_FILE=$PWD/.coverage + # write the usercustomize.py file so all python processes use coverage and know where the config file is + - echo "import os" | sudo tee --append ${PYSITEDIR}/usercustomize.py + - echo "os.environ['COVERAGE_PROCESS_START'] = '$PWD/.coveragerc'" | sudo tee --append ${PYSITEDIR}/usercustomize.py + - echo "import coverage" | sudo tee --append ${PYSITEDIR}/usercustomize.py + - echo "coverage.process_startup()" | sudo tee --append ${PYSITEDIR}/usercustomize.py + + script: + - export TOTAL_BUILD_JOBS=4 + # write the coverage config file + - export COVERAGE_PROCESS_START=$PWD/.coveragerc + - echo "[run]" >> .coveragerc + - echo "source = $PWD/src" >> .coveragerc + - echo "parallel = True" >> .coveragerc + - printf "omit =\n\t*Tests.py\n\tsrc/test_*\n\tsrc/setup.py\n\n" >> .coveragerc + - echo "[path]" >> .coveragerc + - echo "source = $PWD" >> .coveragerc + - echo "[report]" >> .coveragerc + - printf "omit =\n\t*Tests.py\n\tsrc/test_*\n\tsrc/setup.py\n\n" >> .coveragerc + # get a list of all the tests to split them up + - python$PYTHON runtest.py -l -a > all_tests + - let "start = ($(wc -l < all_tests) / ${TOTAL_BUILD_JOBS}) * (${BUILD_JOB_NUM} - 1)"; true; + - let "end = ($(wc -l < all_tests) / ${TOTAL_BUILD_JOBS}) * ${BUILD_JOB_NUM}" + - if (( ${BUILD_JOB_NUM} == ${TOTAL_BUILD_JOBS} )); then end=$(wc -l < all_tests); fi + - if (( ${start} == 0 )); then start=1; fi + - sed -n ${start},${end}p all_tests > build_tests + - coverage run -p --rcfile=$PWD/.coveragerc runtest.py -f build_tests -j 2 || if [[ $? == 2 ]]; then true; else false; fi + + after_script: + - coverage combine + - coverage report + - coverage xml -o coverage_xml.xml + - codecov -X gcov --file coverage_xml.xml + # not using coveralls but leaving it commented to + # make it easy to re-enable + #- python$PYTHON -m pip install --user -U coveralls + #- coveralls --rcfile=$PWD/.coveragerc + + env: + - PYVER=27 + - PYTHON=2.7 + - BUILD_JOB_NUM=1 + + - <<: *coverage_jobs + env: + - PYVER=27 + - PYTHON=2.7 + - BUILD_JOB_NUM=2 + - <<: *coverage_jobs + env: + - PYVER=27 + - PYTHON=2.7 + - BUILD_JOB_NUM=3 + - <<: *coverage_jobs + env: + - PYVER=27 + - PYTHON=2.7 + - BUILD_JOB_NUM=4 + + - <<: *coverage_jobs + python: 3.6 + env: + - PYVER=36 + - PYTHON=3.6 + - BUILD_JOB_NUM=1 + - <<: *coverage_jobs + python: 3.6 + env: + - PYVER=36 + - PYTHON=3.6 + - BUILD_JOB_NUM=2 + - <<: *coverage_jobs + python: 3.6 + env: + - PYVER=36 + - PYTHON=3.6 + - BUILD_JOB_NUM=3 + - <<: *coverage_jobs + python: 3.6 + env: + - PYVER=36 + - PYTHON=3.6 + - BUILD_JOB_NUM=4 + |