run_test_cases.yaml 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. name: Run test case
  2. concurrency:
  3. group: test-${{ github.event_name }}-${{ github.ref }}
  4. cancel-in-progress: true
  5. on:
  6. push:
  7. branches:
  8. - '**'
  9. tags:
  10. - v*
  11. - e*
  12. pull_request:
  13. jobs:
  14. prepare:
  15. runs-on: aws-amd64
  16. # prepare source with any OTP version, no need for a matrix
  17. container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04"
  18. outputs:
  19. fast_ct_apps: ${{ steps.find_ct_apps.outputs.fast_ct_apps }}
  20. docker_ct_apps: ${{ steps.find_ct_apps.outputs.docker_ct_apps }}
  21. steps:
  22. - uses: AutoModality/action-clean@v1
  23. - uses: actions/checkout@v3
  24. with:
  25. path: source
  26. - name: Find CT Apps
  27. working-directory: source
  28. id: find_ct_apps
  29. run: |
  30. fast_ct_apps="$(./scripts/find-apps.sh --ci fast)"
  31. docker_ct_apps="$(./scripts/find-apps.sh --ci docker)"
  32. echo "fast: $fast_ct_apps"
  33. echo "docker: $docker_ct_apps"
  34. echo "::set-output name=fast_ct_apps::$fast_ct_apps"
  35. echo "::set-output name=docker_ct_apps::$docker_ct_apps"
  36. - name: get_all_deps
  37. working-directory: source
  38. env:
  39. PROFILE: emqx
  40. #DIAGNOSTIC: 1
  41. run: |
  42. make ensure-rebar3
  43. # fetch all deps and compile
  44. make emqx
  45. make test-compile
  46. cd ..
  47. zip -ryq source.zip source/* source/.[^.]*
  48. - uses: actions/upload-artifact@v3
  49. with:
  50. name: source-emqx
  51. path: source.zip
  52. prepare_ee:
  53. runs-on: aws-amd64
  54. # prepare source with any OTP version, no need for a matrix
  55. container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04"
  56. steps:
  57. - uses: AutoModality/action-clean@v1
  58. - uses: actions/checkout@v3
  59. with:
  60. path: source
  61. - name: get_all_deps
  62. working-directory: source
  63. env:
  64. PROFILE: emqx-enterprise
  65. #DIAGNOSTIC: 1
  66. run: |
  67. make ensure-rebar3
  68. # fetch all deps and compile
  69. make emqx-enterprise
  70. make test-compile
  71. cd ..
  72. zip -ryq source.zip source/* source/.[^.]*
  73. - uses: actions/upload-artifact@v3
  74. with:
  75. name: source-emqx-enterprise
  76. path: source.zip
  77. eunit_and_proper:
  78. needs:
  79. - prepare
  80. - prepare_ee
  81. runs-on: aws-amd64
  82. strategy:
  83. fail-fast: false
  84. matrix:
  85. profile:
  86. - emqx
  87. - emqx-enterprise
  88. defaults:
  89. run:
  90. shell: bash
  91. container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04"
  92. steps:
  93. - uses: AutoModality/action-clean@v1
  94. - uses: actions/download-artifact@v3
  95. with:
  96. name: source-${{ matrix.profile }}
  97. path: .
  98. - name: unzip source code
  99. env:
  100. PROFILE: ${{ matrix.profile }}
  101. run: unzip -o -q source.zip
  102. # produces eunit.coverdata
  103. - name: eunit
  104. env:
  105. PROFILE: ${{ matrix.profile }}
  106. working-directory: source
  107. run: make eunit
  108. # produces proper.coverdata
  109. - name: proper
  110. env:
  111. PROFILE: ${{ matrix.profile }}
  112. working-directory: source
  113. run: make proper
  114. - uses: actions/upload-artifact@v3
  115. with:
  116. name: coverdata
  117. path: source/_build/test/cover
  118. ct_docker:
  119. needs:
  120. - prepare
  121. - prepare_ee
  122. strategy:
  123. fail-fast: false
  124. matrix:
  125. app: ${{ fromJson(needs.prepare.outputs.docker_ct_apps) }}
  126. otp_release:
  127. - "erlang24"
  128. runs-on: aws-amd64
  129. defaults:
  130. run:
  131. shell: bash
  132. steps:
  133. - uses: AutoModality/action-clean@v1
  134. - uses: actions/download-artifact@v3
  135. with:
  136. name: source-${{ matrix.app[1] }}
  137. path: .
  138. - name: unzip source code
  139. run: unzip -q source.zip
  140. - name: docker compose up
  141. working-directory: source
  142. env:
  143. MONGO_TAG: 5
  144. MYSQL_TAG: 8
  145. PGSQL_TAG: 13
  146. REDIS_TAG: 6
  147. INFLUXDB_TAG: 2.5.0
  148. WHICH_APP: ${{ matrix.app[0] }}
  149. PROFILE: ${{ matrix.app[1] }}
  150. run: |
  151. echo $PROFILE
  152. rm _build/default/lib/rocksdb/_build/cmake/CMakeCache.txt
  153. ./scripts/ct/run.sh --app $WHICH_APP
  154. - uses: actions/upload-artifact@v3
  155. with:
  156. name: coverdata
  157. path: source/_build/test/cover
  158. - uses: actions/upload-artifact@v3
  159. if: failure()
  160. with:
  161. name: logs_${{ matrix.otp_release }}-${{ matrix.app[0] }}-${{ matrix.app[1] }}
  162. path: source/_build/test/logs
  163. ct:
  164. needs:
  165. - prepare
  166. - prepare_ee
  167. strategy:
  168. fail-fast: false
  169. matrix:
  170. app: ${{ fromJson(needs.prepare.outputs.fast_ct_apps) }}
  171. runs-on: aws-amd64
  172. container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04"
  173. defaults:
  174. run:
  175. shell: bash
  176. steps:
  177. - uses: AutoModality/action-clean@v1
  178. - uses: actions/download-artifact@v3
  179. with:
  180. name: source-${{ matrix.app[1] }}
  181. path: .
  182. - name: unzip source code
  183. run: unzip -q source.zip
  184. # produces $PROFILE-<app-name>.coverdata
  185. - name: run common test
  186. working-directory: source
  187. env:
  188. WHICH_APP: ${{ matrix.app[0] }}
  189. PROFILE: ${{ matrix.app[1] }}
  190. run: |
  191. make "${WHICH_APP}-ct"
  192. - uses: actions/upload-artifact@v3
  193. with:
  194. name: coverdata
  195. path: source/_build/test/cover
  196. if-no-files-found: warn # do not fail if no coverdata found
  197. - uses: actions/upload-artifact@v3
  198. if: failure()
  199. with:
  200. name: logs_${{ matrix.otp_release }}-${{ matrix.app[0] }}-${{ matrix.app[1] }}
  201. path: source/_build/test/logs
  202. make_cover:
  203. needs:
  204. - eunit_and_proper
  205. - ct
  206. - ct_docker
  207. runs-on: ubuntu-20.04
  208. container: "ghcr.io/emqx/emqx-builder/5.0-18:1.13.4-24.3.4.2-1-ubuntu20.04"
  209. steps:
  210. - uses: AutoModality/action-clean@v1
  211. - uses: actions/download-artifact@v3
  212. with:
  213. name: source-emqx-enterprise
  214. path: .
  215. - name: unzip source code
  216. run: unzip -q source.zip
  217. - uses: actions/download-artifact@v3
  218. name: download coverdata
  219. with:
  220. name: coverdata
  221. path: source/_build/test/cover
  222. - name: make cover
  223. working-directory: source
  224. env:
  225. PROFILE: emqx-enterprise
  226. run: make cover
  227. - name: send to coveralls
  228. working-directory: source
  229. env:
  230. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  231. PROFILE: emqx-enterprise
  232. run: make coveralls
  233. - name: get coveralls logs
  234. working-directory: source
  235. if: failure()
  236. run: cat rebar3.crashdump
  237. # do this in a separate job
  238. upload_coverdata:
  239. needs: make_cover
  240. runs-on: ubuntu-20.04
  241. steps:
  242. - name: Coveralls Finished
  243. env:
  244. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  245. run: |
  246. curl -v -k https://coveralls.io/webhook \
  247. --header "Content-Type: application/json" \
  248. --data "{\"repo_name\":\"$GITHUB_REPOSITORY\",\"repo_token\":\"$GITHUB_TOKEN\",\"payload\":{\"build_num\":$GITHUB_RUN_ID,\"status\":\"done\"}}" || true