build_and_push_docker_images.yaml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. name: Build and push docker images
  2. concurrency:
  3. group: docker-build-${{ github.event_name }}-${{ github.ref }}
  4. cancel-in-progress: true
  5. on:
  6. workflow_call:
  7. inputs:
  8. profile:
  9. required: true
  10. type: string
  11. version:
  12. required: true
  13. type: string
  14. latest:
  15. required: true
  16. type: string
  17. publish:
  18. required: true
  19. type: string
  20. otp_vsn:
  21. required: true
  22. type: string
  23. elixir_vsn:
  24. required: true
  25. type: string
  26. builder_vsn:
  27. required: true
  28. type: string
  29. runner:
  30. required: true
  31. type: string
  32. secrets:
  33. DOCKER_HUB_USER:
  34. required: true
  35. DOCKER_HUB_TOKEN:
  36. required: true
  37. AWS_ACCESS_KEY_ID:
  38. required: true
  39. AWS_SECRET_ACCESS_KEY:
  40. required: true
  41. workflow_dispatch:
  42. inputs:
  43. ref:
  44. required: false
  45. profile:
  46. required: false
  47. type: string
  48. default: 'emqx'
  49. version:
  50. required: true
  51. latest:
  52. required: false
  53. type: boolean
  54. default: false
  55. publish:
  56. required: false
  57. type: boolean
  58. default: false
  59. otp_vsn:
  60. required: false
  61. type: string
  62. default: '25.3.2-2'
  63. elixir_vsn:
  64. required: false
  65. type: string
  66. default: '1.14.5'
  67. builder_vsn:
  68. required: false
  69. type: string
  70. default: '5.1-4'
  71. runner:
  72. required: false
  73. type: string
  74. default: 'ubuntu-22.04'
  75. jobs:
  76. docker:
  77. runs-on: ${{ inputs.runner }}
  78. strategy:
  79. fail-fast: false
  80. matrix:
  81. profile:
  82. - ${{ inputs.profile }}
  83. - ${{ inputs.profile }}-elixir
  84. registry:
  85. - 'docker.io'
  86. - 'public.ecr.aws'
  87. exclude:
  88. - profile: emqx-enterprise
  89. registry: 'public.ecr.aws'
  90. - profile: emqx-enterprise-elixir
  91. registry: 'public.ecr.aws'
  92. steps:
  93. - uses: actions/checkout@v3
  94. with:
  95. ref: ${{ github.event.inputs.ref }}
  96. fetch-depth: 0
  97. - uses: docker/setup-qemu-action@v2
  98. - uses: docker/setup-buildx-action@v2
  99. - name: Login to hub.docker.com
  100. uses: docker/login-action@v2
  101. if: matrix.registry == 'docker.io'
  102. with:
  103. username: ${{ secrets.DOCKER_HUB_USER }}
  104. password: ${{ secrets.DOCKER_HUB_TOKEN }}
  105. - name: Login to AWS ECR
  106. uses: docker/login-action@v2
  107. if: matrix.registry == 'public.ecr.aws'
  108. with:
  109. registry: public.ecr.aws
  110. username: ${{ secrets.AWS_ACCESS_KEY_ID }}
  111. password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  112. ecr: true
  113. - name: Build docker image
  114. env:
  115. PROFILE: ${{ matrix.profile }}
  116. DOCKER_REGISTRY: ${{ matrix.registry }}
  117. DOCKER_ORG: ${{ github.repository_owner }}
  118. DOCKER_LATEST: ${{ inputs.latest }}
  119. DOCKER_PUSH: ${{ inputs.publish == 'true' || inputs.publish || github.repository_owner != 'emqx' }}
  120. DOCKER_BUILD_NOCACHE: true
  121. DOCKER_PLATFORMS: linux/amd64,linux/arm64
  122. EMQX_RUNNER: 'debian:11-slim'
  123. EMQX_DOCKERFILE: 'deploy/docker/Dockerfile'
  124. PKG_VSN: ${{ inputs.version }}
  125. EMQX_BUILDER_VSN: ${{ inputs.builder_vsn }}
  126. EMQX_OTP_VSN: ${{ inputs.otp_vsn }}
  127. EMQX_ELIXIR_VSN: ${{ inputs.elixir_vsn }}
  128. run: |
  129. ./build ${PROFILE} docker