#!/usr/bin/env bash # # Construit un paquet Flatpak de Pena à partir du .deb généré par Tauri. # # Étapes : # 1. `cargo tauri build --bundles deb` -> produit le .deb autonome # 2. Copie du .deb à côté du manifeste sous le nom `pena.deb` # 3. `flatpak-builder` construit le bundle dans la sandbox GNOME # 4. Installation locale (--user) et/ou export en fichier .flatpak # # Usage : # ./build-flatpak.sh # build + installation locale (--user) # ./build-flatpak.sh --bundle # build + export d'un fichier Pena.flatpak # ./build-flatpak.sh --no-deb # réutilise le .deb déjà présent (build rapide) # set -euo pipefail APP_ID="com.pena.app" RUNTIME_VERSION="48" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" # .../Pena-tauri 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" DO_BUNDLE=0 BUILD_DEB=1 for arg in "$@"; do case "$arg" in --bundle) DO_BUNDLE=1 ;; --no-deb) BUILD_DEB=0 ;; -h|--help) sed -n '2,16p' "$0"; exit 0 ;; *) echo "Argument inconnu : $arg" >&2; exit 1 ;; esac 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 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 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}" 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 ) fi DEB_SRC="$(find "$PROJECT_DIR/src-tauri/target/release/bundle/deb" -name '*.deb' 2>/dev/null | sort | tail -n1 || true)" if [[ -z "$DEB_SRC" ]]; then echo "Aucun .deb trouvé. Lancez le script sans --no-deb." >&2 exit 1 fi echo ">> Utilisation du .deb : $DEB_SRC" cp -f "$DEB_SRC" "$DEB_TARGET" # --- 2. Build Flatpak -------------------------------------------------------- echo ">> Construction du Flatpak…" rm -rf "$BUILD_DIR" FB_ARGS=(--force-clean --user --repo="$REPO_DIR") if [[ "$DO_BUNDLE" -eq 0 ]]; then FB_ARGS+=(--install) fi 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" echo ">> Installer avec : flatpak install --user $OUT" else echo ">> Installé. Lancer avec : flatpak run $APP_ID" fi echo ">> Terminé."