Github action to retag and push multiplatform images to multiple registries
💡 See also:
- login action
 - docker-meta action
 
The v1 version of this action heavily relied on work done by @tonistiigi.
The current version uses crane from google for copying images, and the action itself is a modified version of script written by @crazymax
name: Push-Image
on: push
jobs:
  push-image:
    runs-on: ubuntu-latest
    steps:
      - name: Login Quay
        uses: docker/login-action@v1
        with:
          registry: 'quay.io'
          username: ${{ secrets.QUAY_USERNAME }}
          password: ${{ secrets.QUAY_TOKEN }}
      - name: Login Dockerhub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Push image
        uses: akhilerm/tag-push-action@v2.1.0
        with:
          src: docker.io/akhilerm/node-disk-manager:ci
          dst: |
            quay.io/akhilerm/node-disk-manager-amd64:ci- 
Login to all the registries from which you want to pull and push the multiplatform image.
 - 
Specify the
srcanddstregistry, both of which are mandatory fields. The action allows multiple destination registries specified as a yaml string. 
NOTE: If dockerhub is used, make sure that docker.io is specified in the image name
The action can be used alongside metadata-action to generate tags easily.
name: Push-Image
on: push
jobs:
  push-image:
    runs-on: ubuntu-latest
    steps:
      - name: Login Dockerhub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v3
        with:
          images: docker.io/akhilerm/node-disk-manager     
      - name: Push image
        uses: akhilerm/tag-push-action@v2.1.0
        with:
          src: docker.io/akhilerm/node-disk-manager:ci
          dst: |
            ${{ steps.meta.outputs.tags }}The output tags from the meta step can be used as destination tags for this github action.
The standard docker config path on GitHub runner is /home/runner/.docker/config.json. In case you're running on a custom GitHub runner, and your config path is not standard, then the docker-config-path can be used.
  - name: Push image
    uses: akhilerm/tag-push-action@v2.1.0
    with:
      docker-config-path: /home/myuser/.docker/config.json
      src: docker.io/akhilerm/node-disk-manager:ci
      dst: |
        quay.io/akhilerm/node-disk-manager-amd64:ci