Files
mstrofnone a110ce0a30 ci: publish linux-arm64 desktop, amy, and geode release assets
Amethyst v1.13.1 (and every prior release) shipped only linux-x64 desktop
binaries — .deb, .rpm, .AppImage, .flatpak, .tar.gz. Same for the amy
CLI and geode relay. Users on aarch64 hardware (Pinebook, Ampere
Altra, Raspberry Pi 4/5, AWS Graviton, arm64 servers, arm64 Chromebooks
running crostini, etc.) can't install any of them.

This teaches the release matrix about arm64:

- Add `ubuntu-24.04-arm` legs to build-desktop, build-cli, and
  build-geode. This is a standard, free public-repo GitHub-hosted
  runner (4 CPU / 16 GB / 14 GB SSD / arm64) since early 2025. No
  cross-compilation: jpackage / jlink / Compose Multiplatform 1.11
  all produce host-native artifacts.

- Fetch the matching `appimagetool-<arch>.AppImage` from the same
  1.9.0 release with an arch-specific SHA256 pin. `APPIMAGETOOL_URL`
  becomes `APPIMAGETOOL_VERSION` + per-arch SHA256 env vars.

- Parametrize the portable tarball/zip filename by `matrix.arch`
  (`amethyst-desktop-<ver>-linux-arm64.tar.gz` is now produced).

- Parametrize the Flatpak bundle filename and rewrite the manifest's
  `GST_PLUGIN_SYSTEM_PATH` from `x86_64-linux-gnu` to
  `aarch64-linux-gnu` on the arm64 leg. The Flathub-submission manifest
  (`desktopApp/packaging/flatpak/flathub/`) still gates on
  `only-arches: x86_64` — flipping that to include aarch64 is a
  follow-up once a Flathub aarch64 build has been validated end-to-end.

- Make the `createReleaseAppImage` gradle task pick its host arch from
  `System.getProperty("os.arch")` (amd64/x86_64 → `x86_64`, aarch64/
  arm64 → `aarch64`). Same task, same command, drives both legs.

- Fix `desktopApp/packaging/appimage/AppRun` to compute the multiarch
  library path from `uname -m` at launch time instead of hard-coding
  `x86_64-linux-gnu`. One script works in both AppImages on the target
  machine.

- Extend the desktop smoke test to run the release .deb build + launch
  probe on `ubuntu-24.04-arm` too, so arch-specific ProGuard/jlink
  breakage (missing native lib, arch-specific reflection root) is
  caught at PR time.

- Update BUILDING.md and scripts/asset-name.sh docs with the new
  arm64 asset names.

Follow-up assets published for the next tag push (v1.13.2+):

- amethyst-desktop-<ver>-linux-arm64.{deb,rpm,AppImage,flatpak,tar.gz}
- amy-<ver>-linux-arm64.{deb,rpm,tar.gz}
- geode-<ver>-linux-arm64.{deb,rpm,tar.gz}

Verification (local, before submitting):

- `python3 -c 'import yaml; yaml.safe_load(open(".github/workflows/create-release.yml"))'` — parses clean
- `bash -n scripts/asset-name.sh desktopApp/packaging/appimage/AppRun` — parses clean
- `actionlint` — reports only pre-existing shellcheck style hints; no new errors
- Confirmed `linuxdeploy-aarch64.AppImage` and
  `appimagetool-aarch64.AppImage` exist under the same pinned release
  tags used for x86_64; SHA256 recorded from a fresh download.

Not addressed (out of scope for this PR):

- Homebrew / winget bump workflows (`bump-homebrew*.yml`,
  `bump-winget.yml`) — those consume the assets by name; the new arm64
  filenames don't change any x86_64 name they already reference.
- Android arm64 continues to ship as before (already had it).
2026-08-04 10:51:16 +10:00
..

Flatpak packaging for Amethyst Desktop

This directory contains the Flatpak manifest and associated metadata. It is used two ways:

  1. Release CI (.github/workflows/create-release.yml, linux-portable leg) builds a single-file bundle from it on every tag and attaches it to the GitHub Release as amethyst-desktop-<version>-linux-x64.flatpak.
  2. Flathub submission — the flathub/ subdirectory holds a submission-ready variant that builds from the published GitHub Release tarball (Flathub's build servers must fetch sources themselves; the local type: dir tree used by CI is not allowed there).

Files

  • com.vitorpamplona.amethyst.Desktop.yml — Flatpak manifest. It packages the prebuilt jpackage tree from ./gradlew :desktopApp:createReleaseDistributable (which bundles its own trimmed JRE — that's why there is no openjdk module/sdk-extension).
  • com.vitorpamplona.amethyst.Desktop.metainfo.xml — AppStream metadata. Release CI injects the <release> entry for the version being built (the checked-in file deliberately carries none); screenshots still need to be added before any Flathub submission.
  • com.vitorpamplona.amethyst.Desktop.desktop — XDG desktop entry
  • icons/512/com.vitorpamplona.amethyst.Desktop.png — 512x512 icon (copy of desktopApp/src/jvmMain/resources/icon.png)
  • flathub/ — self-contained, copy-ready Flathub submission dir: its own manifest (archive source pinned to the release tarball URL + sha256, with x-checker-data so Flathub's update bot bumps it), its own metainfo (carries the permanent <releases> history Flathub requires), desktop entry, icon, and flathub.json — currently gated to only-arches: x86_64 so the Flathub build machinery never tries the aarch64 tarball before we've validated it end-to-end on Flathub's aarch64 builders. GitHub releases already ship aarch64 flatpak bundles (built from the same source tree on ubuntu-24.04-arm); flipping only-arches to include aarch64 is the follow-up once we've smoke-tested a Flathub aarch64 build.

Local build

# 1. Build the app tree the manifest packages
./gradlew :desktopApp:createReleaseDistributable

# 2. Tooling + Flathub remote (one-time)
sudo apt-get install -y flatpak flatpak-builder   # or distro equivalent
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# 3. Build + install locally
cd desktopApp/packaging/flatpak
flatpak-builder --user --install --install-deps-from=flathub --force-clean \
  build-dir com.vitorpamplona.amethyst.Desktop.yml
flatpak run com.vitorpamplona.amethyst.Desktop

To produce the distributable single-file bundle instead (what CI ships):

flatpak-builder --user --install-deps-from=flathub --force-clean \
  --repo=repo build-dir com.vitorpamplona.amethyst.Desktop.yml
flatpak build-bundle repo amethyst.flatpak com.vitorpamplona.amethyst.Desktop \
  --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo

Installing the bundle: flatpak install --user ./amethyst.flatpak. The --runtime-repo baked in above lets flatpak fetch the freedesktop runtime from Flathub automatically on the user's machine.

Sandbox notes

  • --socket=x11 (not wayland/fallback-x11): Compose Desktop renders through AWT/skiko, which is X11-only on Linux and runs under XWayland on Wayland sessions.

Codec coverage

  • HEVC / VP9 / AV1: covered via org.freedesktop.Platform.ffmpeg-full add-extension declared in the manifest. Flatpak downloads it on install.
  • HLS, H.264, AAC, MP3, Opus: covered by the GStreamer plugin set in org.freedesktop.Platform 24.08 itself.

Submission to Flathub

Follow https://docs.flathub.org/docs/for-app-authors/submission — no separate Flathub account exists; everything runs through GitHub PRs.

Remaining blocker before submitting: at least one screenshot with a publicly reachable URL in flathub/….metainfo.xml (the Flathub linter rejects the current empty placeholder).

  1. Fork flathub/flathub on GitHub.
  2. Branch from new-pr (NOT master).
  3. Copy the contents of flathub/ verbatim into a new top-level directory named com.vitorpamplona.amethyst.Desktop.
  4. Open a PR titled "Add com.vitorpamplona.amethyst.Desktop".
  5. After merge, Flathub creates a per-app repo (flathub/com.vitorpamplona.amethyst.Desktop) with write access for ongoing updates. Its x-checker-data makes flatpak-external-data-checker open update PRs there automatically on each new GitHub Release (bumping url/sha256 and appending the metainfo <release> entry).

To test the Flathub variant locally, run the same flatpak-builder commands as above from inside flathub/ — it downloads the pinned release tarball instead of using a local Gradle build.

License metadata

The manifest declares the binary as MIT AND LGPL-2.1-or-later AND BSD-2-Clause AND Apache-2.0. This SPDX expression validates via appstreamcli validate.