Skip to content

ci: add gated arm64 (.deb) leg to citus community nightlies - #1198

Merged
ibrahim halatci (ihalatci) merged 3 commits into
developfrom
ihalatci-arm64-deb-packaging
Aug 12, 2026
Merged

ci: add gated arm64 (.deb) leg to citus community nightlies#1198
ibrahim halatci (ihalatci) merged 3 commits into
developfrom
ihalatci-arm64-deb-packaging

Conversation

@ihalatci

@ihalatci ibrahim halatci (ihalatci) commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

What & why

Track 2 of ARM64 support for Citus (citusdata/citus#8612). The Debian-based Citus Docker images install Citus via apt-get install ... =<pinned-version> from the packagecloud citusdata/community(-nightlies) apt repos. Those repos' arm64 index is currently empty (0 packages), so the Debian images cannot build for linux/arm64. This PR starts publishing arm64 .debs by adding a gated arm64 leg to the community-nightlies workflow.

Cross-repo dependencies

  • Add multi-arch (amd64+arm64) buildx support for alpine Docker image tools#414 replaces the single-architecture Docker SDK build path with buildx and adds gated alpine multi-arch support. It is coordinated with this PR, but its alpine path does not depend on arm64 .deb packages.
  • This PR starts populating the arm64 nightly package index required before the citusdata/docker Debian-image workflows can build arm64 variants. Arm64 release legs publishing to citusdata/community remain a follow-up and are required for release Docker tags such as latest and postgres-16/17/18.

The change (1 file, +25/−1, purely additive)

.github/workflows/build-citus-community-nightlies.yml:

  • Gated arch matrix dimension, default OFF:
    arch: ${{ fromJSON(vars.DEB_BUILD_MULTI_ARCH == 'true' && '["amd64", "arm64"]' || '["amd64"]') }}.
    When DEB_BUILD_MULTI_ARCH is unset/false["amd64"] only ⇒ the existing amd64 nightly is unchanged.
  • runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} — arm64 legs run on native ARM64 GitHub-hosted runners.
  • exclude: {platform: el/8, arch: arm64}el/8 is an RPM target; arm64 RPM parity is out of scope here.
  • Two if: matrix.arch == 'arm64' steps (before Build packages) that build the arm64 builder (citus/packaging-test:<distro>-all) and signer (citusdata/packaging:debsigner) images natively in-job, because only amd64 variants of those images are published to Docker Hub today. The build engine's docker run has no --platform flag and prefers a local image, so citus_package picks up these native arm64 images automatically; amd64 keeps pulling from Docker Hub.

No changes to the amd64 path, shared scripts (update_image, ci/push_images), the deb entrypoint, the upload script, or the citusdata/tools build engine. Version strings are identical by construction (same pkgvars + same engine), satisfying the Docker images' exact-version pins.

Safety / gating

  • Default OFF. Without the DEB_BUILD_MULTI_ARCH repo variable set to true, this is a no-op for the existing pipeline.
  • Publish is still branch-gated. upload_to_package_cloud only publishes when the current branch == the workflow's main_branch, so this feature branch never publishes.
  • Validated with actionlint (clean) and a YAML parse.

Scope

  • Deb-only. Produces arm64 citus nightlies → citusdata/community-nightlies across debian bullseye/bookworm/trixie and ubuntu jammy/noble (PG majors fan out inside each -all build).

Follow-ups (not in this PR)

  • arm64 release legs on all-citus / debian-hll / debian-topn (build-package.yml, --build_type releasecitusdata/community) — on the critical path for the release Docker images (latest, postgres-16/17/18); also needs the release path's amd64-jq hardcode made arch-aware.
  • Publish multi-arch builder/signer images via buildx (gated) so nightly + release legs skip the per-run in-job image build.
  • RPM arm64 parity (separate effort).

Open questions

  • Confirm GitHub-hosted ubuntu-24.04-arm runners are enabled for the citusdata org (assumed GA/free for public repos).
  • Per-nightly cost: the arm64 -all builder image is rebuilt each run (cmake + pyenv compile, native arm64) until multi-arch images are published.

Adds an optional arm64 build+publish leg to the community-nightlies
workflow, gated behind the DEB_BUILD_MULTI_ARCH repo variable (default
OFF, so the existing amd64 pipeline is byte-for-byte unchanged). This
unblocks ARM64 Debian Citus Docker images (citusdata/citus#8612), which
install Citus from the packagecloud citusdata/community(-nightlies) apt
repos whose arm64 index is currently empty.

- arm64 legs run on native ubuntu-24.04-arm runners; el/8 (RPM) excluded
- builder (citus/packaging-test:<distro>-all) and signer
  (citusdata/packaging:debsigner) images are built natively in-job since
  only amd64 variants are published to Docker Hub today; docker run has
  no --platform and prefers local images, so citus_package uses them
- no changes to the amd64 path, shared scripts, or the build engine

Deb-only; arm64 release legs, published multi-arch images, and RPM
arm64 parity are follow-ups.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 21828aca-24f9-441b-8e36-981b7666b5c0
Resolve conflict in build-citus-community-nightlies.yml: drop the dead GH_TOKEN secret shadow, keep the create-github-app-token mint/export steps, add develop's ubuntu/resolute platform, and preserve the gated arm64 (.deb) legs (arch matrix, exclude, arm64 builder/debsigner steps). Tools pin stays v0.8.37.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

- name: Build arm64 debsigner image
if: matrix.arch == 'arm64'
run: docker build -t citusdata/packaging:debsigner -f dockerfiles/debsigner/Dockerfile .

Choose a reason for hiding this comment

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

One follow-up suggestion: update the Dockerfile to use a newer base image instead of Xenial, which is outdated and unsupported. Not a blocker for this PR.

@ihalatci
ibrahim halatci (ihalatci) merged commit d964b4d into develop Aug 12, 2026
80 checks passed
@ihalatci
ibrahim halatci (ihalatci) deleted the ihalatci-arm64-deb-packaging branch August 12, 2026 11:46
ibrahim halatci (ihalatci) added a commit that referenced this pull request Sep 1, 2026
…1206)

Adds a gated arm64 .deb release leg so arm64 hll packages publish to
citusdata/community (the apt index feeding the stable Debian Citus
images). Mirrors the merged nightly pattern (#1198) and the all-citus
release leg (#1205).

Everything arm64 is behind the DEB_BUILD_MULTI_ARCH repo variable
(default OFF): with the gate unset the matrix stays amd64-only and the
existing release pipeline is byte-for-byte unchanged. When the gate is
on, arm64 runs on native ubuntu-24.04-arm runners and builds the
builder + debsigner images in-job by cloning develop's tooling (this
branch carries none). citus_package's docker run has no --platform flag
and prefers a local image, so the native arm64 images are used
automatically; amd64 keeps pulling the published images from Docker Hub.

The matrix is deb-only so no RPM exclude block is needed. One file
touched; no changes to debian/control.in (already Architecture: any),
the deb entrypoint, or the upload script -> version strings are
identical to amd64 by construction.

Requires the develop jq fix (#1204) merged first for the arm64 builder
images to build. Nothing runs until #1204 lands and the gate is flipped.

Part of Track 2 of citusdata/citus#8612 (ARM64 Debian Docker images).

Co-authored-by: Ibrahim Halatci <ihalatci@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0259dd2c-9208-48f9-a8c2-8031dca8ab75
ibrahim halatci (ihalatci) added a commit that referenced this pull request Sep 1, 2026
…1207)

Adds a gated arm64 .deb release leg so arm64 topn packages publish to
citusdata/community (the apt index feeding the stable Debian Citus
images). Mirrors the merged nightly pattern (#1198) and the all-citus
release leg (#1205).

Everything arm64 is behind the DEB_BUILD_MULTI_ARCH repo variable
(default OFF): with the gate unset the matrix stays amd64-only and the
existing release pipeline is byte-for-byte unchanged. When the gate is
on, arm64 runs on native ubuntu-24.04-arm runners and builds the
builder + debsigner images in-job by cloning develop's tooling (this
branch carries none). citus_package's docker run has no --platform flag
and prefers a local image, so the native arm64 images are used
automatically; amd64 keeps pulling the published images from Docker Hub.

The matrix is deb-only so no RPM exclude block is needed. One file
touched; no changes to debian/control.in (already Architecture: any),
the deb entrypoint, or the upload script -> version strings are
identical to amd64 by construction.

Requires the develop jq fix (#1204) merged first for the arm64 builder
images to build. Nothing runs until #1204 lands and the gate is flipped.

Part of Track 2 of citusdata/citus#8612 (ARM64 Debian Docker images).

Co-authored-by: Ibrahim Halatci <ihalatci@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0259dd2c-9208-48f9-a8c2-8031dca8ab75
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