Files
IdeaSDK/.ideai/skills/md/eb76ce50-c05c-443b-8ba5-36bda091a148.md

4.3 KiB

Build de l'AppImage IdeA (Linux)

Procédure canonique pour reconstruire l'AppImage Linux d'IdeA et les bundles frontend associés.

À utiliser à chaque fois qu'un correctif doit être visible dans l'app desktop. Rappel produit : le binaire qui tourne = l'AppImage installée, pas les sources. Un correctif source n'est actif dans l'app desktop qu'après rebuild, remplacement de l'AppImage utilisée, puis relance d'IdeA.

Commande principale

Depuis le project root /home/anthony/Documents/Projects/IdeA :

cd crates/app-tauri
APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=true ../../frontend/node_modules/.bin/tauri build --bundles appimage

Cette commande déclenche build.beforeBuildCommand, donc elle reconstruit automatiquement les deux bundles frontend :

  • frontend/dist : bundle desktop, transport tauri.
  • frontend/dist-web : bundle web, transport http.

Ne pas revenir à l'ancienne procédure npm --prefix frontend run build seule : elle ne reconstruit pas le bundle web séparé.

Vérification des bundles web/desktop

Après le build, lancer :

npm --prefix frontend run test:bundle-transport

Sortie attendue :

dist: __IDEA_TRANSPORT__="tauri" (1 marker)
dist-web: __IDEA_TRANSPORT__="http" (1 marker)

Artefact attendu

target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage

Vérifier rapidement :

ls -lh target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
APPIMAGE_EXTRACT_AND_RUN=1 target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage --appimage-help | head

Pourquoi ces variables sont obligatoires

  • --bundles appimage : cible uniquement l'AppImage Linux et évite les bundles inutiles/cassants comme NSIS.
  • NO_STRIP=true : évite l'échec linuxdeploy/strip sur les bibliothèques système modernes contenant .relr.dyn.
  • APPIMAGE_EXTRACT_AND_RUN=1 : évite l'échec FUSE quand linuxdeploy ou appimagetool ne peuvent pas monter une AppImage dans l'environnement courant.

Fallback si Tauri échoue à failed to run linuxdeploy

Symptôme : la commande Tauri reconstruit frontend/dist, frontend/dist-web, compile target/release/app-tauri, crée target/release/bundle/appimage/IdeA.AppDir, puis échoue seulement à l'étape finale :

failed to bundle project `failed to run linuxdeploy`

Ne pas réanalyser tout le build. Faire ce diagnostic court :

APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=true LDAI_OUTPUT=/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage \
  /home/anthony/.cache/tauri/linuxdeploy-x86_64.AppImage \
  --appdir /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA.AppDir \
  --output appimage

Si appimagetool échoue avec téléchargement runtime impossible :

Failed to download runtime file

utiliser le runtime local déjà en cache et l'appimagetool extrait. Chercher le dossier extrait récent :

find /tmp -path '*/appimagetool-prefix/usr/bin/appimagetool' -type f -printf '%p\n' | tail -1

Puis lancer en remplaçant <EXTRACTED> par le préfixe trouvé, par exemple /tmp/appimage_extracted_xxx :

PATH=<EXTRACTED>/appimagetool-prefix/usr/bin:$PATH \
ARCH=x86_64 \
<EXTRACTED>/appimagetool-prefix/usr/bin/appimagetool \
  --runtime-file /home/anthony/.cache/tauri/runtime-x86_64 \
  /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA.AppDir \
  /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage

Le PATH est nécessaire parce que mksquashfs est fourni dans appimagetool-prefix/usr/bin et peut être absent du PATH système.

Relance de l'application

Ne pas relancer IdeA automatiquement depuis une session active : cela tue l'orchestrateur courant et les ponts MCP. Une fois l'AppImage reconstruite, l'utilisateur décide quand remplacer/lancer l'artefact final.

Piège d'environnement AppImage

Une session shell lancée depuis l'AppImage peut hériter de variables comme APPDIR, LD_LIBRARY_PATH, PYTHONHOME pointant vers /tmp/.mount_IdeA_*. Symptômes possibles : python3 casse avec No module named 'encodings', ou un binaire Tauri local se lance dans un environnement pollué.

Pour des commandes sensibles, préférer un environnement propre ou éviter Python :

env -i PATH=/usr/bin:/bin HOME=$HOME XDG_RUNTIME_DIR=/run/user/1000 <commande>