Skip to content

feat: build all images for ppc64le and s390x, in alignment with upstream Argo CD #2348

Description

@dronenb

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions