_pr_entrypoint.yaml 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. name: PR Entrypoint
  2. concurrency:
  3. group: pr-entrypoint-${{ github.event_name }}-${{ github.ref }}
  4. cancel-in-progress: true
  5. on:
  6. pull_request:
  7. workflow_dispatch:
  8. inputs:
  9. ref:
  10. required: false
  11. env:
  12. IS_CI: "yes"
  13. jobs:
  14. sanity-checks:
  15. runs-on: ubuntu-22.04
  16. container: "ghcr.io/emqx/emqx-builder/5.2-3:1.14.5-25.3.2-2-ubuntu22.04"
  17. outputs:
  18. ct-matrix: ${{ steps.matrix.outputs.ct-matrix }}
  19. ct-host: ${{ steps.matrix.outputs.ct-host }}
  20. ct-docker: ${{ steps.matrix.outputs.ct-docker }}
  21. version-emqx: ${{ steps.matrix.outputs.version-emqx }}
  22. version-emqx-enterprise: ${{ steps.matrix.outputs.version-emqx-enterprise }}
  23. builder: "ghcr.io/emqx/emqx-builder/5.2-3:1.14.5-25.3.2-2-ubuntu22.04"
  24. builder_vsn: "5.2-3"
  25. otp_vsn: "25.3.2-2"
  26. elixir_vsn: "1.14.5"
  27. steps:
  28. - uses: actions/checkout@v3
  29. with:
  30. ref: ${{ github.event.inputs.ref }}
  31. fetch-depth: 0
  32. - name: Work around https://github.com/actions/checkout/issues/766
  33. run: |
  34. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  35. - name: Run gitlint
  36. env:
  37. BEFORE_REF: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
  38. AFTER_REF: ${{ github.sha }}
  39. run: |
  40. pip install gitlint
  41. gitlint --commits $BEFORE_REF..$AFTER_REF --config .github/workflows/.gitlint
  42. - name: Run shellcheck
  43. run: |
  44. DEBIAN_FRONTEND=noninteractive apt-get update -qy && apt-get install -qy shellcheck
  45. ./scripts/shellcheck.sh
  46. - name: Run shell tests
  47. run: |
  48. DEBIAN_FRONTEND=noninteractive apt-get update -qy && apt-get install -qy shelltestrunner
  49. scripts/shelltest/run_tests.sh
  50. - name: Check workflow files
  51. env:
  52. ACTIONLINT_VSN: 1.6.25
  53. run: |
  54. wget -q https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VSN}/actionlint_${ACTIONLINT_VSN}_linux_$(dpkg --print-architecture).tar.gz -O actionlint.tar.gz
  55. tar zxf actionlint.tar.gz actionlint
  56. # TODO: enable shellcheck when all the current issues are fixed
  57. ./actionlint -color \
  58. -shellcheck= \
  59. -ignore 'label ".+" is unknown' \
  60. -ignore 'value "emqx-enterprise" in "exclude"' \
  61. -ignore 'value "emqx-enterprise-elixir" in "exclude"'
  62. - name: Check line-break at EOF
  63. run: |
  64. ./scripts/check-nl-at-eof.sh
  65. - name: Check apps version
  66. run: |
  67. ./scripts/apps-version-check.sh
  68. - name: Setup mix
  69. env:
  70. MIX_ENV: emqx-enterprise
  71. PROFILE: emqx-enterprise
  72. run: |
  73. mix local.hex --force --if-missing && mix local.rebar --force --if-missing
  74. - name: Check formatting
  75. env:
  76. MIX_ENV: emqx-enterprise
  77. PROFILE: emqx-enterprise
  78. run: |
  79. ./scripts/check-format.sh
  80. - name: Run elvis check
  81. run: |
  82. ./scripts/elvis-check.sh $GITHUB_BASE_REF
  83. - name: Generate CT Matrix
  84. id: matrix
  85. run: |
  86. APPS="$(./scripts/find-apps.sh --ci)"
  87. MATRIX="$(echo "${APPS}" | jq -c '
  88. [
  89. (.[] | select(.profile == "emqx") | . + {
  90. builder: "5.2-3",
  91. otp: "25.3.2-2",
  92. elixir: "1.14.5"
  93. }),
  94. (.[] | select(.profile == "emqx-enterprise") | . + {
  95. builder: "5.2-3",
  96. otp: ["25.3.2-2"][],
  97. elixir: "1.14.5"
  98. })
  99. ]
  100. ')"
  101. echo "${MATRIX}" | jq
  102. CT_MATRIX="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')"
  103. CT_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')"
  104. CT_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')"
  105. echo "ct-matrix=${CT_MATRIX}" | tee -a $GITHUB_OUTPUT
  106. echo "ct-host=${CT_HOST}" | tee -a $GITHUB_OUTPUT
  107. echo "ct-docker=${CT_DOCKER}" | tee -a $GITHUB_OUTPUT
  108. echo "version-emqx=$(./pkg-vsn.sh emqx)" | tee -a $GITHUB_OUTPUT
  109. echo "version-emqx-enterprise=$(./pkg-vsn.sh emqx-enterprise)" | tee -a $GITHUB_OUTPUT
  110. compile:
  111. runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral-xl","linux","x64"]') }}
  112. container: ${{ needs.sanity-checks.outputs.builder }}
  113. needs:
  114. - sanity-checks
  115. strategy:
  116. matrix:
  117. profile:
  118. - emqx
  119. - emqx-enterprise
  120. steps:
  121. - uses: actions/checkout@v3
  122. with:
  123. fetch-depth: 0
  124. - name: Work around https://github.com/actions/checkout/issues/766
  125. run: |
  126. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  127. - id: compile
  128. env:
  129. PROFILE: ${{ matrix.profile }}
  130. ENABLE_COVER_COMPILE: 1
  131. run: |
  132. make ensure-rebar3
  133. make ${PROFILE}
  134. make test-compile
  135. zip -ryq $PROFILE.zip .
  136. - uses: actions/upload-artifact@v3
  137. with:
  138. name: ${{ matrix.profile }}
  139. path: ${{ matrix.profile }}.zip
  140. retention-days: 1
  141. run_emqx_app_tests:
  142. needs:
  143. - sanity-checks
  144. - compile
  145. uses: ./.github/workflows/run_emqx_app_tests.yaml
  146. with:
  147. builder: ${{ needs.sanity-checks.outputs.builder }}
  148. before_ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
  149. after_ref: ${{ github.sha }}
  150. run_test_cases:
  151. needs:
  152. - sanity-checks
  153. - compile
  154. uses: ./.github/workflows/run_test_cases.yaml
  155. with:
  156. builder: ${{ needs.sanity-checks.outputs.builder }}
  157. ct-matrix: ${{ needs.sanity-checks.outputs.ct-matrix }}
  158. ct-host: ${{ needs.sanity-checks.outputs.ct-host }}
  159. ct-docker: ${{ needs.sanity-checks.outputs.ct-docker }}
  160. static_checks:
  161. needs:
  162. - sanity-checks
  163. - compile
  164. uses: ./.github/workflows/static_checks.yaml
  165. with:
  166. builder: ${{ needs.sanity-checks.outputs.builder }}
  167. ct-matrix: ${{ needs.sanity-checks.outputs.ct-matrix }}
  168. build_slim_packages:
  169. needs:
  170. - sanity-checks
  171. uses: ./.github/workflows/build_slim_packages.yaml
  172. with:
  173. builder: ${{ needs.sanity-checks.outputs.builder }}
  174. builder_vsn: ${{ needs.sanity-checks.outputs.builder_vsn }}
  175. otp_vsn: ${{ needs.sanity-checks.outputs.otp_vsn }}
  176. elixir_vsn: ${{ needs.sanity-checks.outputs.elixir_vsn }}
  177. build_docker_for_test:
  178. needs:
  179. - sanity-checks
  180. uses: ./.github/workflows/build_docker_for_test.yaml
  181. with:
  182. otp_vsn: ${{ needs.sanity-checks.outputs.otp_vsn }}
  183. elixir_vsn: ${{ needs.sanity-checks.outputs.elixir_vsn }}
  184. version-emqx: ${{ needs.sanity-checks.outputs.version-emqx }}
  185. version-emqx-enterprise: ${{ needs.sanity-checks.outputs.version-emqx-enterprise }}
  186. spellcheck:
  187. needs:
  188. - sanity-checks
  189. - build_slim_packages
  190. uses: ./.github/workflows/spellcheck.yaml
  191. run_conf_tests:
  192. needs:
  193. - sanity-checks
  194. - compile
  195. uses: ./.github/workflows/run_conf_tests.yaml
  196. with:
  197. builder: ${{ needs.sanity-checks.outputs.builder }}
  198. check_deps_integrity:
  199. needs:
  200. - sanity-checks
  201. uses: ./.github/workflows/check_deps_integrity.yaml
  202. with:
  203. builder: ${{ needs.sanity-checks.outputs.builder }}
  204. run_jmeter_tests:
  205. needs:
  206. - sanity-checks
  207. - build_docker_for_test
  208. uses: ./.github/workflows/run_jmeter_tests.yaml
  209. with:
  210. version-emqx: ${{ needs.sanity-checks.outputs.version-emqx }}
  211. run_docker_tests:
  212. needs:
  213. - sanity-checks
  214. - build_docker_for_test
  215. uses: ./.github/workflows/run_docker_tests.yaml
  216. with:
  217. version-emqx: ${{ needs.sanity-checks.outputs.version-emqx }}
  218. version-emqx-enterprise: ${{ needs.sanity-checks.outputs.version-emqx-enterprise }}
  219. run_helm_tests:
  220. needs:
  221. - sanity-checks
  222. - build_docker_for_test
  223. uses: ./.github/workflows/run_helm_tests.yaml
  224. with:
  225. version-emqx: ${{ needs.sanity-checks.outputs.version-emqx }}
  226. version-emqx-enterprise: ${{ needs.sanity-checks.outputs.version-emqx-enterprise }}