In the blog I will present you a ready-to-use Github action workflow to push container images to the image registry. In modern software development, we depend on container images a lot. As Github now has its own container image registry – ghcr.io too, it becomes easy to build and push images directly to a registry within a single workflow.
Github Action Workflow
Below you see the ready-to-use Github action workflow to push your container image to the Github container registry ghcr.io:
name: Build and publish the container image
"on":
push:
tags:
- '*'
branches:
- 'main'
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
-
name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
-
name: Get tag
id: repository
run: echo "tag=$(git describe --tags HEAD)" > $GITHUB_ENV
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/${{ github.repository }}:${{ env.tag }}
As you can see, it will work on any repository. If you have a git repository for a container image, just add this workflow.
- it pushes into the container registry corresponding with the repository
- it uses
git describe --tags HEAD
to generate a semver tag for the image - it builds a multi-architecture image for amd64 and arm64
- it runs on every push to the main branch, or tag of a commit
Pretty neat, huh?
install the workflow
To install the workflow, type the following commands:
# add the workflow
$ mkdir -p .github/workflows/
$ curl -sS -L -o .github/workflows/push-to-registry.yaml
https://raw.githubusercontent.com/binxio/push-to-registry-gh-action-workflow/main/.github/workflows/push-to-registry.yaml
$ git add .
$ git commit -m 'added push to ghcr.io workflow'
To make a beautiful semantic version release of your image, type:
$ read NEW_SEMVER
$ git tag $NEW_SEMVER
$ git push --tags
$ git push
Checkout the resulting Github action workflow!
Conclusion
With the availability of the Github container image registry, this simple ready-to-use workflow make Github a one-stop-shop to build and distribute your container images!
Photo by Jakob Owens on Unsplash