New self-contained desktopApp/packaging/flatpak/flathub/ directory whose contents are copied verbatim into the flathub per-app repo at submission time (Flathub has no separate accounts — submission is a GitHub PR): - manifest builds from the published GH Release tarball (pinned to v1.12.6 url + sha256 from the release asset digest) instead of the local type:dir tree CI uses — Flathub build servers must fetch all sources themselves - x-checker-data (json type, is-main-source) on the archive source so flatpak-external-data-checker auto-PRs url/sha256 bumps and metainfo <release> entries on every new GitHub Release - own metainfo copy carrying the permanent <releases> history Flathub requires (the CI variant keeps injecting its entry at build time); screenshots remain the documented submission blocker - flathub.json restricting builds to x86_64 (no aarch64 tarball exists and jpackage cannot cross-compile one) Verified locally: built the flathub manifest end-to-end from the real v1.12.6 tarball (sha256 enforced by flatpak-builder), installed it, and booted the actual app inside the sandbox under Xvfb — UI rendered and the embedded Tor daemon spawned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYfNxhPZC3WRrn82Dm2Cb4
4.6 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(only-arches: x86_64— we publish no aarch64 tarball, and jpackage can't cross-compile one)
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.