Add arm64 builds to all Linux release packages and PPA#2430
Conversation
- Fix CMakeLists.txt to detect arm64 Linux and name embeddable archive ubuntu-arm64 - Fix CPackRPM.cmake to auto-detect aarch64 architecture for RPM packaging - Add build-lemonade-debian13-arm64 + smoke test job (Debian 13 .deb on ARM64) - Add build-lemonade-rpm-arm64 + test job (Fedora 43/44 .rpm on aarch64) - Add build-lemonade-embeddable-linux-arm64 job (portable archive for Linux ARM64) - Include all arm64 packages in the GitHub release job - Add ubuntu-arm64 entry to test-embeddable-posix matrix - Add package-arm64 job to launchpad-ppa.yml for PR binary verification on ARM64 - Update build-container.yml to build multi-arch (amd64+arm64) Docker images Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EQ7ke6n2tMDgNfxg125ieZ
Matches the (ARM64) suffix added to new arm64 build jobs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EQ7ke6n2tMDgNfxg125ieZ
All paired Linux artifacts now use -x86_64 / -arm64 suffixes: - lemonade-debian13 → lemonade-debian13-x86_64 - lemonade-rpm-fedora-$N → lemonade-rpm-fedora-$N-x86_64 - lemonade-rpm-arm64-fedora-$N → lemonade-rpm-fedora-$N-arm64 - lemonade-embeddable-linux → lemonade-embeddable-linux-x86_64 Download patterns in the release job updated accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EQ7ke6n2tMDgNfxg125ieZ
There was a problem hiding this comment.
Pull request overview
This PR expands Lemonade’s Linux release pipeline to produce and validate ARM64 artifacts across packaging formats (.deb, .rpm, and embeddable archives), and updates supporting infrastructure (PPA PR verification and container builds) to be multi-arch.
Changes:
- Add ARM64-aware architecture/platform detection for RPM packaging and embeddable archive naming.
- Add new ARM64 GitHub Actions jobs to build + smoke test Debian 13 ARM64 .debs, Fedora aarch64 .rpms, and Linux ARM64 embeddable archives; include ARM64 artifacts in the release job and embeddable test matrix.
- Enable multi-arch (amd64+arm64) Docker image publishing for the build environment and add an ARM64 PR verification job to the Launchpad PPA workflow.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
src/cpp/CPackRPM.cmake |
Detect ARM64 and set RPM architecture to aarch64 for correct RPM naming/output. |
CMakeLists.txt |
Detect ARM64 on Linux and name embeddable archives ubuntu-arm64 accordingly. |
.github/workflows/launchpad-ppa.yml |
Add ARM64 PR-only binary package build job using the build-environment container. |
.github/workflows/cpp_server_build_test_release.yml |
Add ARM64 build/test jobs for Debian/RPM/embeddable artifacts and include them in release + test matrices. |
.github/workflows/build-container.yml |
Build/push multi-arch build-environment images by enabling QEMU and setting platforms. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| strategy: | ||
| matrix: ${{ fromJSON(needs.prepare-matrix.outputs.package_matrix) }} | ||
| container: | ||
| image: ghcr.io/lemonade-sdk/lemonade/build-environment:${{ matrix.distro }}${{ matrix.release }} |
There was a problem hiding this comment.
blocking: The new ARM64 PPA verification job currently cannot start because it consumes the image noted above on an ARM64 runner, but the referenced images do not yet have linux/arm64/v8 manifests. The current CI failure is already at container initialization (no matching manifest for linux/arm64/v8), before any package build runs.
Since build-container.yml only runs on schedule / workflow_dispatch, this PR does not publish the new multi-arch build-environment images before launchpad-ppa.yml tries to consume them. Please either publish/split the multi-arch build-environment image change first, gate package-arm64 until the ARM64 manifests exist, or add a PR-safe fallback path.
There was a problem hiding this comment.
Fixed in 8960f51. Rather than dropping the container entirely (which would limit us to noble), I switched to the official ubuntu:${{ matrix.release }} images from Docker Hub — those are natively multi-arch (arm64 supported for 24.04, 25.10, and 26.04) so the full matrix is preserved. Added an inline dep-install step since the stock Ubuntu images lack the pre-installed build tools that the custom build-environment provides.
Once build-container.yml runs post-merge to publish the multi-arch images, we can revert the container reference back to the custom build-environment.
The custom build-environment images don't yet have linux/arm64 manifests.
build-container.yml was updated in this PR to build multi-arch images,
but it only runs on schedule/dispatch, so GHCR images still lack ARM64
support — causing container initialization to fail.
Fix by switching to the official ubuntu:${{ matrix.release }} images
from Docker Hub, which are natively multi-arch (arm64 supported for
24.04, 25.10, and 26.04). Add an inline dep-install step since the
stock Ubuntu images lack the pre-installed build tools that the custom
build-environment provides. The full matrix (noble, questing, resolute)
is preserved.
Once build-container.yml runs post-merge to publish multi-arch images,
the container reference can be reverted to the custom build-environment.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01EQ7ke6n2tMDgNfxg125ieZ