_push-entrypoint.yaml 6.7 KB

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