# 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` : ```bash 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 : ```bash npm --prefix frontend run test:bundle-transport ``` Sortie attendue : ```text dist: __IDEA_TRANSPORT__="tauri" (1 marker) dist-web: __IDEA_TRANSPORT__="http" (1 marker) ``` ## Artefact attendu ```text target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage ``` Vérifier rapidement : ```bash 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 : ```text failed to bundle project `failed to run linuxdeploy` ``` Ne pas réanalyser tout le build. Faire ce diagnostic court : ```bash 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 : ```text Failed to download runtime file ``` utiliser le runtime local déjà en cache et l'`appimagetool` extrait. Chercher le dossier extrait récent : ```bash find /tmp -path '*/appimagetool-prefix/usr/bin/appimagetool' -type f -printf '%p\n' | tail -1 ``` Puis lancer en remplaçant `` par le préfixe trouvé, par exemple `/tmp/appimage_extracted_xxx` : ```bash PATH=/appimagetool-prefix/usr/bin:$PATH \ ARCH=x86_64 \ /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 : ```bash env -i PATH=/usr/bin:/bin HOME=$HOME XDG_RUNTIME_DIR=/run/user/1000 ```