Skip to content

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

Draft
ihalatci wants to merge 1 commit into
developfrom
ihalatci-arm64-deb-packaging
Draft

ci: add gated arm64 (.deb) leg to citus community nightlies#1198
ihalatci wants to merge 1 commit into
developfrom
ihalatci-arm64-deb-packaging

Conversation

@ihalatci

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.

Sibling/coordination PR (Track 1, docker multi-arch rails): citusdata/tools#414 — same gated-OFF-by-default pattern.

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.

🚧 Draft — awaiting operator review. Do not merge / mark ready yet.

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

2 participants