run_test_cases.yaml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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. eunit_and_proper:
  15. strategy:
  16. matrix:
  17. otp:
  18. - 24.2.1-1
  19. elixir:
  20. - 1.13.3
  21. os:
  22. - ubuntu20.04
  23. arch:
  24. - amd64
  25. runs-on: aws-amd64
  26. container: "emqx/emqx-builder/5.0-14:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}"
  27. steps:
  28. - uses: actions/checkout@v2
  29. - name: Get deps git refs for cache
  30. id: deps-refs
  31. run: |
  32. scripts/get-dep-refs.sh
  33. make clean-all
  34. - name: load quicer cache
  35. uses: actions/cache@v2
  36. with:
  37. path: source/_build/default/lib/quicer/
  38. key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
  39. # produces eunit.coverdata
  40. - name: eunit
  41. run: make eunit
  42. # produces proper.coverdata
  43. - name: proper
  44. run: make proper
  45. - uses: actions/upload-artifact@v2
  46. with:
  47. name: coverdata
  48. path: _build/test/cover
  49. find_apps:
  50. runs-on: aws-amd64
  51. container: emqx/emqx-builder/5.0-14:1.13.3-24.2.1-1-ubuntu20.04
  52. outputs:
  53. fast_ct_apps: ${{ steps.run_find_apps.outputs.fast_ct_apps }}
  54. docker_ct_apps: ${{ steps.run_find_apps.outputs.docker_ct_apps }}
  55. defaults:
  56. run:
  57. shell: bash
  58. steps:
  59. - uses: actions/checkout@v2
  60. - name: find apps
  61. id: run_find_apps
  62. run: |
  63. fast_ct_apps="$(./scripts/find-apps.sh --ct fast --json)"
  64. docker_ct_apps="$(./scripts/find-apps.sh --ct docker --json)"
  65. echo "::set-output name=fast_ct_apps::$fast_ct_apps"
  66. echo "::set-output name=docker_ct_apps::$docker_ct_apps"
  67. ct_docker:
  68. needs: find_apps
  69. strategy:
  70. fail-fast: false
  71. matrix:
  72. app_name: ${{ fromJson(needs.find_apps.outputs.docker_ct_apps) }}
  73. otp_release:
  74. - "erlang24"
  75. runs-on: aws-amd64
  76. defaults:
  77. run:
  78. shell: bash
  79. steps:
  80. - uses: actions/checkout@v2
  81. - name: docker compose up
  82. env:
  83. MONGO_TAG: 5
  84. MYSQL_TAG: 8
  85. PGSQL_TAG: 13
  86. REDIS_TAG: 6
  87. run: |
  88. docker-compose \
  89. -f .ci/docker-compose-file/docker-compose-mongo-single-tcp.yaml \
  90. -f .ci/docker-compose-file/docker-compose-mongo-single-tls.yaml \
  91. -f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
  92. -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
  93. -f .ci/docker-compose-file/docker-compose-pgsql-tcp.yaml \
  94. -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
  95. -f .ci/docker-compose-file/docker-compose-redis-single-tcp.yaml \
  96. -f .ci/docker-compose-file/docker-compose-redis-single-tls.yaml \
  97. -f .ci/docker-compose-file/docker-compose.yaml \
  98. up -d --build
  99. # produces <app-name>.coverdata
  100. - name: run common test
  101. run: |
  102. docker exec -i ${{ matrix.otp_release }} bash -c "git config --global --add safe.directory \"$GITHUB_WORKSPACE\" && make ${{ matrix.app_name }}-ct"
  103. - uses: actions/upload-artifact@v1
  104. if: matrix.otp_release == 'erlang24'
  105. with:
  106. name: coverdata
  107. path: _build/test/cover
  108. - uses: actions/upload-artifact@v1
  109. if: failure()
  110. with:
  111. name: logs_${{ matrix.otp_release }}
  112. path: _build/test/logs
  113. ct:
  114. needs: find_apps
  115. strategy:
  116. fail-fast: false
  117. matrix:
  118. app_name: ${{ fromJson(needs.find_apps.outputs.fast_ct_apps) }}
  119. otp:
  120. - 24.2.1-1
  121. elixir:
  122. - 1.13.3
  123. os:
  124. - ubuntu20.04
  125. arch:
  126. - amd64
  127. runs-on: aws-amd64
  128. container: "emqx/emqx-builder/5.0-14:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}"
  129. defaults:
  130. run:
  131. shell: bash
  132. steps:
  133. - uses: actions/checkout@v2
  134. # produces <app-name>.coverdata
  135. - name: run common test
  136. run: |
  137. make ${{ matrix.app_name }}-ct
  138. - uses: actions/upload-artifact@v1
  139. if: matrix.otp == '24.2.1-1'
  140. with:
  141. name: coverdata
  142. path: _build/test/cover
  143. - uses: actions/upload-artifact@v1
  144. if: failure()
  145. with:
  146. name: logs_${{ matrix.otp_release }}
  147. path: _build/test/logs
  148. make_cover:
  149. needs:
  150. - eunit_and_proper
  151. - ct
  152. - ct_docker
  153. strategy:
  154. matrix:
  155. otp:
  156. - 24.2.1-1
  157. elixir:
  158. - 1.13.3
  159. os:
  160. - ubuntu20.04
  161. arch:
  162. - amd64
  163. runs-on: aws-amd64
  164. container: "emqx/emqx-builder/5.0-14:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}"
  165. steps:
  166. - uses: actions/checkout@v2
  167. - name: Get deps git refs for cache
  168. id: deps-refs
  169. run: |
  170. scripts/get-dep-refs.sh
  171. make clean-all
  172. - name: load quicer cache
  173. uses: actions/cache@v2
  174. with:
  175. path: source/_build/default/lib/quicer/
  176. key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }}
  177. - uses: actions/download-artifact@v2
  178. name: download coverdata
  179. with:
  180. name: coverdata
  181. path: _build/test/cover
  182. - name: make cover
  183. run: make cover
  184. - name: send to coveralls
  185. env:
  186. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  187. run: make coveralls
  188. # do this in a separate job
  189. upload_coverdata:
  190. needs: make_cover
  191. runs-on: aws-amd64
  192. steps:
  193. - name: Coveralls Finished
  194. env:
  195. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  196. run: |
  197. curl -v -k https://coveralls.io/webhook \
  198. --header "Content-Type: application/json" \
  199. --data "{\"repo_name\":\"$GITHUB_REPOSITORY\",\"repo_token\":\"$GITHUB_TOKEN\",\"payload\":{\"build_num\":$GITHUB_RUN_ID,\"status\":\"done\"}}" || true
  200. allgood_functional_tests:
  201. runs-on: ubuntu-20.04
  202. needs:
  203. - eunit_and_proper
  204. - ct_docker
  205. - ct
  206. steps:
  207. - name: Check if all functional tests succeeded
  208. uses: re-actors/alls-green@release/v1
  209. with:
  210. #allowed-failures:
  211. #allowed-skips:
  212. jobs: ${{ toJSON(needs) }}