name: Build and push docker images concurrency: group: docker-build-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true on: workflow_call: inputs: profile: required: true type: string version: required: true type: string latest: required: true type: string publish: required: true type: string otp_vsn: required: true type: string elixir_vsn: required: true type: string builder_vsn: required: true type: string runner_labels: required: true type: string secrets: DOCKER_HUB_USER: required: true DOCKER_HUB_TOKEN: required: true AWS_ACCESS_KEY_ID: required: true AWS_SECRET_ACCESS_KEY: required: true workflow_dispatch: inputs: ref: required: false profile: required: false type: string default: 'emqx' version: required: true latest: required: false type: boolean default: false publish: required: false type: boolean default: false otp_vsn: required: false type: string default: '25.3.2-2' elixir_vsn: required: false type: string default: '1.14.5' builder_vsn: required: false type: string default: '5.2-3' runner_labels: required: false type: string default: '["self-hosted","ephemeral","linux","x64"]' permissions: contents: read jobs: docker: runs-on: ${{ fromJSON(inputs.runner_labels) }} strategy: fail-fast: false matrix: profile: - ${{ inputs.profile }} - ${{ inputs.profile }}-elixir registry: - 'docker.io' - 'public.ecr.aws' exclude: - profile: emqx-enterprise registry: 'public.ecr.aws' - profile: emqx-enterprise-elixir registry: 'public.ecr.aws' steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.inputs.ref }} fetch-depth: 0 - uses: docker/setup-qemu-action@v2 - uses: docker/setup-buildx-action@v2 - name: Login to hub.docker.com uses: docker/login-action@v2 if: matrix.registry == 'docker.io' with: username: ${{ secrets.DOCKER_HUB_USER }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - name: Login to AWS ECR uses: docker/login-action@v2 if: matrix.registry == 'public.ecr.aws' with: registry: public.ecr.aws username: ${{ secrets.AWS_ACCESS_KEY_ID }} password: ${{ secrets.AWS_SECRET_ACCESS_KEY }} ecr: true - name: Build docker image env: PROFILE: ${{ matrix.profile }} DOCKER_REGISTRY: ${{ matrix.registry }} DOCKER_ORG: ${{ github.repository_owner }} DOCKER_LATEST: ${{ inputs.latest }} DOCKER_PUSH: ${{ inputs.publish == 'true' || inputs.publish || github.repository_owner != 'emqx' }} DOCKER_BUILD_NOCACHE: true DOCKER_PLATFORMS: linux/amd64,linux/arm64 EMQX_RUNNER: 'debian:11-slim' EMQX_DOCKERFILE: 'deploy/docker/Dockerfile' PKG_VSN: ${{ inputs.version }} EMQX_BUILDER_VSN: ${{ inputs.builder_vsn }} EMQX_OTP_VSN: ${{ inputs.otp_vsn }} EMQX_ELIXIR_VSN: ${{ inputs.elixir_vsn }} run: | ./build ${PROFILE} docker