summaryrefslogtreecommitdiff
path: root/.travis.yml
diff options
context:
space:
mode:
Diffstat (limited to '.travis.yml')
-rw-r--r--.travis.yml208
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
+