mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 08:27:04 +00:00
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
107 lines
4.6 KiB
Markdown
107 lines
4.6 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` (`only-arches: x86_64` — we publish no
|
|
aarch64 tarball, and jpackage can't cross-compile one)
|
|
|
|
## 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`.
|