knative / knative/func

Make Quarkus default builder image multi-arch (follow-up to #3515/#3665)

Open
#3,781 8 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

kind/bug
Dominant language
Go
Stars
365
Forks
223
Avg merge
2d 3h
Merged PRs (30d)
25

Description

Background

#3665 (merged 2026-05-09) fixed the immediate symptom of #3515 — remote Quarkus builds failing on s390x/ppc64le clusters — but the root cause remained: DefaultBuilderImages["quarkus"] is hardcoded to gcr.io/paketo-buildpacks/builder:base, which only ships an amd64 manifest. Without a regression test, an equivalent issue can recur silently the next time a non-amd64 architecture surfaces.

Analysis (credit @dikshant182004)

When a non-amd64 cluster (s390x, ppc64le) selects the current Quarkus default builder, the OS attempts to execute an amd64 binary on a non-amd64 chip and immediately throws exec format error. The DefaultBuilderImages map in pkg/buildpacks/ selects the builder image purely by language, with no platform awareness.

Proposed solution

  1. Swap the Quarkus default builder to a multi-arch image (amd64, s390x, ppc64le, arm64).

    DefaultBuilderImages = map[string]string{
        // ...
        "quarkus": "paketobuildpacks/builder-ubi8-base", // candidate — multi-arch UBI
    }
    

    Open question: paketobuildpacks/builder-ubi8-base vs an internal quay.io/boson/... image. I'll surface this with the team and follow up before implementation starts.

  2. Architecture-mismatch warning in BuilderImage() — if a user has manually pinned an amd64-only builder in their func.yaml and tries to build on s390x/ppc64le, emit a clear actionable error instead of the raw exec format error.

  3. Regression test for builder-image selection on non-amd64 platforms so this can't recur silently.

Verification

Should be verified end-to-end on an actual s390x or ppc64le cluster. Hardware-access question is open with @Itx-Psycho0 / @dikshant182004; if neither has access I'll arrange something on our side.

Related

  • #3515 — original report (closed by #3665, partial workaround)
  • #3665 — the targeted fix that closed #3515

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the DefaultBuilderImages map in pkg/buildpacks/ and the BuilderImage() entry point. Confirm the multi-arch builder choice with the team, then add the selection regression test and architecture-mismatch handling; done includes end-to-end verification on s390x or ppc64le.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
build-system, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.