sudo: false dist: trusty language: python python: - "3.4" # 2.7 and 3.5 are preinstalled by default env: global: - ETCDVERSION=3.0.17 ZKVERSION=3.4.9 CONSULVERSION=0.7.4 - PYVERSIONS="2.7 3.4 3.5" matrix: - TEST_SUITE="python setup.py" - DCS="etcd" TEST_SUITE="behave" - DCS="exhibitor" TEST_SUITE="behave" - DCS="consul" TEST_SUITE="behave" cache: directories: - $HOME/mycache before_cache: - | rm -fr $HOME/mycache/python* for pv in $PYVERSIONS; do if [[ $TEST_SUITE != "behave" || $pv != "3.4" ]]; then fpv=$(basename $(readlink $HOME/virtualenv/python${pv})) mv $HOME/virtualenv/${fpv} $HOME/mycache/${fpv} fi done install: - | set -e if [[ $TEST_SUITE == "behave" ]]; then function get_consul() { CC=~/mycache/consul_${CONSULVERSION} if [[ ! -x $CC ]]; then curl -L https://releases.hashicorp.com/consul/${CONSULVERSION}/consul_${CONSULVERSION}_linux_amd64.zip \ | gunzip > $CC [[ ${PIPESTATUS[0]} == 0 ]] || return 1 chmod +x $CC fi ln -s $CC consul } function get_etcd() { EC=~/mycache/etcd_${ETCDVERSION} if [[ ! -x $EC ]]; then curl -L https://github.com/coreos/etcd/releases/download/v${ETCDVERSION}/etcd-v${ETCDVERSION}-linux-amd64.tar.gz \ | tar xz -C . --strip=1 --wildcards --no-anchored etcd [[ ${PIPESTATUS[0]} == 0 ]] || return 1 mv etcd $EC fi ln -s $EC etcd } function get_exhibitor() { ZC=~/mycache/zookeeper-${ZKVERSION} if [[ ! -d $ZC ]]; then curl -L http://www.apache.org/dist/zookeeper/zookeeper-${ZKVERSION}/zookeeper-${ZKVERSION}.tar.gz | tar xz [[ ${PIPESTATUS[0]} == 0 ]] || return 1 mv zookeeper-${ZKVERSION}/conf/zoo_sample.cfg zookeeper-${ZKVERSION}/conf/zoo.cfg mv zookeeper-${ZKVERSION} $ZC fi $ZC/bin/zkServer.sh start # following lines are 'emulating' exhibitor REST API while true; do echo -e 'HTTP/1.0 200 OK\nContent-Type: application/json\n\n{"servers":["127.0.0.1"],"port":2181}' \ | nc -l 8181 &> /dev/null done& } attempt_num=1 until get_${DCS}; do [[ $attempt_num -ge 3 ]] && exit 1 echo "Attempt $attempt_num failed! Trying again in $attempt_num seconds..." sleep $(( attempt_num++ )) done fi for pv in $PYVERSIONS; do if [[ $TEST_SUITE != "behave" || $pv != "3.4" ]]; then fpv=$(basename $(readlink $HOME/virtualenv/python$pv)) if [[ -d ~/mycache/${fpv} ]]; then mv ~/virtualenv/${fpv} ~/virtualenv/${fpv}.bckp mv ~/mycache/${fpv} ~/virtualenv/${fpv} fi source ~/virtualenv/python${pv}/bin/activate # explicitly install all needed python modules to cache them for p in '-r requirements.txt' 'behave codacy-coverage coverage coveralls flake8 mock pytest-cov pytest setuptools'; do pip install $p --upgrade done fi done script: - | for pv in $PYVERSIONS; do source ~/virtualenv/python${pv}/bin/activate if [[ $TEST_SUITE != "behave" ]]; then echo Running unit tests using python${pv} $TEST_SUITE test $TEST_SUITE flake8 elif [[ $pv != "3.4" ]]; then echo Running acceptance tests using python${pv} if ! PATH=.:/usr/lib/postgresql/9.6/bin:$PATH $TEST_SUITE; then # output all log files when tests are failing grep . features/output/*/*postgres?.* exit 1 fi fi done set +e after_success: # before_cache is executed earlier than after_success, so we need to restore one of virtualenv directories - fpv=$(basename $(readlink $HOME/virtualenv/python3.5)) && mv $HOME/mycache/${fpv} $HOME/virtualenv/${fpv} - coveralls - if [[ $TEST_SUITE != "behave" ]]; then python-codacy-coverage -r coverage.xml; fi