Skip to content

ci: migrate primary CI jobs to ARM runners#7232

Draft
thepastaclaw wants to merge 1 commit intodashpay:developfrom
thepastaclaw:ci/migrate-to-arm-runners
Draft

ci: migrate primary CI jobs to ARM runners#7232
thepastaclaw wants to merge 1 commit intodashpay:developfrom
thepastaclaw:ci/migrate-to-arm-runners

Conversation

@thepastaclaw
Copy link

@thepastaclaw thepastaclaw commented Mar 16, 2026

Summary

Migrate the primary CI path from x86 to ARM runners, reducing costs and providing native aarch64 build+test coverage.

Changes

Moved to ARM runners (runner-arm64)

  • depends-linux64 (shared depends for linux64, fuzz, sqlite, ubsan)
  • src-linux64 + test-linux64 (primary native build+test)
  • src-linux64_fuzz (fuzz build)
  • src-linux64_sqlite + test-linux64_sqlite (SQLite build+test)
  • src-linux64_ubsan + test-linux64_ubsan (UBSan build+test)
  • multiprocess + tsan were already on ARM — no change

Removed

  • depends-aarch64-linux + src-aarch64-linux — the cross-compile job for aarch64-linux-gnu from x86 runners. We don't ship arm-linux-gnueabihf binaries, and native aarch64 coverage is now provided by the migrated jobs.
  • ci/test/00_setup_env_aarch64.sh — the cross-compile setup script

Remaining on x86 (runner-amd64)

  • nowallet (build + test) — sole native x86_64 coverage
  • mac, win64 — cross-compile targets
  • lint — architecture-independent

HOST detection centralization

Moved architecture-based HOST detection (aarch64-linux-gnu / x86_64-pc-linux-gnu) from individual setup scripts into ci/test/00_setup_env.sh. This:

  • Uses explicit triplets matching depends (e.g. aarch64-linux-gnu instead of config.guess's aarch64-unknown-linux-gnu)
  • Eliminates duplicated case blocks in 00_setup_env_native_qt5.sh, 00_setup_env_native_multiprocess.sh, 00_setup_env_native_tsan.sh
  • Automatically provides correct HOST for all native targets (fuzz, sqlite, ubsan) without per-script changes
  • Fixes PREVIOUS_RELEASES_DIR path computation which depended on HOST being set before the target script ran

Previous releases download fix

Added exact-match patterns for aarch64-linux-gnu and x86_64-linux-gnu in test/get_previous_releases.py, since the existing fnmatch glob aarch64-*-linux* requires a vendor field (e.g. aarch64-unknown-linux-gnu) and won't match the vendorless triplet.

Validation

  • Verified all moved jobs reference runner-arm64 in build.yml
  • Verified HOST detection in 00_setup_env.sh covers aarch64/x86_64 with dpkg fallback
  • Verified fuzz, sqlite, and ubsan setup scripts inherit HOST correctly (none set it explicitly)
  • Verified cross-compile scripts (mac, win64) still override HOST as needed
  • Verified previous release binaries exist for aarch64-linux-gnu in SHA256_SUMS
  • No references to deleted depends-aarch64-linux or src-aarch64-linux remain in build.yml

@thepastaclaw
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Mar 16, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link

github-actions bot commented Mar 16, 2026

✅ No Merge Conflicts Detected

This PR currently has no conflicts with other open PRs.

@coderabbitai
Copy link

coderabbitai bot commented Mar 16, 2026

Walkthrough

The changes restructure CI/CD workflows and environment setup scripts, primarily removing aarch64 Linux build support and realigning the build infrastructure. The GitHub Actions build workflow is updated to remove aarch64-specific jobs and rename linux64 builds, with runner targets changing from amd64 to arm64 across multiple jobs. The CI matrix script removes aarch64-linux initialization, and the corresponding environment setup script is deleted entirely. The native Qt5 setup script is enhanced with architecture detection logic based on system properties (uname and dpkg output) and new environment variable exports for test execution and download configuration.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the primary change: migrating CI jobs from x86 to ARM runners, which aligns with the core objective of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The pull request description is directly related to the changeset, providing clear context about migrating CI jobs from x86 to ARM runners and the specific changes made.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Member

@PastaPastaPasta PastaPastaPasta left a comment

Choose a reason for hiding this comment

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

your branch ci fails here: https://github.com/thepastaclaw/dash/actions/runs/23168985036/job/67317597479

please continue tracking this until push ci on your repo is successful

Move depends-linux64 and its consumers (linux64, fuzz, sqlite, ubsan)
to ARM runners, making aarch64 the primary CI architecture. This
includes both build and test stages.

Drop the aarch64-linux cross-compile job (depends + src) and its
setup env script since we don't ship arm-linux-gnueabihf binaries
and now have native aarch64 coverage through the migrated jobs.

Jobs remaining on x86:
- nowallet (build + test): sole x86_64 native coverage
- mac, win64: cross-compile targets (x86 host)
- lint: architecture-independent

Update 00_setup_env_native_qt5.sh to dynamically detect HOST based
on the runner architecture instead of hardcoding x86_64.
@thepastaclaw thepastaclaw force-pushed the ci/migrate-to-arm-runners branch from 4b72d41 to cba08c0 Compare March 17, 2026 18:31
@thepastaclaw
Copy link
Author

The CI failure on the old commit (4b72d41) has been fixed. The latest commit (cba08c0) passes all CI — both on the fork and on upstream:

  • Fork CI (push): Run 23210233386 — ✅ success (skipped redundant jobs since upstream CI covers them)
  • Upstream CI (PR): Run 23210234315 — ✅ all jobs pass (depends, builds, tests across all targets)

The fixes in the force-push:

  1. HOST detection centralized in 00_setup_env.sh — all native targets (fuzz, sqlite, ubsan) now inherit correct HOST automatically instead of needing per-script detection
  2. Duplicate HOST detection removed from 00_setup_env_native_multiprocess.sh and 00_setup_env_native_tsan.sh
  3. Previous releases fix — added exact-match patterns for aarch64-linux-gnu and x86_64-linux-gnu in get_previous_releases.py (vendorless triplets didn't match the existing fnmatch globs)

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