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/[email protected]
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
src
anddst
registry, 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/[email protected]
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/[email protected]
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