Add phase-1 native arm64 nightly CI (regress + isolation on ubuntu-24.04-arm) - #8816
Open
ibrahim halatci (ihalatci) wants to merge 2 commits into
Open
Add phase-1 native arm64 nightly CI (regress + isolation on ubuntu-24.04-arm)#8816ibrahim halatci (ihalatci) wants to merge 2 commits into
ibrahim halatci (ihalatci) wants to merge 2 commits into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #8816 +/- ##
==========================================
- Coverage 88.73% 88.72% -0.01%
==========================================
Files 289 289
Lines 65013 65013
Branches 8203 8203
==========================================
- Hits 57691 57686 -5
- Misses 4954 4956 +2
- Partials 2368 2371 +3 🚀 New features to boost your workflow:
|
ibrahim halatci (ihalatci)
force-pushed
the
ihalatci-arm64-nightly-ci
branch
from
September 2, 2026 13:00
807e7cf to
fea31b0
Compare
Adds a bounded nightly GitHub Actions workflow that natively compiles Citus
and runs the core regress + isolation suites on ubuntu-24.04-arm, closing the
gap where no CI validated Citus on arm64. Upstream half of the multi-arch
effort tracked by citus#8612.
- New .github/workflows/nightly_arm64.yml: runs-on ubuntu-24.04-arm, cron
04:00 UTC + workflow_dispatch, bounded matrix (PG 17/18 x {regress,
isolation}), assert-off build for a clean pass/fail signal, arm64-specific
failure-issue notify job.
- setup_cassert_pg: add optional cassert input (default "true", behavior
unchanged for the existing cassert nightly). cassert=false strips
--enable-cassert from the copied pgenv config and skips the assert-on guard.
Cache key gains runner.arch + cassert segments so amd64/arm64 and
assert-on/off caches never collide.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
ibrahim halatci (ihalatci)
force-pushed
the
ihalatci-arm64-nightly-ci
branch
from
September 2, 2026 13:35
fea31b0 to
0d54411
Compare
ibrahim halatci (ihalatci)
marked this pull request as ready for review
September 2, 2026 14:35
Matches build_and_test.yml after #8804. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a phase-1, bounded nightly GitHub Actions workflow that natively compiles Citus and runs its core regression suites on arm64 (
ubuntu-24.04-arm). This is the upstream half of the multi-arch effort tracked by citus#8612.Docker (multi-arch alpine image) and packaging (gated arm64
.deblegs) have already shipped their arm64 support; the remaining gap was that no CI validated that Citus itself builds and its tests pass on arm64 — a search of.github/finds zeroarm64/aarch64/ubuntu-24.04-armreferences before this change. This PR closes that gap.Files changed
.github/workflows/nightly_arm64.yml.github/actions/setup_cassert_pg/action.yml(optionalcassertinput; cache-key hardening)Design
Reuses the arch-portable from-source build seam
The workflow reuses
.github/actions/setup_cassert_pg, which builds PostgreSQL from source viapgenvand then./configure && make all && make install-allfor Citus on a bare runner — no prebuilt, amd64-locked container. Getting native arm64 coverage is therefore mostly a matter ofruns-on: ubuntu-24.04-arm.Bounded phase-1 matrix (intentional, to cap arm-runner cost)
regressandisolationonly (≈4 test jobs), reusing the exact make-target lists fromnightly_cassert.yml.arbitrary-configs,pg-upgrade,citus-upgrade,columnar,failure,tap,generator.scheduleat0 4 * * *(04:00 UTC — offset from the 03:00 cassert nightly cron) +workflow_dispatch.Clean pass/fail signal → assert-off build
The purpose of this nightly is arm validation (green = "Citus works on arm").
setup_cassert_pgnormally builds an--enable-cassertPG whose nightly is "expected red" as pre-existing asserts surface — that would muddy the arm signal. So this workflow builds assert-off:cassert(default"true") was added tosetup_cassert_pg. The default preserves the existing cassert nightly's behavior byte-for-byte.cassert: "false"(which the arm workflow passes), the action strips--enable-cassertfrom the copied pgenvdefault.conf(the source config is untouched) and skips the guard that otherwise hard-fails a non-cassert build.Tradeoff: an assert-off build won't catch arm-specific assertion violations. That's acceptable for a phase-1 pass/fail gate; a cassert arm leg can be layered on later once the basic gate is reliably green.
Cache-key correctness (arch + cassert segments)
The pgenv cache key gained
${{ runner.arch }}and acassert${{ inputs.cassert }}segment.runner.osisLinuxon both amd64 and arm64 runners, so without an arch segment an amd64~/.pgenv(prebuilt binaries) could be restored onto an arm64 runner. Thecassertsegment keeps assert-on and assert-off builds in separate cache entries (the assert-off edit is applied to the copied config, so it does not changehashFiles('.devcontainer/pgenv/config/default.conf')). Net effect on the existing cassert nightly: a one-time cache rebuild, then identical behavior.Failure notifications
The
notifyjob mirrors the cassert nightly's auto-file-issue-on-failure logic but uses an arm64-specific label (nightly-arm64), marker, and title, so its failure issues never collide with the cassert nightly's.Explicitly out of scope (follow-up)
Gating pull requests on arm64.
build_and_test.yml/run_tests.ymlrun inside prebuilt, amd64-only containers (ghcr.io/citusdata/extbuilder:*,ghcr.io/citusdata/exttester:*). arm64 PR-gating would first require rebuilding that whole builder/tester image toolchain multi-arch (incitusdata/the-process). That is the natural next step if/when arm64 PR-gating is desired — not part of this PR.Guarantees / blast radius
build_and_test.yml,run_tests.yml,nightly_cassert.yml) are not modified. The only shared change is the optional, default-preservingcassertinput onsetup_cassert_pg.actionlint(clean on the new workflow) and YAML parse.Notes
Refs citus#8612.