blob: 0e02b4186d65181d706a941dc8c8fafc7ee850a4 (
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
102
103
104
105
106
107
108
109
110
|
dist: trusty
language: python
install:
- ./.travis/install.sh
# pypy is not passing, but allow failures for coverage stage to be reached
matrix:
allow_failures:
- python: pypy
jobs:
include:
- &test_job
stage: Test
script:
# WORKAROUND: attempt to retry JobTests.py if it fails and then continue if it passes, if it fails ten times
# then it is a real failure not related to intermittent travis failures
- n=0; while [[ $n -lt 10 ]]; do python runtest.py src/engine/SCons/JobTests.py && break; n=$((n+1)); done; if [ "$n" -gt "9" ]; then false; fi
- echo "src/engine/SCons/JobTests.py" > exclude_jobtest
- python runtest.py -a --exclude-list exclude_jobtest || if [[ $? == 2 ]]; then true; else false; fi
before_script: skip
after_success: skip
python: 2.7
env: PYVER=27
sudo: required
- <<: *test_job
python: 3.5
env: PYVER=35
sudo: required
- <<: *test_job
python: 3.6
env: PYVER=36
sudo: required
- <<: *test_job
python: pypy
env: PYVER=pypy
sudo: required
- &coverage_jobs
stage: Coverage
before_script:
- sudo pip install coverage
- sudo pip install coveralls
# set this ensure user sites are available
- export PYTHONNOUSERSITE=
# attempt to get a location where we can store the usercustomize.py file
- python -m site
- export PYSITEDIR=$(python -m site --user-site)
- sudo mkdir -p $PYSITEDIR
- sudo touch ${PYSITEDIR}/usercustomize.py
- export COVERAGE_FILE=$PWD/.coverage_file
# 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=8
# 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] = $PWD" >> .coveragerc
# Not including this workaround in the coverage report, because it will result
# in constantly changing coverage reports depending on the number of times
# the JobTests.py had to run to pass
# TODO: figure out how to cover JobTests.py
# - n=0; while [[ $n -lt 10 ]]; do coverage run --rcfile=$PWD/.coveragerc runtest.py src/engine/SCons/JobTests.py && break; n=$((n+1)); done; if [ "$n" -gt "9" ]; then false; fi
# exclude JobTest.py becuase we already ran that
- echo "src/engine/SCons/JobTests.py" > exclude_jobtest
- python runtest.py -l -a --exclude-list exclude_jobtest > 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 || if [[ $? == 2 ]]; then true; else false; fi
after_success:
- coverage combine
- coverage report
- coveralls --rcfile=$PWD/.coveragerc
env: BUILD_JOB_NUM=1
- <<: *coverage_jobs
env: BUILD_JOB_NUM=2
- <<: *coverage_jobs
env: BUILD_JOB_NUM=3
- <<: *coverage_jobs
env: BUILD_JOB_NUM=4
- <<: *coverage_jobs
env: BUILD_JOB_NUM=5
- <<: *coverage_jobs
env: BUILD_JOB_NUM=6
- <<: *coverage_jobs
env: BUILD_JOB_NUM=7
- <<: *coverage_jobs
env: BUILD_JOB_NUM=8
|