_push-entrypoint.yaml 6.8 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. - 'e*'
  10. branches:
  11. - 'master'
  12. - 'release-5?'
  13. - 'ci/**'
  14. env:
  15. IS_CI: 'yes'
  16. jobs:
  17. prepare:
  18. runs-on: ${{ fromJSON(github.repository_owner == 'emqx' && '["self-hosted","ephemeral","linux","x64"]' || '["ubuntu-22.04"]') }}
  19. container: 'ghcr.io/emqx/emqx-builder/5.1-4:1.14.5-25.3.2-2-ubuntu22.04'
  20. outputs:
  21. profile: ${{ steps.parse-git-ref.outputs.profile }}
  22. release: ${{ steps.parse-git-ref.outputs.release }}
  23. latest: ${{ steps.parse-git-ref.outputs.latest }}
  24. version: ${{ steps.parse-git-ref.outputs.version }}
  25. ct-matrix: ${{ steps.matrix.outputs.ct-matrix }}
  26. ct-host: ${{ steps.matrix.outputs.ct-host }}
  27. ct-docker: ${{ steps.matrix.outputs.ct-docker }}
  28. runner_labels: ${{ github.repository_owner == 'emqx' && '["self-hosted","ephemeral","linux","x64"]' || '["ubuntu-22.04"]' }}
  29. builder: 'ghcr.io/emqx/emqx-builder/5.1-4:1.14.5-25.3.2-2-ubuntu22.04'
  30. builder_vsn: '5.1-4'
  31. otp_vsn: '25.3.2-2'
  32. elixir_vsn: '1.14.5'
  33. steps:
  34. - uses: actions/checkout@v3
  35. with:
  36. ref: ${{ github.event.inputs.ref }}
  37. fetch-depth: 0
  38. - name: Work around https://github.com/actions/checkout/issues/766
  39. shell: bash
  40. run: |
  41. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  42. - name: Detect emqx profile and version
  43. id: parse-git-ref
  44. run: |
  45. JSON="$(./scripts/parse-git-ref.sh $GITHUB_REF)"
  46. PROFILE=$(echo "$JSON" | jq -cr '.profile')
  47. RELEASE=$(echo "$JSON" | jq -cr '.release')
  48. LATEST=$(echo "$JSON" | jq -cr '.latest')
  49. VERSION="$(./pkg-vsn.sh "$PROFILE")"
  50. echo "profile=$PROFILE" | tee -a $GITHUB_OUTPUT
  51. echo "release=$RELEASE" | tee -a $GITHUB_OUTPUT
  52. echo "latest=$LATEST" | tee -a $GITHUB_OUTPUT
  53. echo "version=$VERSION" | tee -a $GITHUB_OUTPUT
  54. - name: Build matrix
  55. id: matrix
  56. run: |
  57. APPS="$(./scripts/find-apps.sh --ci)"
  58. MATRIX="$(echo "${APPS}" | jq -c '
  59. [
  60. (.[] | select(.profile == "emqx") | . + {
  61. builder: "5.1-4",
  62. otp: "25.3.2-2",
  63. elixir: "1.14.5"
  64. }),
  65. (.[] | select(.profile == "emqx-enterprise") | . + {
  66. builder: "5.1-4",
  67. otp: ["25.3.2-2"][],
  68. elixir: "1.14.5"
  69. })
  70. ]
  71. ')"
  72. echo "${MATRIX}" | jq
  73. CT_MATRIX="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')"
  74. CT_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')"
  75. CT_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')"
  76. echo "ct-matrix=${CT_MATRIX}" | tee -a $GITHUB_OUTPUT
  77. echo "ct-host=${CT_HOST}" | tee -a $GITHUB_OUTPUT
  78. echo "ct-docker=${CT_DOCKER}" | tee -a $GITHUB_OUTPUT
  79. build_packages:
  80. if: needs.prepare.outputs.release == 'true'
  81. needs:
  82. - prepare
  83. uses: ./.github/workflows/build_packages.yaml
  84. with:
  85. profile: ${{ needs.prepare.outputs.profile }}
  86. publish: ${{ needs.prepare.outputs.release }}
  87. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  88. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  89. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  90. secrets: inherit
  91. build_and_push_docker_images:
  92. if: needs.prepare.outputs.release == 'true'
  93. needs:
  94. - prepare
  95. uses: ./.github/workflows/build_and_push_docker_images.yaml
  96. with:
  97. profile: ${{ needs.prepare.outputs.profile }}
  98. version: ${{ needs.prepare.outputs.version }}
  99. publish: ${{ needs.prepare.outputs.release }}
  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. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  105. secrets: inherit
  106. build_slim_packages:
  107. if: needs.prepare.outputs.release != 'true'
  108. needs:
  109. - prepare
  110. uses: ./.github/workflows/build_slim_packages.yaml
  111. with:
  112. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  113. builder: ${{ needs.prepare.outputs.builder }}
  114. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  115. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  116. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  117. compile:
  118. if: needs.prepare.outputs.release != 'true'
  119. runs-on: ${{ fromJSON(needs.prepare.outputs.runner_labels) }}
  120. container: ${{ needs.prepare.outputs.builder }}
  121. needs:
  122. - prepare
  123. strategy:
  124. matrix:
  125. profile:
  126. - emqx
  127. - emqx-enterprise
  128. steps:
  129. - uses: actions/checkout@v3
  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. zip -ryq $PROFILE.zip .
  143. - uses: actions/upload-artifact@v3
  144. with:
  145. name: ${{ matrix.profile }}
  146. path: ${{ matrix.profile }}.zip
  147. retention-days: 1
  148. run_emqx_app_tests:
  149. needs:
  150. - prepare
  151. - compile
  152. uses: ./.github/workflows/run_emqx_app_tests.yaml
  153. with:
  154. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  155. builder: ${{ needs.prepare.outputs.builder }}
  156. before_ref: ${{ github.event.before }}
  157. after_ref: ${{ github.sha }}
  158. run_test_cases:
  159. if: needs.prepare.outputs.release != 'true'
  160. needs:
  161. - prepare
  162. - compile
  163. uses: ./.github/workflows/run_test_cases.yaml
  164. with:
  165. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  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. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  178. builder: ${{ needs.prepare.outputs.builder }}
  179. static_checks:
  180. if: needs.prepare.outputs.release != 'true'
  181. needs:
  182. - prepare
  183. - compile
  184. uses: ./.github/workflows/static_checks.yaml
  185. with:
  186. runner_labels: ${{ needs.prepare.outputs.runner_labels }}
  187. builder: ${{ needs.prepare.outputs.builder }}
  188. ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}