_push-entrypoint.yaml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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[0-9]'
  13. - 'ci/**'
  14. permissions:
  15. contents: read
  16. env:
  17. IS_CI: 'yes'
  18. jobs:
  19. prepare:
  20. runs-on: ubuntu-22.04
  21. container: 'ghcr.io/emqx/emqx-builder/5.3-2:1.15.7-26.2.1-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. ct-matrix: ${{ steps.matrix.outputs.ct-matrix }}
  27. ct-host: ${{ steps.matrix.outputs.ct-host }}
  28. ct-docker: ${{ steps.matrix.outputs.ct-docker }}
  29. builder: 'ghcr.io/emqx/emqx-builder/5.3-2:1.15.7-26.2.1-2-ubuntu22.04'
  30. builder_vsn: '5.3-2'
  31. otp_vsn: '26.2.1-2'
  32. elixir_vsn: '1.15.7'
  33. steps:
  34. - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
  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
  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. echo "profile=$PROFILE" | tee -a $GITHUB_OUTPUT
  50. echo "release=$RELEASE" | tee -a $GITHUB_OUTPUT
  51. echo "latest=$LATEST" | tee -a $GITHUB_OUTPUT
  52. - name: Build matrix
  53. id: matrix
  54. run: |
  55. APPS="$(./scripts/find-apps.sh --ci)"
  56. MATRIX="$(echo "${APPS}" | jq -c '
  57. [
  58. (.[] | select(.profile == "emqx") | . + {
  59. builder: "5.3-2",
  60. otp: "26.2.1-2",
  61. elixir: "1.15.7"
  62. }),
  63. (.[] | select(.profile == "emqx-enterprise") | . + {
  64. builder: "5.3-2",
  65. otp: ["26.2.1-2"][],
  66. elixir: "1.15.7"
  67. })
  68. ]
  69. ')"
  70. echo "${MATRIX}" | jq
  71. CT_MATRIX="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')"
  72. CT_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')"
  73. CT_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')"
  74. echo "ct-matrix=${CT_MATRIX}" | tee -a $GITHUB_OUTPUT
  75. echo "ct-host=${CT_HOST}" | tee -a $GITHUB_OUTPUT
  76. echo "ct-docker=${CT_DOCKER}" | tee -a $GITHUB_OUTPUT
  77. build_packages:
  78. if: needs.prepare.outputs.release == 'true'
  79. needs:
  80. - prepare
  81. uses: ./.github/workflows/build_packages.yaml
  82. with:
  83. profile: ${{ needs.prepare.outputs.profile }}
  84. publish: true
  85. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  86. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  87. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  88. secrets: inherit
  89. build_and_push_docker_images:
  90. if: needs.prepare.outputs.release == 'true'
  91. needs:
  92. - prepare
  93. uses: ./.github/workflows/build_and_push_docker_images.yaml
  94. with:
  95. profile: ${{ needs.prepare.outputs.profile }}
  96. publish: true
  97. latest: ${{ needs.prepare.outputs.latest }}
  98. # TODO: revert this back to needs.prepare.outputs.otp_vsn when OTP 26 bug is fixed
  99. otp_vsn: 25.3.2-2
  100. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  101. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  102. secrets: inherit
  103. build_slim_packages:
  104. if: needs.prepare.outputs.release != 'true'
  105. needs:
  106. - prepare
  107. uses: ./.github/workflows/build_slim_packages.yaml
  108. with:
  109. builder: ${{ needs.prepare.outputs.builder }}
  110. builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
  111. otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
  112. elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
  113. compile:
  114. if: needs.prepare.outputs.release != 'true'
  115. runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
  116. container: ${{ needs.prepare.outputs.builder }}
  117. needs:
  118. - prepare
  119. strategy:
  120. matrix:
  121. profile:
  122. - emqx
  123. - emqx-enterprise
  124. steps:
  125. - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
  126. with:
  127. ref: ${{ github.event.inputs.ref }}
  128. fetch-depth: 0
  129. - name: Work around https://github.com/actions/checkout/issues/766
  130. run: |
  131. git config --global --add safe.directory "$GITHUB_WORKSPACE"
  132. - id: compile
  133. env:
  134. PROFILE: ${{ matrix.profile }}
  135. ENABLE_COVER_COMPILE: 1
  136. run: |
  137. make $PROFILE
  138. echo "PROFILE=${PROFILE}" | tee -a .env
  139. echo "PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a .env
  140. zip -ryq -x@.github/workflows/.zipignore $PROFILE.zip .
  141. - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
  142. with:
  143. name: ${{ matrix.profile }}
  144. path: ${{ matrix.profile }}.zip
  145. retention-days: 1
  146. run_emqx_app_tests:
  147. needs:
  148. - prepare
  149. - compile
  150. uses: ./.github/workflows/run_emqx_app_tests.yaml
  151. with:
  152. builder: ${{ needs.prepare.outputs.builder }}
  153. before_ref: ${{ github.event.before }}
  154. after_ref: ${{ github.sha }}
  155. run_test_cases:
  156. if: needs.prepare.outputs.release != 'true'
  157. needs:
  158. - prepare
  159. - compile
  160. uses: ./.github/workflows/run_test_cases.yaml
  161. with:
  162. builder: ${{ needs.prepare.outputs.builder }}
  163. ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}
  164. ct-host: ${{ needs.prepare.outputs.ct-host }}
  165. ct-docker: ${{ needs.prepare.outputs.ct-docker }}
  166. run_conf_tests:
  167. if: needs.prepare.outputs.release != 'true'
  168. needs:
  169. - prepare
  170. - compile
  171. uses: ./.github/workflows/run_conf_tests.yaml
  172. with:
  173. builder: ${{ needs.prepare.outputs.builder }}
  174. static_checks:
  175. if: needs.prepare.outputs.release != 'true'
  176. needs:
  177. - prepare
  178. - compile
  179. uses: ./.github/workflows/static_checks.yaml
  180. with:
  181. builder: ${{ needs.prepare.outputs.builder }}
  182. ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}