Skip to content

ci: add gated arm64 (.deb) release leg to all-citus (citus -> citusdata/community) - #1205

Merged
ibrahim halatci (ihalatci) merged 1 commit into
all-citusfrom
ihalatci-arm64-deb-release-all-citus
Sep 1, 2026
Merged

ci: add gated arm64 (.deb) release leg to all-citus (citus -> citusdata/community)#1205
ibrahim halatci (ihalatci) merged 1 commit into
all-citusfrom
ihalatci-arm64-deb-release-all-citus

Conversation

@ihalatci

Copy link
Copy Markdown
Contributor

What / why

Adds a gated arm64 .deb release leg to the all-citus release build+publish workflow so
arm64 citus packages land in citusdata/community — the apt index that feeds the stable
Debian Citus Docker images (postgres-16/17/18, latest). This is the release counterpart to the
merged nightly leg #1198 (which only feeds community-nightlies).

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

The gate (amd64 unchanged)

Everything arm64 is behind the DEB_BUILD_MULTI_ARCH repo variable, default OFF:

arch: ${{ fromJSON(vars.DEB_BUILD_MULTI_ARCH == 'true' && '["amd64", "arm64"]' || '["amd64"]') }}
  • Gate OFF (default): arch = ["amd64"] → the matrix is platform × ["amd64"], every leg runs
    on ubuntu-latest, and all if: matrix.arch == 'arm64' steps are skipped. The existing amd64
    release pipeline is byte-for-byte unchanged.
  • Gate ON: arm64 is added for the deb distros only (RPM el/8, el/9, ol/8, ol/9 are
    excluded — arm64 RPM parity is out of scope), running on native ubuntu-24.04-arm runners.
  • Publish is doubly safe: upload_to_package_cloud only publishes when current_branch == all-citus.

How the arm64 leg builds (Option B — in-job image build)

The release workflow runs from the all-citus branch, which carries no build tooling
(update_image, dockerfiles/, scripts/). Rather than touch develop's shared amd64
image-publish path, the arm64 leg builds its builder + signer images in-job by cloning
develop's tooling:

  • TEST=false ./update_image → builds citus/packaging:<distro>-all natively on arm64.
  • docker build … dockerfiles/debsigner/Dockerfile → builds citusdata/packaging:debsigner.

citus_package's docker run has no --platform flag and prefers a local image, so the
native arm64 images are picked up automatically. amd64 keeps pulling the published images from
Docker Hub (the Docker Hub login step is itself gated to arm64, so amd64 is untouched).

Scope (surgical)

One file: .github/workflows/build-package.yml (+41 / −1). No changes to debian/control.in
(already Architecture: any), the deb entrypoint, or the upload script → version strings are
identical to amd64 by construction (14.1.0.citus-1, …), satisfying the Docker exact-version pins.

Prerequisite

Requires the develop jq fix #1204 to be merged first — the arm64 builder
images are cloned from develop, and the amd64-only jq-linux64 binary hard-fails on arm64 in the
release path. Nothing here runs until both #1204 is merged and the operator flips
DEB_BUILD_MULTI_ARCH on.

Guardrails

  • Draft — do not merge / mark ready without operator go.
  • Gate OFFDEB_BUILD_MULTI_ARCH unset ⇒ amd64 only.
  • Follow-ups (separate draft PRs): the same gated leg on debian-hll and debian-topn.

Add an arm64 leg to the release build+publish workflow, gated behind the
DEB_BUILD_MULTI_ARCH repo variable (default OFF), so amd64 release builds are
byte-for-byte unchanged until the gate is flipped.

- arch matrix dimension: ["amd64"] by default, ["amd64","arm64"] when the gate
  is on; arm64 is excluded for the RPM platforms (el/8, el/9, ol/8, ol/9).
- arm64 legs run on native ubuntu-24.04-arm runners.
- The arm64 builder + debsigner images are not published to Docker Hub yet, so
  build them in-job by cloning develop's tooling (this branch carries none):
  TEST=false ./update_image builds citus/packaging:<distro>-all, and debsigner
  is built from develop's Dockerfile. "docker run" has no --platform and prefers
  a local image, so citus_package picks up the native arm64 images automatically;
  amd64 keeps pulling the published images from Docker Hub.

Requires the develop jq fix (#1204) so the cloned deb builder images work on
arm64. Part of Track 2 of citusdata/citus#8612.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0259dd2c-9208-48f9-a8c2-8031dca8ab75
@ihalatci
ibrahim halatci (ihalatci) merged commit 6b4b3b6 into all-citus Sep 1, 2026
21 checks passed
@ihalatci
ibrahim halatci (ihalatci) deleted the ihalatci-arm64-deb-release-all-citus branch September 1, 2026 09:47
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