aboutsummaryrefslogtreecommitdiffstats
path: root/.drone.yml
diff options
context:
space:
mode:
authorAnton Yuzhaninov <citrin+git@citrin.ru>2018-10-13 06:16:34 -0400
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-10-13 11:16:34 +0100
commitf1223526c78d8b3bd9a325a85e3ffb1285555faf (patch)
tree485a2385975d0c39ec97faf8e4411007931ebb80 /.drone.yml
parent17a7d2e236715ada721749e19bca861778060900 (diff)
downloadrspamd-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.yml112
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