@@ -6,9 +6,13 @@ language: python
66cache : pip
77before_cache :
88 - rm -f $HOME/.cache/pip/log/debug.log
9- # place the slowest (instrumental and py2.6) first
9+ # place the slowest (instrumental, mutation and py2.6) first
1010matrix :
1111 include :
12+ - python : 3.7
13+ dist : xenial
14+ sudo : true
15+ env : MUTATION=yes
1216 - python : 2.7
1317 env : INSTRUMENTAL=yes
1418 - python : 2.6
@@ -74,10 +78,17 @@ install:
7478 travis_retry pip install -r build-requirements.txt;
7579 fi
7680 - if [[ $INSTRUMENTAL ]]; then travis_retry pip install instrumental; fi
81+ # - if [[ $MUTATION ]]; then travis_retry pip install cosmic-ray; fi
82+ # temporary, until https://github.com/sixty-north/cosmic-ray/pull/491 is merged
83+ - if [[ $MUTATION ]]; then pushd $(mktemp -d); fi
84+ - if [[ $MUTATION ]]; then git clone --branch sampling --depth 1 https://github.com/tomato42/cosmic-ray.git; fi
85+ - if [[ $MUTATION ]]; then cd cosmic-ray; fi
86+ - if [[ $MUTATION ]]; then python setup.py install; fi
87+ - if [[ $MUTATION ]]; then popd; fi
7788 - pip list
7889script :
7990 - if [[ $TOX_ENV ]]; then tox -e $TOX_ENV; fi
80- - tox -e speed
91+ - if [[ -z $MUTATION ]]; then tox -e speed; fi
8192 - |
8293 if [[ $INSTRUMENTAL && $TRAVIS_PULL_REQUEST != "false" ]]; then
8394 git checkout $PR_FIRST^
@@ -101,6 +112,26 @@ script:
101112 if [[ $INSTRUMENTAL && $TRAVIS_PULL_REQUEST != "false" ]]; then
102113 instrumental -f .instrumental.cov -s | python diff-instrumental.py --read .diff-instrumental --fail-under 70 --max-difference -0.1
103114 fi
115+ # cosmic-ray (mutation testing) runs
116+ - if [[ $MUTATION ]]; then cosmic-ray init cosmic-ray.toml session.sqlite; fi
117+ - if [[ $MUTATION ]]; then cosmic-ray baseline --report session.sqlite; fi
118+ - if [[ $MUTATION ]]; then cr-report --show-output session.baseline.sqlite; fi
119+ - |
120+ if [[ $MUTATION ]]; then
121+ cosmic-ray exec session.sqlite &
122+ COSMIC_PID=$!
123+ # make sure that we output something every 10 minutes (otherwise travis will kill us)
124+ while kill -s 0 $COSMIC_PID; do
125+ sleep 300
126+ cr-report session.sqlite | tail -n 3;
127+ done &
128+ REPORT_PID=$!
129+ # kill exec after 25 minutes
130+ (sleep $((60*25)); kill $COSMIC_PID) &
131+ fi
132+ - if [[ $MUTATION ]]; then wait $COSMIC_PID ; kill $REPORT_PID ; true; fi
133+ - if [[ $MUTATION ]]; then cr-report --show-output session.sqlite | tail -n 40; fi
134+ - if [[ $MUTATION ]]; then cr-rate --estimate --fail-over 25 --confidence 99.9 session.sqlite; fi
104135after_success :
105- - if [[ -z $INSTRUMENTAL ]]; then coveralls; fi
136+ - if [[ -z $INSTRUMENTAL && -z $MUTATION ]]; then coveralls; fi
106137
0 commit comments