From 83230d381f90827a15c76f8b01cc2e71c003bd58 Mon Sep 17 00:00:00 2001 From: Emmanuel Bruno Date: Tue, 8 Sep 2026 12:00:20 +0200 Subject: [PATCH 1/2] ci: native multi-arch builds on ebpro-org/ebpro-org-arm (no QEMU) Replaces the jib cross-platform build (the arm64 leg was emulated on the x64 runner and made runs slow enough to be cancelled). The matrix builds each arch natively on its dedicated ARC scale set (amd64 -> ebpro-org, arm64 -> ebpro-org-arm), so tests run on both architectures. The multi-arch manifest list is assembled registry-side with docker buildx imagetools (no QEMU/binfmt anywhere). Scale sets deployed via the gitops repo (commit cab05e9). --- .github/workflows/ci.yml | 42 ++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c862eda..a31a503 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,10 +10,16 @@ on: jobs: build: - # To run of Github-hosted runners, uncomment the line below and comment out the self-hosted runner line. - # runs-on: ubuntu-latest - # Use a self-hosted runner to ensure the necessary environment like sonarqube. - runs-on: self-hosted + # Native per-arch builds on dedicated ARC scale sets (no QEMU/binfmt): + # amd64 -> ebpro-org (x64 node), arm64 -> ebpro-org-arm (arm64 node). + # Each leg builds its own platform natively; the manifest job assembles + # the multi-arch manifest list registry-side (docker buildx imagetools). + strategy: + fail-fast: false + matrix: + arch: [amd64, arm64] + runs-on: ${{ matrix.arch == 'arm64' && 'ebpro-org-arm' || 'ebpro-org' }} + timeout-minutes: 30 steps: - uses: actions/checkout@v4 @@ -38,7 +44,7 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and Push Multi-arch Image + - name: Build and Push Image (native ${{ matrix.arch }}) run: | # Get the timestamp of the latest commit TIMESTAMP=$(git log -1 --format=%cI) @@ -46,7 +52,31 @@ jobs: -Pjvm \ -Dquarkus.container-image.push=true \ -Dquarkus.container-image.registry=docker.io \ - -Dquarkus.jib.platforms=linux/amd64,linux/arm64 + -Dquarkus.container-image.tag=${GITHUB_SHA}-${{ matrix.arch }} + + manifest: + # Assemble the multi-arch manifest list registry-side: no image is pulled + # or re-pushed locally, so this works on any arch and needs no QEMU. + needs: build + runs-on: ebpro-org + timeout-minutes: 10 + + steps: + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Create multi-arch manifest + run: | + docker buildx imagetools create \ + -t docker.io/brunoe/product-catalog:${GITHUB_SHA} \ + -t docker.io/brunoe/product-catalog:latest \ + docker.io/brunoe/product-catalog:${GITHUB_SHA}-amd64 \ + docker.io/brunoe/product-catalog:${GITHUB_SHA}-arm64 + - name: Verify manifest + run: | + docker buildx imagetools inspect docker.io/brunoe/product-catalog:${GITHUB_SHA} deploy-docs: runs-on: ubuntu-latest From 222d504b7a34c872ab605a588c6fa5d948e5327f Mon Sep 17 00:00:00 2001 From: Emmanuel Bruno Date: Tue, 8 Sep 2026 12:22:34 +0200 Subject: [PATCH 2/2] ci: pin jib platform per arch (single-platform manifests, no cross-assembly) quarkus.jib.platforms defaults to linux/amd64,linux/arm64 in the Quarkus jib extension, so each leg previously pushed a 2-arch manifest list (final list: 4 children, duplicated platforms, native arm64 child shadowed on pull). Pinning linux/ per leg makes each tag a single-platform manifest; the imagetools job then assembles exactly 2 native children. Evidence: run 34213153103 registry inspection. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a31a503..77150ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,7 @@ jobs: -Pjvm \ -Dquarkus.container-image.push=true \ -Dquarkus.container-image.registry=docker.io \ + -Dquarkus.jib.platforms=linux/${{ matrix.arch }} \ -Dquarkus.container-image.tag=${GITHUB_SHA}-${{ matrix.arch }} manifest: