feat: script de packaging Flatpak
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,2 +1,9 @@
|
|||||||
src-tauri/target/
|
src-tauri/target/
|
||||||
src-tauri/gen/
|
src-tauri/gen/
|
||||||
|
|
||||||
|
# Artefacts de build Flatpak
|
||||||
|
flatpak/.build/
|
||||||
|
flatpak/.repo/
|
||||||
|
flatpak/.flatpak-builder/
|
||||||
|
flatpak/pena.deb
|
||||||
|
flatpak/*.flatpak
|
||||||
|
|||||||
Executable
+92
@@ -0,0 +1,92 @@
|
|||||||
|
#!/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é."
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>com.pena.app</id>
|
||||||
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
|
<project_license>MIT</project_license>
|
||||||
|
<name>Pena</name>
|
||||||
|
<summary>Lecteur de fichiers Markdown</summary>
|
||||||
|
<description>
|
||||||
|
<p>
|
||||||
|
Pena est une application de bureau pour lire des fichiers Markdown.
|
||||||
|
La conversion Markdown vers HTML est réalisée côté Rust (comrak), avec
|
||||||
|
coloration syntaxique des blocs de code et plusieurs thèmes de lecture.
|
||||||
|
</p>
|
||||||
|
</description>
|
||||||
|
<launchable type="desktop-id">com.pena.app.desktop</launchable>
|
||||||
|
<categories>
|
||||||
|
<category>Utility</category>
|
||||||
|
<category>TextEditor</category>
|
||||||
|
</categories>
|
||||||
|
<content_rating type="oars-1.1"/>
|
||||||
|
<releases>
|
||||||
|
<release version="0.1.0" date="2026-06-23"/>
|
||||||
|
</releases>
|
||||||
|
</component>
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
id: com.pena.app
|
||||||
|
runtime: org.gnome.Platform
|
||||||
|
runtime-version: '48'
|
||||||
|
sdk: org.gnome.Sdk
|
||||||
|
command: pena
|
||||||
|
|
||||||
|
finish-args:
|
||||||
|
# Affichage
|
||||||
|
- --socket=wayland
|
||||||
|
- --socket=fallback-x11
|
||||||
|
- --device=dri
|
||||||
|
- --share=ipc
|
||||||
|
# Lecture des fichiers Markdown ouverts par l'utilisateur
|
||||||
|
- --filesystem=home
|
||||||
|
|
||||||
|
modules:
|
||||||
|
- name: pena
|
||||||
|
buildsystem: simple
|
||||||
|
sources:
|
||||||
|
- type: file
|
||||||
|
path: pena.deb
|
||||||
|
- type: file
|
||||||
|
path: com.pena.app.metainfo.xml
|
||||||
|
build-commands:
|
||||||
|
- |
|
||||||
|
set -eux
|
||||||
|
# Extraction du .deb produit par `cargo tauri build`
|
||||||
|
ar -x pena.deb
|
||||||
|
tar -xf data.tar.gz
|
||||||
|
|
||||||
|
# Binaire principal -> /app/bin/pena (correspond à `command:`)
|
||||||
|
bin="$(find usr/bin -maxdepth 1 -type f | head -n1)"
|
||||||
|
install -Dm755 "$bin" /app/bin/pena
|
||||||
|
|
||||||
|
# Fichier .desktop : renommé en <app-id>.desktop (exigence Flatpak)
|
||||||
|
desktop="$(find usr/share/applications -name '*.desktop' | head -n1)"
|
||||||
|
install -Dm644 "$desktop" /app/share/applications/com.pena.app.desktop
|
||||||
|
sed -i \
|
||||||
|
-e 's/^Exec=.*/Exec=pena/' \
|
||||||
|
-e 's/^Icon=.*/Icon=com.pena.app/' \
|
||||||
|
/app/share/applications/com.pena.app.desktop
|
||||||
|
|
||||||
|
# Icône : on prend la plus grande disponible
|
||||||
|
icon="$(find usr/share/icons -name '*.png' | sort | tail -n1)"
|
||||||
|
install -Dm644 "$icon" /app/share/icons/hicolor/128x128/apps/com.pena.app.png
|
||||||
|
|
||||||
|
# Métadonnées AppStream
|
||||||
|
install -Dm644 com.pena.app.metainfo.xml /app/share/metainfo/com.pena.app.metainfo.xml
|
||||||
Reference in New Issue
Block a user