You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

config.yml 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. references:
  2. - &defaults
  3. docker:
  4. - image: circleci/ruby:latest
  5. - &workspace_root
  6. ~/
  7. - &capture_coverage_data
  8. run:
  9. name: Capturing coverage data
  10. command: |
  11. set -e
  12. sudo apt-get install -qq lcov
  13. gem install coveralls-lcov
  14. lcov --no-external -b ../project -d ../project -c --output-file coverage.${CIRCLE_JOB}.info
  15. - &restore_coverage_data
  16. restore_cache:
  17. keys:
  18. - coverage-{{ .Environment.CIRCLE_WORKFLOW_ID }}
  19. - &merge_and_upload_coverage_data
  20. run:
  21. name: Merging and uploading coverage data
  22. command: |
  23. set -e
  24. if [ -f ~/project/coverage.rspamd-test.info ] && [ -f ~/project/coverage.functional.info ]; then
  25. sudo apt-get install -qq lcov
  26. lcov -a ~/project/coverage.rspamd-test.info -t rspamd-test -a ~/project/coverage.functional.info -t functional -o coverage.info
  27. gem install coveralls-lcov
  28. if [ ! -z $COVERALLS_REPO_TOKEN ]; then coveralls-lcov -t ${COVERALLS_REPO_TOKEN} coverage.info || true; fi
  29. fi
  30. version: 2
  31. jobs:
  32. build:
  33. <<: *defaults
  34. steps:
  35. - checkout
  36. - run: sudo apt-get update -qq || true
  37. - run: sudo apt-get install -qq cmake libevent-dev libglib2.0-dev libicu-dev libluajit-5.1-dev libmagic-dev libsqlite3-dev libssl-dev ragel
  38. - run: mkdir ../build ; mkdir ../install ; cd ../build
  39. - run: cmake ../project -DDBDIR=/nana -DENABLE_COVERAGE=ON -DCMAKE_INSTALL_PREFIX=../install
  40. - run: make install -j`nproc`
  41. - persist_to_workspace:
  42. root: *workspace_root
  43. paths:
  44. - project
  45. - build
  46. - install
  47. rspamd-test:
  48. <<: *defaults
  49. steps:
  50. - attach_workspace:
  51. at: *workspace_root
  52. - run: sudo apt-get update -qq || true
  53. - run: sudo apt-get install -qq cmake libluajit-5.1-dev libmagic-dev
  54. - run: cd ../build
  55. - run: make rspamd-test -j`nproc`
  56. - run: set +e; test/rspamd-test -p /rspamd/lua; echo "export RETURN_CODE=$?" >> $BASH_ENV
  57. - *capture_coverage_data
  58. # Share coverage data between jobs
  59. - save_cache:
  60. key: coverage-{{ .Environment.CIRCLE_WORKFLOW_ID }}
  61. paths:
  62. - coverage.rspamd-test.info
  63. - *restore_coverage_data
  64. - *merge_and_upload_coverage_data
  65. - run: (exit $RETURN_CODE)
  66. functional:
  67. <<: *defaults
  68. steps:
  69. - attach_workspace:
  70. at: *workspace_root
  71. - run: sudo apt-get update -qq || true
  72. - run: sudo apt-get install -qq libluajit-5.1-dev libpcre3-dev luarocks opendkim-tools python-pip redis-server
  73. - run: sudo pip install demjson psutil robotframework
  74. - run: sudo luarocks install luacheck
  75. - run: cd ../build
  76. - run: set +e; RSPAMD_INSTALLROOT=../install sudo -E robot -x xunit.xml --exclude isbroken ../project/test/functional/cases; echo "export RETURN_CODE=$?" >> $BASH_ENV
  77. - *capture_coverage_data
  78. # Share coverage data between jobs
  79. - save_cache:
  80. key: coverage-{{ .Environment.CIRCLE_WORKFLOW_ID }}
  81. paths:
  82. - coverage.functional.info
  83. - *restore_coverage_data
  84. - *merge_and_upload_coverage_data
  85. - store_artifacts:
  86. path: output.xml
  87. - store_artifacts:
  88. path: log.html
  89. - store_artifacts:
  90. path: report.html
  91. - run: mkdir -p test-results; mv xunit.xml test-results
  92. - store_test_results:
  93. path: test-results
  94. - run: (exit $RETURN_CODE)
  95. eslint:
  96. docker:
  97. - image: circleci/node:latest
  98. steps:
  99. - checkout
  100. - restore_cache:
  101. keys:
  102. - v1-dependencies-{{ checksum "package.json" }}
  103. # fallback to using the latest cache if no exact match is found
  104. - v1-dependencies-
  105. - run: npm install
  106. - save_cache:
  107. paths:
  108. - node_modules
  109. key: v1-dependencies-{{ checksum "package.json" }}
  110. - run: ./node_modules/.bin/eslint -v && ./node_modules/.bin/eslint ./
  111. workflows:
  112. version: 2
  113. build-and-test:
  114. jobs:
  115. - build
  116. - eslint
  117. - rspamd-test:
  118. requires:
  119. - build
  120. - functional:
  121. requires:
  122. - build