Skip to content

ci(release): add linux arm64 desktop artifacts#2675

Merged
YellowSnnowmann merged 1 commit into
tinyhumansai:mainfrom
sunilkumarvalmiki:sunil/1599-linux-arm64-desktop-release
May 28, 2026
Merged

ci(release): add linux arm64 desktop artifacts#2675
YellowSnnowmann merged 1 commit into
tinyhumansai:mainfrom
sunilkumarvalmiki:sunil/1599-linux-arm64-desktop-release

Conversation

@sunilkumarvalmiki
Copy link
Copy Markdown
Contributor

@sunilkumarvalmiki sunilkumarvalmiki commented May 26, 2026

Summary

  • Adds a native ubuntu-24.04-arm desktop build row for Linux aarch64-unknown-linux-gnu bundles.
  • Publishes and validates linux-aarch64 AppImage entries in latest.json alongside existing Linux x86_64 assets.
  • Updates the Linux installer resolver to accept linux-aarch64 AppImage assets instead of hard-failing ARM64 Linux.
  • Teaches the AppImage graphics-library strip/repack helper to select ARM64 appimagetool, loader, library roots, and repack ARCH values.

Problem

Linux ARM64 users currently only get the standalone openhuman-core tarball. The desktop release workflow, updater manifest, release validator, and installer all only advertise Linux x86_64 desktop assets, so ARM64 Linux users cannot install the full desktop app from official release assets.

Solution

This keeps the change in the release/install layer:

  • Build desktop Linux ARM64 on GitHub's native ubuntu-24.04-arm runner.
  • Require the ARM64 AppImage and .deb in production release validation.
  • Add linux-aarch64 to updater manifest generation and release-asset validation.
  • Resolve linux-aarch64 in scripts/install.sh and cover it in the installer fixture smoke test.
  • Keep runtime/product behavior unchanged.

Submission Checklist

  • Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy
  • Diff coverage ≥ 80% — N/A: CI workflow and shell installer/release scripts only; no Vitest/cargo-covered runtime lines changed.
  • Coverage matrix updated — N/A: release/install infrastructure change, no feature row added or renamed.
  • All affected feature IDs from the matrix are listed in the PR description under ## Related — N/A: no matrix feature ID applies.
  • No new external network dependencies introduced (mock backend used per Testing Strategy)
  • Manual smoke checklist updated if this touches release-cut surfaces (docs/RELEASE-MANUAL-SMOKE.md) — N/A: existing release gate is script-enforced here via scripts/validate-release-assets.sh; docs not changed to keep this ci-config pass scoped to .github/workflows/ and scripts/.
  • Linked issue closed via Closes #NNN in the ## Related section

Impact

Release workflow impact only. Future production releases should include Linux ARM64 desktop AppImage and .deb assets, and install.sh can resolve the ARM64 AppImage through latest.json or the release API fallback.

Related

Closes #1599

  • Follow-up PR(s)/TODOs: none in this PR.

AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: sunil/1599-linux-arm64-desktop-release
  • Commit SHA: c3c82e2f478e65e2141e5071117e960244e88ef7

Validation Run

  • pnpm --filter openhuman-app format:check — scoped equivalent run: app/node_modules/.bin/prettier.cmd --check .github/workflows/build-desktop.yml .github/workflows/release-production.yml scripts/fixtures/latest.json
  • pnpm typecheck — N/A: no TypeScript/runtime source changed.
  • Focused tests: bash -n scripts/install.sh scripts/test_install.sh scripts/release/publish-updater-manifest.sh scripts/release/strip-appimage-graphics-libs.sh scripts/validate-release-assets.sh; bash scripts/test_install.sh; temp-fixture scripts/validate-release-assets.sh with linux-aarch64.
  • Rust fmt/check (if changed): N/A: no Rust changed.
  • Tauri fmt/check (if changed): N/A: no Tauri Rust changed.

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: release pipeline can build, publish, validate, and advertise Linux ARM64 desktop artifacts.
  • User-visible effect: ARM64 Linux users can install official desktop releases once a release is cut from this workflow.

Parity Contract

  • Legacy behavior preserved: existing macOS, Windows, and Linux x86_64 artifact keys and installer resolution remain intact.
  • Guard/fallback/dispatch parity checks: installer latest.json path and release API fallback both understand Linux ARM64; release validator requires the new platform entry.

Duplicate / Superseded PR Handling

Summary by CodeRabbit

  • New Features

    • Added support for Linux ARM64 (aarch64) architecture for desktop application builds, installers, and releases.
  • Chores

    • Updated build workflows, release processes, and validation scripts to support ARM64 platform across installation, updates, and artifact management.
    • Expanded installer and release asset resolution to handle ARM64-specific package formats.

Review Change Stack

Signed-off-by: sunilkumarvalmiki <g.sunilkumarvalmiki@gmail.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d3ac11a4-5c07-40c9-9f78-eff3bada846c

📥 Commits

Reviewing files that changed from the base of the PR and between de2a78a and c3c82e2.

📒 Files selected for processing (8)
  • .github/workflows/build-desktop.yml
  • .github/workflows/release-production.yml
  • scripts/fixtures/latest.json
  • scripts/install.sh
  • scripts/release/publish-updater-manifest.sh
  • scripts/release/strip-appimage-graphics-libs.sh
  • scripts/test_install.sh
  • scripts/validate-release-assets.sh

📝 Walkthrough

Walkthrough

This PR adds official Linux aarch64 (ARM64) release binary support across the entire build and release pipeline. The desktop workflow now builds aarch64 binaries, CI steps are generalized for both architectures, asset validation is updated with ARM64 patterns, the installer resolves aarch64 assets, AppImage tooling gains architecture awareness, and updater manifests are published with the new platform.

Changes

Linux aarch64 release support

Layer / File(s) Summary
Build matrix and workflow generalization
.github/workflows/build-desktop.yml
Adds ubuntu-24.04-arm matrix entry targeting aarch64-unknown-linux-gnu with deb/appimage bundles; generalizes Ubuntu dependency installation, binary diagnostics, and AppImage stripping steps to run on all Ubuntu platforms via startsWith(matrix.settings.platform, 'ubuntu-').
Release asset validation and patterns
.github/workflows/release-production.yml, scripts/validate-release-assets.sh, scripts/fixtures/latest.json
Extends release validation to require linux-aarch64 AppImage and deb assets; updates asset pattern matching to enforce amd64.AppImage for x86_64 and (arm64|aarch64)\.AppImage for ARM64; adds linux-aarch64 test fixture with ARM64 AppImage URL.
Installer platform and asset resolution
scripts/install.sh
Resolves both linux-x86_64 and linux-aarch64 platforms; uses architecture-specific AppImage filename regexes to select correct binaries from GitHub releases for each target architecture.
AppImage architecture-aware tooling
scripts/release/strip-appimage-graphics-libs.sh
Introduces default_appimagetool_url() to compute correct appimagetool download URL by architecture; extends appimage_loader_name() and appimagetool_arch() for aarch64; discovers ARM64-specific library roots (usr/lib/aarch64-linux-gnu, etc.); derives repacking ARCH from target architecture instead of hardcoding x86_64.
Updater manifest registration and publishing
scripts/release/publish-updater-manifest.sh
Adds LIN_AARCH64 asset lookup via ARM64 regex; registers linux-aarch64 platform in manifest; includes it in resolved-bundles output; expands required-platform validation to ensure both x86_64 and aarch64 assets are present before publishing.
Test coverage for ARM64 resolution
scripts/test_install.sh
Adds positive test assertion for linux-aarch64 asset URL resolution; removes prior negative-path smoke test that expected arm64 to fail.

Sequence Diagram

sequenceDiagram
  participant Builder as Build Workflow
  participant Installer as Install Script
  participant ReleaseValidator as Release Validator
  participant Manifest as Updater Manifest
  Builder->>Builder: Compile aarch64-unknown-linux-gnu (ubuntu-24.04-arm)
  Builder->>Builder: Generate deb + appimage artifacts
  ReleaseValidator->>ReleaseValidator: Validate linux-aarch64 asset patterns
  Installer->>Installer: Resolve linux-aarch64 platform key
  Installer->>Installer: Match AppImage by (arm64|aarch64) regex
  Manifest->>Manifest: Lookup LIN_AARCH64 asset
  Manifest->>Manifest: Register linux-aarch64 platform
  Manifest->>Manifest: Validate all required platforms present
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • tinyhumansai/openhuman#2404: Fixes the ARM64 build script to correctly compile and stage the aarch64 binary for the release artifacts added in this PR.

Poem

🐰 A rabbit's hop across the ARM,
From x86 to aarch64's charm,
One build matrix, two hearts that beat—
Linux on all chips, competition's sweet!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding Linux ARM64 desktop artifacts to the CI/release infrastructure, which aligns with the changeset modifying build workflows, installer scripts, and validation logic.
Linked Issues check ✅ Passed The PR successfully implements all coding requirements from issue #1599: adding native ubuntu-24.04-arm CI builds, supporting linux-aarch64 in installer/validator scripts, and publishing ARM64 AppImage and .deb assets.
Out of Scope Changes check ✅ Passed All changes directly support adding Linux ARM64 desktop artifact support; no unrelated modifications detected across workflows, installer scripts, validation, or test infrastructure.

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


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
Copy Markdown
Contributor

@graycyrus graycyrus left a comment

Choose a reason for hiding this comment

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

Review — Linux ARM64 desktop artifacts

Clean, well-scoped CI/release infrastructure change that delivers exactly what #1599 asks for. No runtime code touched.

What changed

Area Change
build-desktop.yml New ubuntu-24.04-arm matrix row for aarch64-unknown-linux-gnu; generalized ubuntu- platform guards
release-production.yml ARM64 AppImage + .deb added to required release asset patterns
publish-updater-manifest.sh linux-aarch64 entry in manifest generation + required-platforms check
strip-appimage-graphics-libs.sh Arch-aware appimagetool URL, loader name, library roots, and repack ARCH
install.sh ARM64 platform key resolution; tightened x86_64 regex to amd64\.AppImage$ to avoid cross-match
validate-release-assets.sh linux-aarch64 in SUPPORTED list + asset pattern; x86_64 pattern tightened
test_install.sh Positive arm64 resolution test replaces the old missing-platform negative test
fixtures/latest.json linux-aarch64 entry added

Checks

  • Existing x86_64 Linux paths all preserved — the regex tightening (\.AppImage$amd64\.AppImage$) is the correct disambiguation.
  • startsWith(matrix.settings.platform, 'ubuntu-') cleanly generalizes the three conditional steps.
  • strip-appimage-graphics-libs.sh dispatch functions handle both arches with proper error exits on unsupported.
  • Manifest publisher requires all 5 platforms including the new one — partial manifests will correctly fail.
  • Install fixture smoke test covers arm64 resolution.
  • The one CI failure (Rust Core Tests (Windows — secrets ACL)) is an unrelated 20-minute timeout, not caused by this PR.

Solid work. Ship it.

@oxoxDev oxoxDev assigned oxoxDev and unassigned oxoxDev May 28, 2026
@YellowSnnowmann YellowSnnowmann merged commit c41acd7 into tinyhumansai:main May 28, 2026
34 of 36 checks passed
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.

feat(release): add official Linux aarch64 (ARM64) release binaries

4 participants