Skip to content

ci(pipecat-base): build for amd64 as well as arm64 (PCC-1081) - #103

Merged
mattshep merged 3 commits into
mainfrom
pcc-1081
Aug 11, 2026
Merged

ci(pipecat-base): build for amd64 as well as arm64 (PCC-1081)#103
mattshep merged 3 commits into
mainfrom
pcc-1081

Conversation

@mattshep

Copy link
Copy Markdown
Contributor

Every customer bot image is built FROM dailyco/pipecat-base:<version>, and this image is published linux/arm64 only. So an amd64 customer cannot produce a runnable bot at all — and that applies to any framework user on amd64 hardware, not only on-prem regions. Part of PCC-1081.

Arguably the sharper of the two arm64-only images, since it is customer-facing and affects people who have nothing to do with Pipecat Cloud.

The change

platforms: linux/amd64,linux/arm64, and this is the cheap direction. The runner is amd64, so the added leg is the native one; the emulated arm64 build is already being paid for today. Buildx builds platforms in parallel, so wall-clock barely moves — the ticket's open question about QEMU cost for a Python image is largely moot, because we are not adding the emulated side.

Worth noting there is no setup-qemu step here and never was: docker/setup-buildx-action uses the docker-container driver, whose BuildKit image ships the QEMU emulators. That is why arm64 already builds.

sbom: true switches SBOM generation to BuildKit's per-platform attestations, attached to the index as referring artifacts. Anything scanning the pushed digest afterwards sees the index and describes only whichever single platform it resolves.

Regression guard

A step after the push asserts the index really contains both platforms, so a single-arch base cannot land again silently. It filters unknown/unknown entries, which is necessary precisely because SBOM attestations add non-platform manifests to the index. Skipped on pull requests, where nothing is pushed.

Note on existing tags

Tags published before this stay single-arch — latest included, until the next build. Worth deciding whether any published version needs backfilling or whether multi-arch simply starts here.

Related

daily-co/pipecat-cloud-operator#244 does the same for the operator image. Both are needed for the ticket's acceptance: an on-prem region running a session on an amd64 node pool.

Every customer bot image is built FROM dailyco/pipecat-base, so an arm64-only base means an amd64 customer cannot produce a runnable bot at all - and that applies to any framework user on amd64 hardware, not just on-prem regions.

The runner is amd64, so the added leg is native and buildx builds both in parallel; the emulated arm64 build was already being paid for here. SBOM generation moves to BuildKit's per-platform attestations, since scanning the pushed index afterwards would describe only whichever platform resolved. A guard after the push asserts the index really contains both platforms.
@linear

linear Bot commented Aug 11, 2026

Copy link
Copy Markdown

PCC-1081

The comment claimed the runner was amd64 and that arm64 was the emulated
leg. It is the other way round - runs-on is ubuntu-24.04-arm, so arm64
is native and amd64 is the leg being added.

Note the measured cost while here: both platforms build in ~2 minutes,
because nothing in this image is compiled from source and the only
emulated work is the apt install. Unlike the operator, there is nothing
to gain from a $BUILDPLATFORM cross-compile here.

PCC-1081

@markbackman markbackman left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just one nit.

Comment thread .github/workflows/docker-publish.yml Outdated
platforms: linux/arm64
# Every customer bot is built FROM this image, so an arm64-only base
# means an amd64 customer cannot produce a runnable bot at all
# (PCC-1081). This runner is arm64, so arm64 is the native leg and

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the Linear task number from the comment?

Suggested change
# (PCC-1081). This runner is arm64, so arm64 is the native leg and
# . This runner is arm64, so arm64 is the native leg and

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 904b6de — reflowed the sentence rather than applying the suggestion verbatim, since that would have left a stray # . opening the line.

Flagging one thing rather than deciding it: this repo is public and already carries several of these in pipecat-base — PCC-989, PCC-1038, PCC-1066 (a couple in docstrings). So this change departs from the existing convention rather than restoring it. Happy either way; if the intent is that internal IDs stay out of a public repo, those are the other instances.

Review nit on #103: keep the internal Linear reference out of the
comment. Reflowed rather than applying the suggestion verbatim, which
would have left a stray "# ." at the start of the sentence.

Note this repo is public and already carries several PCC-NNNN
references in pipecat-base (PCC-989, PCC-1038, PCC-1066), so this
departs from the existing convention rather than restoring it.
@mattshep
mattshep merged commit 037bb2c into main Aug 11, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants