build_and_push_docker_images.yaml 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. secrets:
  30. DOCKER_HUB_USER:
  31. required: true
  32. DOCKER_HUB_TOKEN:
  33. required: true
  34. AWS_ACCESS_KEY_ID:
  35. required: true
  36. AWS_SECRET_ACCESS_KEY:
  37. required: true
  38. workflow_dispatch:
  39. inputs:
  40. ref:
  41. required: false
  42. profile:
  43. required: false
  44. type: string
  45. default: 'emqx'
  46. version:
  47. required: true
  48. latest:
  49. required: false
  50. type: boolean
  51. default: false
  52. publish:
  53. required: false
  54. type: boolean
  55. default: false
  56. otp_vsn:
  57. required: false
  58. type: string
  59. default: '26.2.1-2'
  60. elixir_vsn:
  61. required: false
  62. type: string
  63. default: '1.15.7'
  64. builder_vsn:
  65. required: false
  66. type: string
  67. default: '5.3-2'
  68. permissions:
  69. contents: read
  70. jobs:
  71. docker:
  72. runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
  73. strategy:
  74. fail-fast: false
  75. matrix:
  76. profile:
  77. - ${{ inputs.profile }}
  78. - ${{ inputs.profile }}-elixir
  79. registry:
  80. - 'docker.io'
  81. - 'public.ecr.aws'
  82. exclude:
  83. - profile: emqx-enterprise
  84. registry: 'public.ecr.aws'
  85. - profile: emqx-enterprise-elixir
  86. registry: 'public.ecr.aws'
  87. steps:
  88. - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
  89. with:
  90. ref: ${{ github.event.inputs.ref }}
  91. fetch-depth: 0
  92. - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
  93. - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0
  94. - name: Login to hub.docker.com
  95. uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
  96. if: matrix.registry == 'docker.io'
  97. with:
  98. username: ${{ secrets.DOCKER_HUB_USER }}
  99. password: ${{ secrets.DOCKER_HUB_TOKEN }}
  100. - name: Login to AWS ECR
  101. uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
  102. if: matrix.registry == 'public.ecr.aws'
  103. with:
  104. registry: public.ecr.aws
  105. username: ${{ secrets.AWS_ACCESS_KEY_ID }}
  106. password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  107. ecr: true
  108. - name: Build docker image
  109. env:
  110. PROFILE: ${{ matrix.profile }}
  111. DOCKER_REGISTRY: ${{ matrix.registry }}
  112. DOCKER_ORG: ${{ github.repository_owner }}
  113. DOCKER_LATEST: ${{ inputs.latest }}
  114. DOCKER_PUSH: ${{ inputs.publish == 'true' || inputs.publish || github.repository_owner != 'emqx' }}
  115. DOCKER_BUILD_NOCACHE: true
  116. DOCKER_PLATFORMS: linux/amd64,linux/arm64
  117. EMQX_RUNNER: 'debian:11-slim'
  118. EMQX_DOCKERFILE: 'deploy/docker/Dockerfile'
  119. PKG_VSN: ${{ inputs.version }}
  120. EMQX_BUILDER_VSN: ${{ inputs.builder_vsn }}
  121. EMQX_OTP_VSN: ${{ inputs.otp_vsn }}
  122. EMQX_ELIXIR_VSN: ${{ inputs.elixir_vsn }}
  123. run: |
  124. ./build ${PROFILE} docker