-
Notifications
You must be signed in to change notification settings - Fork 639
Description
Troubleshooting
Before submitting a bug report please read the Troubleshooting doc.
✅ went through the doc
Behaviour
I am building the same image on different runners:
runs-on: ${{ matrix.builder }}
strategy:
matrix:
include:
- builder: ubuntu-latest
platform: linux/amd64
- builder: buildjet-8vcpu-ubuntu-2204-arm
platform: linux/arm64
reason for multiple runners is that QEMU emulation cant compile clang-tidy
on-time with regular ubuntu-latest
runners and the job times out after 6 hours.
Docker build section does include which platform it is building:
- name: Build and Push Docker Image
uses: docker/build-push-action@v2
with:
...
platforms: ${{ matrix.platform }}
...
Each runner then builds its own platform
and pushes to github container registry. However the final image when you pull from github container registry is always for a single architecture and does not have any manifests:
➜ docker buildx imagetools inspect ghcr.io/crashappsec/clang-tidy:14.0.6
Name: ghcr.io/crashappsec/clang-tidy:14.0.6
MediaType: application/vnd.docker.distribution.manifest.v2+json
Digest: sha256:bcd9f4a8a798f758d9a908b2541f437473f842346293ec4c95ced40105265d2c
What is the correct way to build multi-platform image on different runners. I dont see any appropriate flag for that in the README
Steps to reproduce this issue
- build and push image from different runners each
- check the package if its multi-platform
Expected behaviour
Final github package should be multi-platform
Actual behaviour
In my case since ARM build takes longer its the last push and the final image is ARM-only.
Configuration
- Repository URL (if public): https://github.com/crashappsec/docker-clang-tidy
- Build URL (if public): https://github.com/crashappsec/docker-clang-tidy/actions/runs/2847260456
- Workflow: https://github.com/crashappsec/docker-clang-tidy/blob/9ac0b75796fec6b0a4531002f6b91c9107542e75/.github/workflows/release.yml
name: docker image
on:
workflow_dispatch:
inputs:
CLANG_TIDY_VERSION:
description: "clang-tidy version"
required: true
default: "14.0.6"
type: string
jobs:
release:
runs-on: ${{ matrix.builder }}
strategy:
matrix:
include:
- builder: ubuntu-latest
platform: linux/amd64
- builder: buildjet-8vcpu-ubuntu-2204-arm
platform: linux/arm64
steps:
- name: Checkout Code
uses: actions/checkout@v1
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v2
with:
file: Dockerfile
push: true
platforms: ${{ matrix.platform }}
build-args: |
CLANG_TIDY_VERSION=${{ inputs.CLANG_TIDY_VERSION }}
tags: |
ghcr.io/${{ github.repository_owner }}/clang-tidy:latest
ghcr.io/${{ github.repository_owner }}/clang-tidy:${{ inputs.CLANG_TIDY_VERSION }}