_push-entrypoint.yaml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. name: Push Entrypoint
  2. concurrency:
  3. group: push-entrypoint-${{ github.event_name }}-${{ github.ref }}
  4. cancel-in-progress: true
  5. on:
  6. push:
  7. tags:
  8. - 'v*'
  9. branches:
  10. - 'master'
  11. - 'release-5[0-9]'
  12. - 'ci/**'
  13. workflow_dispatch:
  14. inputs:
  15. ref:
  16. required: false
  17. env:
  18. IS_CI: 'yes'
  19. jobs:
  20. prepare:
  21. runs-on: ubuntu-22.04
  22. container: 'ghcr.io/emqx/emqx-builder/5.3-9:1.15.7-26.2.5-3-ubuntu22.04'
  23. outputs:
  24. profile: ${{ steps.parse-git-ref.outputs.profile }}
  25. release: ${{ steps.parse-git-ref.outputs.release }}
  26. latest: ${{ steps.parse-git-ref.outputs.latest }}
  27. ct-matrix: ${{ steps.matrix.outputs.ct-matrix }}
  28. ct-host: ${{ steps.matrix.outputs.ct-host }}
  29. ct-docker: ${{ steps.matrix.outputs.ct-docker }}
  30. builder: 'ghcr.io/emqx/emqx-builder/5.3-9:1.15.7-26.2.5-3-ubuntu22.04'
  31. builder_vsn: '5.3-9'
  32. otp_vsn: '26.2.5-3'
  33. elixir_vsn: '1.15.7'
  34. permissions:
  35. contents: read
  36. steps:
  37. - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
  38. with:
  39. ref: ${{ github.event.inputs.ref }}
  40. fetch-depth: 0
  41. - name: Work around https://github.com/actions/checkout/issues/766
  42. shell: bash
  43. run: |
  44. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  45. - name: Detect emqx profile
  46. id: parse-git-ref
  47. run: |
  48. JSON="$(./scripts/parse-git-ref.sh $GITHUB_REF)"
  49. PROFILE=$(echo "$JSON" | jq -cr '.profile')
  50. RELEASE=$(echo "$JSON" | jq -cr '.release')
  51. LATEST=$(echo "$JSON" | jq -cr '.latest')
  52. echo "profile=$PROFILE" | tee -a $GITHUB_OUTPUT
  53. echo "release=$RELEASE" | tee -a $GITHUB_OUTPUT
  54. echo "latest=$LATEST" | tee -a $GITHUB_OUTPUT
  55. - name: Build matrix
  56. id: matrix
  57. run: |
  58. APPS="$(./scripts/find-apps.sh --ci)"
  59. MATRIX="$(echo "${APPS}" | jq -c '
  60. [
  61. (.[] | select(.profile == "emqx") | . + {
  62. builder: "5.3-9",
  63. otp: "26.2.5-3",
  64. elixir: "1.15.7"
  65. }),
  66. (.[] | select(.profile == "emqx-enterprise") | . + {
  67. builder: "5.3-9",
  68. otp: ["26.2.5-3"][],
  69. elixir: "1.15.7"
  70. })
  71. ]
  72. ')"
  73. echo "${MATRIX}" | jq
  74. CT_MATRIX="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')"
  75. CT_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')"
  76. CT_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')"
  77. echo "ct-matrix=${CT_MATRIX}" | tee -a $GITHUB_OUTPUT
  78. echo "ct-host=${CT_HOST}" | tee -a $GITHUB_OUTPUT
  79. echo "ct-docker=${CT_DOCKER}" | tee -a $GITHUB_OUTPUT
  80. build_packages:
  81. if: needs.prepare.outputs.release == 'true'
  82. needs:
  83. - prepare
  84. uses: ./.github/workflows/build_packages.yaml
  85. with:
  86. profile: ${{ needs.prepare.outputs.profile }}
  87. publish: true
  88. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  89. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  90. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  91. secrets: inherit
  92. build_and_push_docker_images:
  93. if: needs.prepare.outputs.release == 'true'
  94. needs:
  95. - prepare
  96. uses: ./.github/workflows/build_and_push_docker_images.yaml
  97. with:
  98. profile: ${{ needs.prepare.outputs.profile }}
  99. publish: true
  100. latest: ${{ needs.prepare.outputs.latest }}
  101. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  102. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  103. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  104. secrets: inherit
  105. build_slim_packages:
  106. if: needs.prepare.outputs.release != 'true'
  107. needs:
  108. - prepare
  109. uses: ./.github/workflows/build_slim_packages.yaml
  110. with:
  111. builder: ${{ needs.prepare.outputs.builder }}
  112. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  113. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  114. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  115. compile:
  116. if: needs.prepare.outputs.release != 'true'
  117. runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
  118. container: ${{ needs.prepare.outputs.builder }}
  119. needs:
  120. - prepare
  121. strategy:
  122. matrix:
  123. profile:
  124. - emqx
  125. - emqx-enterprise
  126. permissions:
  127. contents: read
  128. steps:
  129. - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
  130. with:
  131. ref: ${{ github.event.inputs.ref }}
  132. fetch-depth: 0
  133. - name: Work around https://github.com/actions/checkout/issues/766
  134. run: |
  135. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  136. - id: compile
  137. env:
  138. PROFILE: ${{ matrix.profile }}
  139. ENABLE_COVER_COMPILE: 1
  140. run: |
  141. make $PROFILE
  142. echo "PROFILE=${PROFILE}" | tee -a .env
  143. echo "PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a .env
  144. zip -ryq -x@.github/workflows/.zipignore $PROFILE.zip .
  145. - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
  146. with:
  147. name: ${{ matrix.profile }}
  148. path: ${{ matrix.profile }}.zip
  149. retention-days: 1
  150. run_emqx_app_tests:
  151. needs:
  152. - prepare
  153. - compile
  154. uses: ./.github/workflows/run_emqx_app_tests.yaml
  155. with:
  156. builder: ${{ needs.prepare.outputs.builder }}
  157. before_ref: ${{ github.event.before }}
  158. after_ref: ${{ github.sha }}
  159. run_test_cases:
  160. if: needs.prepare.outputs.release != 'true'
  161. needs:
  162. - prepare
  163. - compile
  164. uses: ./.github/workflows/run_test_cases.yaml
  165. with:
  166. builder: ${{ needs.prepare.outputs.builder }}
  167. ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}
  168. ct-host: ${{ needs.prepare.outputs.ct-host }}
  169. ct-docker: ${{ needs.prepare.outputs.ct-docker }}
  170. run_conf_tests:
  171. if: needs.prepare.outputs.release != 'true'
  172. needs:
  173. - prepare
  174. - compile
  175. uses: ./.github/workflows/run_conf_tests.yaml
  176. with:
  177. builder: ${{ needs.prepare.outputs.builder }}
  178. static_checks:
  179. if: needs.prepare.outputs.release != 'true'
  180. needs:
  181. - prepare
  182. - compile
  183. uses: ./.github/workflows/static_checks.yaml
  184. with:
  185. builder: ${{ needs.prepare.outputs.builder }}
  186. ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}