ci: native multi-arch builds on ebpro-org/ebpro-org-arm (no QEMU) - #2
Open
emmanuelbruno wants to merge 2 commits into
Open
emmanuelbruno wants to merge 2 commits into
emmanuelbruno wants to merge 2 commits into
Conversation
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).
There was a problem hiding this comment.
🟡 Changes recommended
The workflow currently has invalid YAML in the steps: blocks (sequence indentation), which will prevent GitHub Actions from parsing/running the CI.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR updates the GitHub Actions CI workflow to build amd64 and arm64 images natively on dedicated self-hosted ARC scale sets (removing the previous cross-arch/emulation approach), then publishes a multi-arch manifest list in the registry using docker buildx imagetools.
Changes:
- Convert the
buildjob into a per-arch matrix running onebpro-org(amd64) andebpro-org-arm(arm64), tagging arch-specific images. - Add a
manifestjob that assembles and verifies the multi-arch manifest list from the two arch-specific images. - Add job timeouts and clarify intent with workflow comments.
File summaries
| File | Description |
|---|---|
.github/workflows/ci.yml |
Switch to native per-arch matrix builds and add a registry-side manifest assembly job. |
Review details
Suppressed comments (2)
.github/workflows/ci.yml:47
- Continuation of the YAML indentation issue in the
buildjob: the remaining steps (DockerHub login + image build) must also be indented understeps:. While touching this block, you can avoid re-running tests by using-DskipTests(since the earlierverifystep already ran them) and dropcleanto reuse the existing build outputs.
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and Push Image (native ${{ matrix.arch }})
.github/workflows/ci.yml:68
- The
manifestjob has the same YAML issue asbuild: thesteps:list items are not indented beneathsteps:. Also,docker buildx imagetoolsdepends on the Buildx plugin being available on the self-hosted runner; adding an explicit Buildx setup step makes this job more reliable. Finally, tagging/publishing:lateston pull_request runs can overwrite the canonicallatest; consider restrictinglatestto pushes to main.
steps:
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
- Files reviewed: 1/1 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+20
to
24
| arch: [amd64, arm64] | ||
| runs-on: ${{ matrix.arch == 'arm64' && 'ebpro-org-arm' || 'ebpro-org' }} | ||
| timeout-minutes: 30 | ||
|
|
||
| steps: |
…sembly) 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/<arch> per leg makes each tag a single-platform manifest; the imagetools job then assembles exactly 2 native children. Evidence: run 34213153103 registry inspection.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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).
PR run exercises the full chain (amd64 leg on ebpro-org, arm64 leg on ebpro-org-arm cold-start, manifest on ebpro-org). Note: the arm node is a dev VM — if it is down, the arm leg will queue without error (self-hosted labels have no GHA timeout).