This is an example repository to demonstrate Multi-Platform/Multi-arch container builds in GitHub actions to ghcr.io registry.
Create .github/workflows/main.yml
file.
Fill and change yml file with your properties.
In this example, github actions is triggered on master branch publish and builds container image with linux/amd64,linux/arm/v7,linux/arm64 platforms.
name: Build and publish container
on:
push:
branches: [master]
workflow_dispatch:
inputs:
reason:
description: 'Why ?'
required: false
default: ''
jobs:
ghr_push:
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- name: checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Log-in to ghcr.io
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build and push container image
run: |
IMAGE_ID=$(echo ghcr.io/${{ github.repository }} | tr '[A-Z]' '[a-z]')
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# Strip "v" prefix from tag name
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# when the branch is master, replace master with latest
[ "$VERSION" == "master" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
# Build and Publish container image
docker buildx build --push \
--tag $IMAGE_ID:$VERSION \
--platform linux/amd64,linux/arm/v7,linux/arm64 .
First method to linking repository with the containers is LABEL option in Dockerfile.
Create a LABEL
instruction in Dockerfile
to link package to source.
LABEL org.opencontainers.image.source="https://github.com/{Your username}/{your repository name}"
# Example
LABEL org.opencontainers.image.source="https://github.com/ahmetozer/github-actions-multi-arch-container-ghcr.io"
NOTE: If your Dockerfile
has a multi stage, add LABEL
after latest FROM
option.
You can also connect repository to container package from github web.
Open https://github.com/users/{username}/packages/container/package/{repo-name}
on your browser.
End of the page, you will see repository connect setting, clink to 'Connect Repository' button and select your repository.
By default, packages are private. To allow public access, change visibility of the package from private to public on https://github.com/users/{username}/packages/container/{repo-name}/settings page.