Add flatpak build plumbing

- io.github.bemagri.nomines.yml: builds libsigc++/glibmm/cairomm/pangomm/gtkmm
  from tarballs against the GNOME 46 runtime, then the app from the v1.0.0 tag
- Icon: app-id-named PNGs (128/512) for flatpak export, svg kept for native
  installs; desktop file Icon updated
- README/AGENTS.md: flatpak build instructions and version traps
This commit is contained in:
2026-08-01 15:34:28 +01:00
parent 2dbf64a2e8
commit 97565e415d
8 changed files with 146 additions and 3 deletions
+3
View File
@@ -6,6 +6,9 @@ bin/
lib/ lib/
obj/ obj/
# Flatpak
.flatpak-builder/
# Prerequisites # Prerequisites
*.d *.d
+2
View File
@@ -30,6 +30,8 @@ meson compile -C build
- Version `1.0.0` is stamped in FOUR places: `meson.build`, `flake.nix`, `default.nix`, and the `<releases>` entry in `resources/io.github.bemagri.nomines.metainfo.xml`. Bump all four together. - Version `1.0.0` is stamped in FOUR places: `meson.build`, `flake.nix`, `default.nix`, and the `<releases>` entry in `resources/io.github.bemagri.nomines.metainfo.xml`. Bump all four together.
- Release sanity: `nix build .` (validates the flake), `desktop-file-validate` + `appstreamcli validate --no-net` on the resources (wired up as meson tests). - Release sanity: `nix build .` (validates the flake), `desktop-file-validate` + `appstreamcli validate --no-net` on the resources (wired up as meson tests).
- The metainfo screenshot URL points at `raw.githubusercontent.com/bemagri/nomines/main/...` — it 404s until the repo is published; replace if the repo moves. - The metainfo screenshot URL points at `raw.githubusercontent.com/bemagri/nomines/main/...` — it 404s until the repo is published; replace if the repo moves.
- Flatpak: `io.github.bemagri.nomines.yml` builds libsigc++/glibmm/cairomm/pangomm/gtkmm from tarballs against the GNOME 46 runtime (matches the gtkmm 4.14/glib 2.80 stack we develop against), then the app from the `v1.0.0` git tag. The pinned `commit:` must match the pushed tag. The leaderboard needs the `--filesystem=xdg-config/nomines:create` finish-arg — don't drop it. Local builds land in `.flatpak-builder/` (gitignored); `flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml`.
- Flatpak module version traps (all verified by building): gtkmm 4.14 needs pangomm >= 2.50 (which still installs `pangomm-2.48.pc`; 2.48.x is too old), and cairomm tarballs live on `cairographics.org/releases`, not download.gnome.org. `appstream-compose: false` is set in the manifest because flatpak-builder's compose fetches the (still-404) metainfo screenshot URL — remove it once the repo is public. Flatpak's icon validation can't decode SVGs, so PNG icons (128/512) are installed under the app-id name and the svg is cleanup-removed; keep that convention.
## Gotchas ## Gotchas
+14
View File
@@ -100,6 +100,20 @@ The Nix flake also provides a development shell with all dependencies:
nix develop nix develop
``` ```
## Building a Flatpak
NoMines ships a Flatpak manifest (`io.github.bemagri.nomines.yml`) that builds
the gtkmm stack (libsigc++, glibmm, gtkmm) against the GNOME 46 runtime:
```bash
flatpak install -y flathub org.gnome.Platform//46 org.gnome.Sdk//46
flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml
flatpak run io.github.bemagri.nomines
```
Note: the manifest's `commit` must match the pushed `v1.0.0` tag (update it if
the history is rebased before pushing).
## Contributing ## Contributing
Contributions are welcome! Please feel free to submit a Pull Request. Contributions are welcome! Please feel free to submit a Pull Request.
+112
View File
@@ -0,0 +1,112 @@
# Flatpak manifest for NoMines.
#
# The GNOME runtime pins the exact gtk4/glib versions the gtkmm stack is
# built against: 46 = gtk 4.14 + glib 2.80, matching gtkmm 4.14/glibmm 2.80.
#
# Build locally:
# flatpak install -y flathub org.gnome.Platform//46 org.gnome.Sdk//46
# flatpak-builder --user --install --force-clean build-flatpak io.github.bemagri.nomines.yml
# flatpak run io.github.bemagri.nomines
app-id: io.github.bemagri.nomines
runtime: org.gnome.Platform
runtime-version: '46'
sdk: org.gnome.Sdk
command: nomines
# flatpak-builder's appstreamcli compose fetches the metainfo screenshot URL;
# it 404s until the repo is published. Remove this line once the repo is
# public (Flathub CI runs its own compose/validation anyway).
appstream-compose: false
finish-args:
- --share=ipc
- --socket=fallback-x11
- --socket=wayland
- --device=dri
# Leaderboard persistence (~/.config/nomines/leaderboard.ini)
- --filesystem=xdg-config/nomines:create
build-options:
no-debuginfo: true
cleanup:
- /include
- /lib/pkgconfig
- /lib/cmake
- /lib/girepository-1.0
- /lib/*.a
- /lib/*.la
- /share/aclocal
- /share/doc
- /share/gir-1.0
- /share/gtk-doc
- /share/pkgconfig
# flatpak's icon validation can't decode SVGs; the PNGs suffice
- /share/icons/hicolor/scalable/apps/*.svg
modules:
- name: libsigc++
buildsystem: meson
config-opts:
- -Dbuild-tests=false
- -Dbuild-examples=false
sources:
- type: archive
url: https://download.gnome.org/sources/libsigc++/3.6/libsigc++-3.6.0.tar.xz
sha256: c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17
- name: glibmm
buildsystem: meson
config-opts:
- -Dmaintainer-mode=false
- -Dbuild-documentation=false
- -Dbuild-examples=false
sources:
- type: archive
url: https://download.gnome.org/sources/glibmm/2.80/glibmm-2.80.0.tar.xz
sha256: 539b0a29e15a96676c4f0594541250566c5ca44da5d4d87a3732fa2d07909e4a
- name: cairomm
buildsystem: meson
config-opts:
- -Dmaintainer-mode=false
- -Dbuild-documentation=false
- -Dbuild-examples=false
- -Dbuild-tests=false
sources:
- type: archive
url: https://www.cairographics.org/releases/cairomm-1.16.2.tar.xz
sha256: 6a63bf98a97dda2b0f55e34d1b5f3fb909ef8b70f9b8d382cb1ff3978e7dc13f
- name: pangomm
buildsystem: meson
config-opts:
- -Dmaintainer-mode=false
- -Dbuild-documentation=false
sources:
- type: archive
# gtkmm 4.14 needs pangomm >= 2.50.0 (which still installs the
# pangomm-2.48.pc name). 2.48.x is too old.
url: https://download.gnome.org/sources/pangomm/2.50/pangomm-2.50.2.tar.xz
sha256: 1bc5ab4ea3280442580d68318226dab36ceedfc3288f9d83711cf7cfab50a9fb
- name: gtkmm
buildsystem: meson
config-opts:
- -Dmaintainer-mode=false
- -Dbuild-documentation=false
- -Dbuild-demos=false
- -Dbuild-tests=false
sources:
- type: archive
url: https://download.gnome.org/sources/gtkmm/4.14/gtkmm-4.14.0.tar.xz
sha256: 9350a0444b744ca3dc69586ebd1b6707520922b6d9f4f232103ce603a271ecda
- name: nomines
buildsystem: meson
sources:
- type: git
url: https://github.com/bemagri/nomines
tag: v1.0.0
commit: 2dbf64a2e8c9bf828d69a4fc27f2af1bbfa780f2
+14 -2
View File
@@ -37,10 +37,22 @@ executable('nomines',
install : true install : true
) )
# Install icon # Install icon (named after the app id so flatpak export picks it up;
# PNG sizes are required by flatpak/flathub icon validation)
install_data( install_data(
'resources/nomines.svg', 'resources/nomines.svg',
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/scalable/apps') install_dir: join_paths(get_option('datadir'), 'icons/hicolor/scalable/apps'),
rename: 'io.github.bemagri.nomines.svg'
)
install_data(
'resources/nomines-128.png',
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/128x128/apps'),
rename: 'io.github.bemagri.nomines.png'
)
install_data(
'resources/nomines-512.png',
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/512x512/apps'),
rename: 'io.github.bemagri.nomines.png'
) )
# Install desktop file # Install desktop file
+1 -1
View File
@@ -4,7 +4,7 @@ GenericName=Minesweeper Game
Comment=Classic minesweeper game with modern GTK UI Comment=Classic minesweeper game with modern GTK UI
Keywords=game;puzzle;mine; Keywords=game;puzzle;mine;
Exec=nomines Exec=nomines
Icon=nomines Icon=io.github.bemagri.nomines
Terminal=false Terminal=false
Type=Application Type=Application
Categories=Game;LogicGame; Categories=Game;LogicGame;
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB