_push-entrypoint.yaml 6.5 KB

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