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