<HTML><BODY>travis-ci: build each test in separate dockers<br><br>The build/test routines changed to be able to avoid<br>of influences between tests. For now the single build<br>process leaves the new image with prepared binaries<br>which is in use for testing routine in separate docker runs.<br><br>Fix #3863<br><br>---<br><br>Travis-ci: <br> Branch: <a href="https://github.com/tarantool/tarantool/tree/avtikhon/gh-3863-run-cleaner" rel=" noopener noreferrer" target="_blank" data-snippet-id="c1df930-3626-8d16-6782-d05bfea9a060" data-mce-href="https://github.com/tarantool/tarantool/tree/avtikhon/gh-3863-run-cleaner">https://github.com/tarantool/tarantool/tree/avtikhon/gh-3863-run-cleaner</a><br><br>diff --git a/.travis.mk b/.travis.mk<br>index edd94cd7d..d88ceff62 100644<br>--- a/.travis.mk<br>+++ b/.travis.mk<br>@@ -13,37 +13,111 @@ package:<br> test: test_$(TRAVIS_OS_NAME)<br> <br> # Redirect some targets via docker<br>-test_linux: docker_test_ubuntu<br>-coverage: docker_coverage_ubuntu<br>+test_linux:<br>+       TYPE=docker_test_ubuntu make -f .travis.mk docker_test_ubuntu<br>+coverage:<br>+       TYPE=docker_coverage_ubuntu make -f .travis.mk docker_coverage_ubuntu<br> <br>-docker_%:<br>+docker_common:<br>        mkdir -p ~/.cache/ccache<br>        docker run \<br>-               --rm=true --tty=true \<br>+               --tty=true \<br>                --volume "${PWD}:/tarantool" \<br>-               --volume "${HOME}/.cache:/cache" \<br>-               --workdir /tarantool \<br>-               -e XDG_CACHE_HOME=/cache \<br>-               -e CCACHE_DIR=/cache/ccache \<br>+               --name built_container_${TRAVIS_JOB_ID} \<br>                -e COVERALLS_TOKEN=${COVERALLS_TOKEN} \<br>                -e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \<br>                ${DOCKER_IMAGE} \<br>-               make -f .travis.mk $(subst docker_,,$@)<br>+               /bin/bash -c "cp -rfp /tarantool /tarantool_ws \<br>+                       && cd /tarantool_ws \<br>+                       && make -f .travis.mk $(subst docker_,,${TYPE}) \<br>+                       || exit 1"<br>+       docker tag ${DOCKER_IMAGE} ${DOCKER_IMAGE}_tmp<br>+       docker commit built_container_${TRAVIS_JOB_ID} ${DOCKER_IMAGE}_tmp<br>+       docker rm -f built_container_${TRAVIS_JOB_ID}<br>+       cd test && suites=`ls -1 */suite.ini | sed 's#/.*##g'` ; cd .. ; \<br>+       passed=0 ; \<br>+       failed=0 ; \<br>+       for suite in $$suites ; do \<br>+               tests=`cd test/$$suite && ls -1 *.test.lua 2>/dev/null | sed 's#.test.lua##g'` ; \<br>+               for test in $$tests ; do \<br>+                       TEST=$$suite/$$test.test ; \<br>+                       docker run \<br>+                               --rm=true --tty=true \<br>+                               --volume "${PWD}:/tarantool" \<br>+                               --workdir /tarantool_ws \<br>+                               -e COVERALLS_TOKEN=${COVERALLS_TOKEN} \<br>+                               -e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \<br>+                               -e TEST=$$TEST \<br>+                               ${DOCKER_IMAGE}_tmp \<br>+                               /bin/bash -c "make -s -f .travis.mk $(subst docker_,run_,${TYPE}) \<br>+                                       || exit 1" \<br>+                               && passed=$$(($$passed+1)) \<br>+                               || failed=$$(($$failed+1)) ; \<br>+               done ; \<br>+       done ; \<br>+       echo ; \<br>+       echo "Overall results:" ; \<br>+       echo "================" ; \<br>+       echo "Passed # of tested scenarious: $$passed" ; \<br>+       if [ "$$failed" -ne "0" ] ; then \<br>+               echo "Failed # of tests: $$failed" ; \<br>+               echo ------------------- ; \<br>+               grep '\[ fail \]' ${PWD}/test_*.log | sed 's#.*:##g' ; \<br>+               echo =================== ; \<br>+               echo ; \<br>+               false ; \<br>+       fi<br>+<br>+docker_test_ubuntu: docker_common<br>+       # post test stage<br>+       docker rmi -f ${DOCKER_IMAGE}_tmp<br> <br> deps_ubuntu:<br>-       sudo apt-get update && apt-get install -y -f \<br>+       sudo apt-get update \<br>+               >/tarantool/apt_update.log 2>&1 \<br>+               && echo "APT update PASSED" \<br>+               || ( echo "APT update FAILED" ; \<br>+                       cat /tarantool/apt_update.log ; \<br>+                       exit 1 )<br>+       sudo apt-get install -y -f \<br>                build-essential cmake coreutils sed \<br>                libreadline-dev libncurses5-dev libyaml-dev libssl-dev \<br>                libcurl4-openssl-dev libunwind-dev libicu-dev \<br>                python python-pip python-setuptools python-dev \<br>                python-msgpack python-yaml python-argparse python-six python-gevent \<br>-               lcov ruby<br>+               lcov ruby rsync \<br>+               >/tarantool/apt_install.log 2>&1 \<br>+               && echo "APT install PASSED" \<br>+               || ( echo "APT install FAILED" ; \<br>+                       cat /tarantool/apt_install.log ; \<br>+                       exit 1 )<br> <br> test_ubuntu: deps_ubuntu<br>-       cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfoWError ${CMAKE_EXTRA_PARAMS}<br>-       make -j8<br>-       cd test && /usr/bin/python test-run.py -j 1<br>+       cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfoWError ${CMAKE_EXTRA_PARAMS} \<br>+               >/tarantool/cmake.log 2>&1 \<br>+               && echo "CMAKE PASSED" \<br>+               || ( echo "CMAKE FAILED" ; \<br>+                       cat /tarantool/cmake.log ; \<br>+                       exit 1 )<br>+       make -j \<br>+               >/tarantool/make.log 2>&1 \<br>+               && echo "MAKE PASSED" \<br>+               || ( echo "MAKE FAILED" ; \<br>+                       cat /tarantool/make.log ; \<br>+                       exit 1 )<br> <br>+run_test_ubuntu:<br>+       file="test_$(subst /,_,${TEST}).log" ; \<br>+       sfile="/tarantool_ws/$$file" ; \<br>+       cd test && /usr/bin/python test-run.py -j 1 ${TEST} \<br>+               >$$sfile 2>&1 \<br>+               && ( echo "TEST(${TEST}) PASSED" ; \<br>+                       grep "Statistics:" -A1000 $$sfile | grep -v Statistics ) \<br>+               || ( echo "TEST(${TEST}) FAILED" ; \<br>+                       cat $$file ; \<br>+                       cp -f $$sfile /tarantool/. ; \<br>+                       exit 1 )<br>+        <br> deps_osx:<br>        brew update<br>        brew install openssl readline curl icu4c --force<br>@@ -66,10 +140,46 @@ test_osx: deps_osx<br>        deactivate<br> <br> coverage_ubuntu: deps_ubuntu<br>-       cmake . -DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=ON<br>-       make -j8<br>+       cmake . -DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=ON \<br>+               >/tarantool/cmake.log 2>&1 \<br>+               && echo "CMAKE PASSED" \<br>+               || ( echo "CMAKE FAILED" ; \<br>+                       cat /tarantool/cmake.log ; \<br>+                       exit 1 )<br>+       make -j \<br>+               >/tarantool/make.log 2>&1 \<br>+               && echo "MAKE PASSED" \<br>+               || ( echo "MAKE FAILED" ; \<br>+                       cat /tarantool/make.log ; \<br>+                       exit 1 )<br>+<br>+run_coverage_ubuntu:<br>        # Enable --long tests for coverage<br>-       cd test && /usr/bin/python test-run.py -j 1 --long<br>+       file="test_$(subst /,_,${TEST}).log" ; \<br>+       sfile="/tarantool_ws/$$file" ; \<br>+       cd test && /usr/bin/python test-run.py -j 1 --long ${TEST} \<br>+               >$$file 2>&1 \<br>+               && ( rsync -uqr /tarantool_ws/src/ /tarantool/src >/dev/null 2>&1 ; \<br>+                       echo "TEST(${TEST}) PASSED" ; \<br>+                       grep "Statistics:" -A1000 $$file | grep -v Statistics ) \<br>+               || ( echo "TEST(${TEST}) FAILED" ; \<br>+                       cat $$file ; \<br>+                       cp -f $$sfile /tarantool/. ; \<br>+                       exit 1 )<br>+<br>+docker_coverage_ubuntu: docker_common<br>+       # post test stage<br>+       docker run \<br>+               --rm=true --tty=true \<br>+               --volume "${PWD}:/tarantool" \<br>+               --workdir /tarantool \<br>+               -e COVERALLS_TOKEN=${COVERALLS_TOKEN} \<br>+               -e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \<br>+               ${DOCKER_IMAGE}_tmp \<br>+               /bin/bash -c "make -f .travis.mk analyze_coverage_ubuntu || exit 1"<br>+       docker rmi -f ${DOCKER_IMAGE}_tmp<br>+<br>+analyze_coverage_ubuntu:<br>        lcov --compat-libtool --directory src/ --capture --output-file coverage.info.tmp<br>        lcov --compat-libtool --remove coverage.info.tmp 'tests/*' 'third_party/*' '/usr/*' \<br>                --output-file coverage.info<br>@@ -79,7 +189,7 @@ coverage_ubuntu: deps_ubuntu<br>                gem install coveralls-lcov; \<br>                echo coveralls-lcov --service-name travis-ci --service-job-id $(TRAVIS_JOB_ID) --repo-token [FILTERED] coverage.info; \<br>                coveralls-lcov --service-name travis-ci --service-job-id $(TRAVIS_JOB_ID) --repo-token $(COVERALLS_TOKEN) coverage.info; \<br>-       fi;<br>+       fi<br> <br> source:<br>        git clone https://github.com/packpack/packpack.git packpack<br><br><br><br>-- <br>Alexander Tikhonov</BODY></HTML>