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).
4.9 KiB
Flatpak packaging for Amethyst Desktop
This directory contains the Flatpak manifest and associated metadata. It is used two ways:
- Release CI (
.github/workflows/create-release.yml,linux-portableleg) builds a single-file bundle from it on every tag and attaches it to the GitHub Release asamethyst-desktop-<version>-linux-x64.flatpak. - 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 localtype: dirtree 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 entryicons/512/com.vitorpamplona.amethyst.Desktop.png— 512x512 icon (copy ofdesktopApp/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, withx-checker-dataso Flathub's update bot bumps it), its own metainfo (carries the permanent<releases>history Flathub requires), desktop entry, icon, andflathub.json— currently gated toonly-arches: x86_64so 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 onubuntu-24.04-arm); flippingonly-archesto includeaarch64is 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-fulladd-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.08itself.
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).
- Fork
flathub/flathubon GitHub. - Branch from
new-pr(NOTmaster). - Copy the contents of
flathub/verbatim into a new top-level directory namedcom.vitorpamplona.amethyst.Desktop. - Open a PR titled "Add com.vitorpamplona.amethyst.Desktop".
- After merge, Flathub creates a per-app repo
(
flathub/com.vitorpamplona.amethyst.Desktop) with write access for ongoing updates. Itsx-checker-datamakes 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.