mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 08:04:45 +00:00
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).
111 lines
4.9 KiB
Markdown
111 lines
4.9 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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):
|
|
|
|
```bash
|
|
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`.
|