Files
amethyst/desktopApp/packaging/flatpak/README.md
Claude 079417ba60 feat: add submission-ready Flathub manifest variant
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
2026-07-14 14:32:47 +00:00

4.6 KiB

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 (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-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.