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