summaryrefslogtreecommitdiffstats
path: root/.travis.yml
blob: 122e8d19b7b6f52f0687c5798e968ff30045f6fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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

# 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:

  # 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
  allow_failures:
    - python: pypy3
    
  include:
    - &test_job
      script: python runtest.py -a -t -j 2 || if [[ $? == 2 ]]; then true; else false; fi
      before_script: skip
      after_success: skip
      python: pypy3

    - <<: *test_job
      python: 3.5

    - <<: *test_job
      python: 3.6
      
    - <<: *test_job
      python: 3.7
      dist: xenial  # required for Python >= 3.7

    - <<: *test_job
      python: 3.8
      dist: bionic  # required for Python >= 3.8

    - <<: *test_job
      python: 3.9-dev
      dist: bionic  # required for Python >= 3.8

    - &coverage_jobs
      dist: bionic
      python: 3.7
      name: coverage
      before_script:
        - python -m pip install -U coverage codecov
        - python -m site
        # setup sitecustomize so we can make all subprocess start coverage
        - export PYSITEDIR=$(python -c "import sys; print(sys.path[-1])")
        - export COVERAGE_PROCESS_START="$PWD/.coveragerc"
        - mkdir -p "$PYSITEDIR"
        - echo "$PYSITEDIR"
        - touch "${PYSITEDIR}/sitecustomize.py"
        - echo "import os" |  tee --append "${PYSITEDIR}/sitecustomize.py"
        - echo "os.environ['COVERAGE_PROCESS_START'] = '$PWD/.coveragerc'" | tee --append "${PYSITEDIR}/sitecustomize.py"
        - echo "import coverage" | tee --append "${PYSITEDIR}/sitecustomize.py"
        - echo "coverage.process_startup()" | tee --append "${PYSITEDIR}/sitecustomize.py"
        - cat "${PYSITEDIR}/sitecustomize.py"
        # write the coverage config file
        - echo "[run]" >> "$PWD/.coveragerc"
        - echo "source = $PWD/SCons" >> "$PWD/.coveragerc"
        - echo "parallel = True" >> "$PWD/.coveragerc"
        - echo "omit = *Tests.py" >> "$PWD/.coveragerc"
        - echo "[path]" >> "$PWD/.coveragerc"
        - echo "source = $PWD" >> "$PWD/.coveragerc"
        - echo "[report]" >> "$PWD/.coveragerc"
        - echo "omit = *Tests.py" >> "$PWD/.coveragerc"
        - cat "$PWD/.coveragerc"

      script:
        - coverage run -p --rcfile="$PWD/.coveragerc" runtest.py -a -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