build_and_push_docker_images.yaml 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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: '25.3.2-2'
  60. elixir_vsn:
  61. required: false
  62. type: string
  63. default: '1.14.5'
  64. builder_vsn:
  65. required: false
  66. type: string
  67. default: '5.2-3'
  68. jobs:
  69. docker:
  70. runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
  71. strategy:
  72. fail-fast: false
  73. matrix:
  74. profile:
  75. - ${{ inputs.profile }}
  76. - ${{ inputs.profile }}-elixir
  77. registry:
  78. - 'docker.io'
  79. - 'public.ecr.aws'
  80. exclude:
  81. - profile: emqx-enterprise
  82. registry: 'public.ecr.aws'
  83. - profile: emqx-enterprise-elixir
  84. registry: 'public.ecr.aws'
  85. steps:
  86. - uses: actions/checkout@v3
  87. with:
  88. ref: ${{ github.event.inputs.ref }}
  89. fetch-depth: 0
  90. - uses: docker/setup-qemu-action@v2
  91. - uses: docker/setup-buildx-action@v2
  92. - name: Login to hub.docker.com
  93. uses: docker/login-action@v2
  94. if: matrix.registry == 'docker.io'
  95. with:
  96. username: ${{ secrets.DOCKER_HUB_USER }}
  97. password: ${{ secrets.DOCKER_HUB_TOKEN }}
  98. - name: Login to AWS ECR
  99. uses: docker/login-action@v2
  100. if: matrix.registry == 'public.ecr.aws'
  101. with:
  102. registry: public.ecr.aws
  103. username: ${{ secrets.AWS_ACCESS_KEY_ID }}
  104. password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
  105. ecr: true
  106. - name: Build docker image
  107. env:
  108. PROFILE: ${{ matrix.profile }}
  109. DOCKER_REGISTRY: ${{ matrix.registry }}
  110. DOCKER_ORG: ${{ github.repository_owner }}
  111. DOCKER_LATEST: ${{ inputs.latest }}
  112. DOCKER_PUSH: ${{ inputs.publish == 'true' || inputs.publish || github.repository_owner != 'emqx' }}
  113. DOCKER_BUILD_NOCACHE: true
  114. DOCKER_PLATFORMS: linux/amd64,linux/arm64
  115. EMQX_RUNNER: 'debian:11-slim'
  116. EMQX_DOCKERFILE: 'deploy/docker/Dockerfile'
  117. PKG_VSN: ${{ inputs.version }}
  118. EMQX_BUILDER_VSN: ${{ inputs.builder_vsn }}
  119. EMQX_OTP_VSN: ${{ inputs.otp_vsn }}
  120. EMQX_ELIXIR_VSN: ${{ inputs.elixir_vsn }}
  121. run: |
  122. ./build ${PROFILE} docker