diff options
author | Anton Yuzhaninov <citrin+git@citrin.ru> | 2018-10-13 06:16:34 -0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-10-13 11:16:34 +0100 |
commit | f1223526c78d8b3bd9a325a85e3ffb1285555faf (patch) | |
tree | 485a2385975d0c39ec97faf8e4411007931ebb80 /.drone.yml | |
parent | 17a7d2e236715ada721749e19bca861778060900 (diff) | |
download | rspamd-f1223526c78d8b3bd9a325a85e3ffb1285555faf.tar.gz rspamd-f1223526c78d8b3bd9a325a85e3ffb1285555faf.zip |
Drone speedup (#2588)
* Start switchind test to custom Docker images
Using Docker images with pre-installed delendencies will speedup
testing.
* Debug build in drone.io
* Use variable instead hardcoded path to the source
* Debug variable substitution by drone
Also according to comments in code DRONE_WORKSPACE is deprecated and
CI_WORKSPACE is a new form.
* One more try to use variables.
It looks like drone uses same rules as docker-compose:
https://docs.docker.com/compose/compose-file/#variable-substitution
* Cleanup debug
* Less verbose make output
* Be consistent in variable escaping
It works without escaping only becuse ${VAR} currently expanded by
drone, but $VAR is not.
* Use alpine base image for nodejs
It is smaller.
* Return rspamd-test
* Revert variable escaping
Wihtout escaping it is more easy to copy-past command for testing.
Just don't use ${var} when var should be expanded by shell and not
drone.
* Add debug
* Fix yaml parsing error
* Fix exit code capture
It should be done on the same line, because drone insert 'echo + cmd'
between commands.
* Remove debug
* Readability
No functional changes.
* Return functional tests
* Be consistent
* Add git stub for coveralls
* Send coverage
* Fix yaml parsing error
* Add links to Dockerfiles
* Send test log in case of test failure
XXX if rspamd-test failed, but functional was successful robot log will be
attached (but not useful).
* Don't run rspamd-test and functional tests in parallel
It looks like there is a race condition in writing coverage files.
* Try to run tests in parallel
* Add debug
* Fix parallel test run
test/rspamd-test and functional test both use luacov.stats.out file
in current directory. Run ./rspamd-test from anther directory.
* Use drone condition for sending coveralls report
Also don't send report if empty tocken was provided.
* Add mininal python3 compatibility
Diffstat (limited to '.drone.yml')
-rw-r--r-- | .drone.yml | 112 |
1 files changed, 48 insertions, 64 deletions
diff --git a/.drone.yml b/.drone.yml index e8e714b71..d3ee6bafb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,92 +1,76 @@ +--- workspace: base: /rspamd pipeline: build: - image: gcc:5 + # https://github.com/rspamd/rspamd-build-docker/blob/master/ubuntu-build/Dockerfile + image: rspamd/ci-ubuntu-build group: build commands: - - pwd - - set -e - - apt-get update -qq - - apt-get install -qq cmake libevent-dev libglib2.0-dev libicu-dev libluajit-5.1-dev libmagic-dev libsqlite3-dev libssl-dev ragel libunwind-dev libunwind8 - - umask 0000 - - mkdir /rspamd/build ; mkdir /rspamd/install ; cd /rspamd/build - - cmake /rspamd/src/github.com/rspamd/rspamd/ -DDBDIR=/nana -DENABLE_COVERAGE=ON -DENABLE_LIBUNWIND=ON -DCMAKE_INSTALL_PREFIX=/rspamd/install - - make install -j`nproc` - - make rspamd-test -j`nproc` + - mkdir /rspamd/build /rspamd/install + - cd /rspamd/build + - cmake $CI_WORKSPACE -DENABLE_COVERAGE=ON -DENABLE_LIBUNWIND=ON -DCMAKE_INSTALL_PREFIX=/rspamd/install -DCMAKE_RULE_MESSAGES=OFF + - ncpu=$(getconf _NPROCESSORS_ONLN) + - make -j $ncpu install + - make -j $ncpu rspamd-test eslint: - image: node:latest + image: node:10-alpine group: build commands: - npm install - - ./node_modules/.bin/eslint -v && ./node_modules/.bin/eslint ./ + - ./node_modules/.bin/eslint -v + - ./node_modules/.bin/eslint ./ rspamd-test: - image: gcc:5 + # https://github.com/rspamd/rspamd-build-docker/blob/master/ubuntu-test/Dockerfile + image: rspamd/ci-ubuntu-test group: tests commands: + # rspamd-test and functional test both use luacov.stats.out file and should be started from + # different directories (if started in parallel) + - cd /rspamd/build/test + - set +e + - ./rspamd-test -p /rspamd/lua; EXIT_CODE=$? - set -e - - apt-get update -qq - - apt-get install -qq cmake libevent-dev libglib2.0-dev libicu-dev libluajit-5.1-dev libmagic-dev libsqlite3-dev libssl-dev ragel libunwind-dev libunwind8 luarocks - - apt-get install -qq python-pip python-dev - - pip install --upgrade setuptools - - pip install --upgrade pyOpenSSL - - pip install --upgrade certifi - - pip install --upgrade ipaddress - - pip install --upgrade urllib3 - - pip install --upgrade enum34 - - pip install --upgrade cpp-coveralls requests cryptography - - luarocks install luacov - - luarocks install luacov-coveralls - - - cd /rspamd/build - - set +e; test/rspamd-test -p /rspamd/lua - - luacov-coveralls -o unit_test_lua.json --dryrun - - coveralls --dump coverage.rspamd-test.dump + - luacov-coveralls -o /rspamd/build/unit_test_lua.json --dryrun + # coveralls dosn't support layout when object files are located outside git repo root + # add hack to disable searching for git + - ln -s /bin/true /usr/local/bin/git + - coveralls --dump /rspamd/build/coverage.rspamd-test.dump + - exit $EXIT_CODE functional: - image: gcc:5 + # https://github.com/rspamd/rspamd-build-docker/blob/master/ubuntu-test-func/Dockerfile + image: rspamd/ci-ubuntu-test-func group: tests commands: - - echo 'deb http://repo.yandex.ru/clickhouse/deb/stable/ main/' | tee /etc/apt/sources.list.d/clickhouse.list - - apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 # optional, clickhouse key - - apt-get update -qq || true - - apt-get install -qq libluajit-5.1-dev libpcre3-dev luarocks opendkim-tools python-pip redis-server libunwind8 libglib2.0-dev libicu-dev libevent-dev python-dev - - apt-get install -qq clickhouse-server - - apt-get install -qq python-pip python-dev - - pip install demjson psutil robotframework http - - pip install --upgrade setuptools - - pip install --upgrade pyOpenSSL - - pip install --upgrade certifi - - pip install --upgrade ipaddress - - pip install --upgrade urllib3 - - pip install --upgrade enum34 - - pip install --upgrade cpp-coveralls requests cryptography - - - luarocks install luacheck - - luarocks install luacov - - luarocks install luacov-coveralls - - cd /rspamd/build - - umask 0000 - - set +e; RSPAMD_INSTALLROOT=/rspamd/install robot -x xunit.xml --exclude isbroken /rspamd/src/github.com/rspamd/rspamd/test/functional/cases; export RETURN_CODE=$? - - cat log.html + - set +e + - RSPAMD_INSTALLROOT=/rspamd/install robot --xunit xunit.xml --exclude isbroken $CI_WORKSPACE/test/functional/cases; EXIT_CODE=$? + - set -e + # coveralls will not find git repo anyway, see above + - ln -s /bin/true /usr/local/bin/git - coveralls --dump coverage.functional.dump - - exit $RETURN_CODE + - exit $EXIT_CODE send-coverage: - image: gcc:5 + image: rspamd/ci-ubuntu-test secrets: [ coveralls_repo_token ] - commands: | - [ ! $DRONE_COMMIT_BRANCH = 'master' ] && exit 0 - apt-get update -qq || true - apt-get install -qq python-pip python-dev - pip install --upgrade setuptools - pip install --upgrade pyOpenSSL - pip install cpp-coveralls requests cryptography - cd /rspamd/build - [ ! -z $COVERALLS_REPO_TOKEN ] && /rspamd/src/github.com/rspamd/rspamd/test/functional/util/merge_coveralls.py --input coverage.functional.dump coverage.rspamd-test.dump unit_test_lua.json lua_coverage_report.json --output out.josn --token=$COVERALLS_REPO_TOKEN + commands: + - cd /rspamd/build + - $CI_WORKSPACE/test/functional/util/merge_coveralls.py --input coverage.functional.dump coverage.rspamd-test.dump unit_test_lua.json lua_coverage_report.json --output out.josn --token=$COVERALLS_REPO_TOKEN + when: + branch: master + # don't send coverage report for pull request + event: [push, tag] + send-test-log: + image: drillster/drone-email + from: noreply@rspamd.com + attachment: /rspamd/build/log.html + secrets: [email_host, email_username, email_password] + when: + status: failure |