From 4bb2c6cc770f33b696f032fbb132fcebbcfe0a8a Mon Sep 17 00:00:00 2001 From: Gato Date: Sat, 4 Jul 2026 07:37:17 +0200 Subject: [PATCH] feat: build flatpak dans distrobox ubuntu-rust + sync version metainfo Le build cargo tauri echouait sur l hote atomique (libs GTK/WebKit absentes) ; il tourne desormais dans le distrobox ubuntu-rust. La version applicative est lue depuis tauri.conf.json et repercutee dans le metainfo AppStream. Co-Authored-By: Claude Opus 4.8 (1M context) --- flatpak/build-flatpak.sh | 77 +++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/flatpak/build-flatpak.sh b/flatpak/build-flatpak.sh index db6697a..23b10e5 100755 --- a/flatpak/build-flatpak.sh +++ b/flatpak/build-flatpak.sh @@ -17,6 +17,7 @@ set -euo pipefail APP_ID="com.pena.app" RUNTIME_VERSION="48" +RUST_CONTAINER="ubuntu-rust" # distrobox contenant cargo-tauri + libs GTK/WebKit SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" # .../Pena-tauri @@ -24,6 +25,8 @@ MANIFEST="$SCRIPT_DIR/${APP_ID}.yml" BUILD_DIR="$SCRIPT_DIR/.build" # arbre de build flatpak-builder REPO_DIR="$SCRIPT_DIR/.repo" # dépôt ostree temporaire DEB_TARGET="$SCRIPT_DIR/pena.deb" +TAURI_CONF="$PROJECT_DIR/src-tauri/tauri.conf.json" +METAINFO="$SCRIPT_DIR/${APP_ID}.metainfo.xml" DO_BUNDLE=0 BUILD_DEB=1 @@ -39,26 +42,61 @@ done # --- Vérification des outils ------------------------------------------------- need() { command -v "$1" >/dev/null 2>&1 || { echo "Outil manquant : $1" >&2; exit 1; }; } need flatpak -if ! command -v flatpak-builder >/dev/null 2>&1; then + +# flatpak-builder : commande native, sinon le Flatpak org.flatpak.Builder +# (cas des distributions atomiques type Bazzite/Silverblue). +if command -v flatpak-builder >/dev/null 2>&1; then + FLATPAK_BUILDER=(flatpak-builder) +elif flatpak info org.flatpak.Builder >/dev/null 2>&1; then + FLATPAK_BUILDER=(flatpak run org.flatpak.Builder) +else echo "flatpak-builder est requis. Installez-le :" >&2 echo " flatpak install -y flathub org.flatpak.Builder" >&2 - echo " (puis lancez ce script via : flatpak run org.flatpak.Builder ...)" >&2 - echo " ou sur Fedora : sudo dnf install flatpak-builder" >&2 + echo " ou sur Fedora classique : sudo dnf install flatpak-builder" >&2 exit 1 fi -# --- Runtime / SDK GNOME ----------------------------------------------------- -echo ">> Vérification du runtime GNOME ${RUNTIME_VERSION}…" -if ! flatpak info "org.gnome.Platform//${RUNTIME_VERSION}" >/dev/null 2>&1; then - flatpak install -y --user flathub \ - "org.gnome.Platform//${RUNTIME_VERSION}" \ - "org.gnome.Sdk//${RUNTIME_VERSION}" +# --- Remote flathub (scope --user) ------------------------------------------- +# flatpak-builder est lancé en --user et installe les dépendances (runtime/SDK +# via --install-deps-from=flathub) dans cette même installation. Le remote +# flathub doit donc exister au niveau --user, ce qui n'est pas le cas par +# défaut sur les distributions atomiques (où flathub est un remote système). +echo ">> Vérification du remote flathub (--user)…" +flatpak remote-add --if-not-exists --user flathub \ + https://flathub.org/repo/flathub.flatpakrepo + +# --- 0. Version : source de vérité = tauri.conf.json ------------------------- +# On lit la version applicative depuis tauri.conf.json et on la répercute dans +# le metainfo AppStream (release) afin que le Flatpak porte toujours la +# dernière version déclarée dans les sources. +need jq +VERSION="$(jq -r '.version' "$TAURI_CONF")" +if [[ -z "$VERSION" || "$VERSION" == "null" ]]; then + echo "Impossible de lire la version dans $TAURI_CONF" >&2 + exit 1 +fi +TODAY="$(date -u +%Y-%m-%d)" +echo ">> Version applicative : $VERSION (build du $TODAY)" + +# Met à jour (ou insère) l'entrée du metainfo pour cette version. +if grep -q "version=\"$VERSION\"" "$METAINFO"; then + echo ">> Release $VERSION déjà présente dans le metainfo." +else + echo ">> Ajout de la release $VERSION au metainfo…" + sed -i \ + "s##\n #" \ + "$METAINFO" fi # --- 1. Build du .deb via Tauri --------------------------------------------- if [[ "$BUILD_DEB" -eq 1 ]]; then - echo ">> Build du paquet .deb (cargo tauri build --bundles deb)…" - ( cd "$PROJECT_DIR" && cargo tauri build --bundles deb ) + # La compilation Tauri exige les libs de dev GTK/WebKit, absentes de l'hôte + # (distribution atomique). On build donc dans le distrobox `$RUST_CONTAINER`, + # qui embarque cargo-tauri et ces libs. flatpak-builder reste sur l'hôte. + need distrobox + echo ">> Build du paquet .deb dans le distrobox $RUST_CONTAINER…" + distrobox enter "$RUST_CONTAINER" -- \ + bash -lc "cd '$PROJECT_DIR' && cargo tauri build --bundles deb" fi DEB_SRC="$(find "$PROJECT_DIR/src-tauri/target/release/bundle/deb" -name '*.deb' 2>/dev/null | sort | tail -n1 || true)" @@ -69,24 +107,31 @@ fi echo ">> Utilisation du .deb : $DEB_SRC" cp -f "$DEB_SRC" "$DEB_TARGET" +# Icône installée dans le Flatpak (128x128) depuis les sources du projet. +cp -f "$PROJECT_DIR/src-tauri/icons/128x128.png" "$SCRIPT_DIR/icon.png" + # --- 2. Build Flatpak -------------------------------------------------------- +# Construit l'app dans un dépôt OSTree local ($REPO_DIR) ; les dépendances +# manquantes (runtime/SDK) sont récupérées depuis flathub. echo ">> Construction du Flatpak…" rm -rf "$BUILD_DIR" -FB_ARGS=(--force-clean --user --repo="$REPO_DIR") +FB_ARGS=(--force-clean --user --install-deps-from=flathub --repo="$REPO_DIR") if [[ "$DO_BUNDLE" -eq 0 ]]; then FB_ARGS+=(--install) fi -flatpak-builder "${FB_ARGS[@]}" "$BUILD_DIR" "$MANIFEST" +"${FLATPAK_BUILDER[@]}" "${FB_ARGS[@]}" "$BUILD_DIR" "$MANIFEST" # --- 3. Export d'un fichier .flatpak (optionnel) ----------------------------- if [[ "$DO_BUNDLE" -eq 1 ]]; then OUT="$SCRIPT_DIR/Pena.flatpak" echo ">> Export du bundle : $OUT" - flatpak build-bundle "$REPO_DIR" "$OUT" "$APP_ID" "$RUNTIME_VERSION" 2>/dev/null \ - || flatpak build-bundle "$REPO_DIR" "$OUT" "$APP_ID" + flatpak build-bundle "$REPO_DIR" "$OUT" "$APP_ID" \ + --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo + echo ">> Nettoyage du dépôt OSTree temporaire…" + rm -rf "$REPO_DIR" echo ">> Installer avec : flatpak install --user $OUT" else - echo ">> Installé. Lancer avec : flatpak run $APP_ID" + echo ">> Pena $VERSION installé. Lancer avec : flatpak run $APP_ID" fi echo ">> Terminé."