Is your feature request related to a problem? Please describe.
Upstream Argo CD ships container images for amd64, arm64, ppc64le, and s390x, but the argocd-operator only builds its images for amd64, with arm64 in progress - #2341. That PR added buildx support for the operator, bundle, registry, and util images, but explicitly dropped ppc64le/s390x from the platform list. As a result, the operator cannot be deployed on Power (ppc64le), IBM Z, or LinuxONE (s390x) even though the Argo CD it manages supports those architectures.
Describe the solution you'd like
Support ppc64le and s390x for all image builds, in alignment with the architectures supported by upstream Argo CD:
| Image |
Current arch |
Work required for ppc64le/s390x |
operator (Dockerfile, distroless/static) |
amd64, arm64 |
Cross-compile the Go binary — minimal work |
bundle (bundle.Dockerfile) |
amd64, arm64 |
Minimal, no per-arch binaries |
registry/catalog (FBC, deploy/registry) |
amd64, arm64 |
Requires opm binaries compiled for ppc64le/s390x |
util (build/util/Dockerfile) |
amd64, arm64 |
Hardest — see below |
Extend the buildx --platform list to linux/amd64,linux/arm64,linux/ppc64le,linux/s390x for each of the util-build, bundle-build, registry-build, and catalog-build targets, and add the architectures to the publish workflow added in #2341.
Util image is the hardest part. The cloud provider CLIs installed by build/util/Dockerfile are not distributed for ppc64le or s390x:
- AWS CLI v2 bundles its own Python and only ships an x86_64 installer.
- Azure CLI and the Google Cloud SDK similarly lack native packages for ppc64le/s390x.
To close this gap we can provide our own Python for the appropriate architecture — either building a Python interpreter from source for ppc64le/s390x, or copying a compiled Python from another image that already ships one for those architectures (e.g. a multi-stage build) — and install the CLIs from sources that support those architectures (pip-installed awscli, PIP-based or otherwise platform-independent installers for azure/gcloud) instead of the native installers.
Describe alternatives you've considered
- Ship a util image for ppc64le/s390x without the cloud provider CLIs. This avoids the packaging problem but leaves a functionality gap in backup flows on those platforms.
- Keep util x86_64/arm64-only and limit ppc64le/s390x to the operator, bundle, and registry/catalog images.
Additional context
- Related code:
build/util/Dockerfile, Dockerfile, bundle.Dockerfile, deploy/registry, and the util-build / bundle-build / registry-build / catalog-build targets in Makefile.
- Multi-arch publishing workflow added in #2341 (
.github/workflows/publish.yaml).
Is your feature request related to a problem? Please describe.
Upstream Argo CD ships container images for amd64, arm64, ppc64le, and s390x, but the argocd-operator only builds its images for amd64, with arm64 in progress - #2341. That PR added buildx support for the operator, bundle, registry, and util images, but explicitly dropped
ppc64le/s390xfrom the platform list. As a result, the operator cannot be deployed on Power (ppc64le), IBM Z, or LinuxONE (s390x) even though the Argo CD it manages supports those architectures.Describe the solution you'd like
Support ppc64le and s390x for all image builds, in alignment with the architectures supported by upstream Argo CD:
Dockerfile, distroless/static)bundle.Dockerfile)deploy/registry)opmbinaries compiled for ppc64le/s390xbuild/util/Dockerfile)Extend the buildx
--platformlist tolinux/amd64,linux/arm64,linux/ppc64le,linux/s390xfor each of theutil-build,bundle-build,registry-build, andcatalog-buildtargets, and add the architectures to the publish workflow added in #2341.Util image is the hardest part. The cloud provider CLIs installed by
build/util/Dockerfileare not distributed for ppc64le or s390x:To close this gap we can provide our own Python for the appropriate architecture — either building a Python interpreter from source for ppc64le/s390x, or copying a compiled Python from another image that already ships one for those architectures (e.g. a multi-stage build) — and install the CLIs from sources that support those architectures (pip-installed
awscli, PIP-based or otherwise platform-independent installers for azure/gcloud) instead of the native installers.Describe alternatives you've considered
Additional context
build/util/Dockerfile,Dockerfile,bundle.Dockerfile,deploy/registry, and theutil-build/bundle-build/registry-build/catalog-buildtargets inMakefile..github/workflows/publish.yaml).