# Build et compilation

Cette page décrit comment compiler **Pena-tauri** depuis les sources, en développement comme
en production. Pour une installation sur un système immuable (Bazzite, Silverblue, etc.),
voir plutôt [Installation sur Bazzite OS](3.2-Installation-Bazzite.md).

## Prérequis

| Outil | Détail |
|---|---|
| **Rust** | Toolchain stable, via [rustup](https://rustup.rs/) (édition 2021). |
| **Tauri CLI v2** | `cargo install tauri-cli --version "^2"` (fournit `cargo tauri`). |
| **Dépendances système** | WebKitGTK et libs associées (voir ci-dessous selon la distribution). |

Le frontend n'a **aucune dépendance Node** : c'est du JS vanilla servi statiquement depuis
`src/`. Il n'y a donc pas de `npm install` à faire pour `Pena-tauri`.

### Dépendances système Linux

**Fedora / RHEL :**
```bash
sudo dnf install webkit2gtk4.1-devel \
  openssl-devel curl wget file libappindicator-gtk3-devel librsvg2-devel
sudo dnf group install "C Development Tools and Libraries"
```

**Debian / Ubuntu :**
```bash
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \
  libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
```

> Sur une distribution immuable (Bazzite, Fedora Silverblue, Kinoite…), n'installez pas ces
> paquets sur l'hôte : utilisez un container ou un Flatpak. Voir
> [Installation sur Bazzite OS](3.2-Installation-Bazzite.md).

## Lancer en développement

Depuis `Pena-tauri/` :
```bash
cargo tauri dev
```

- Le frontend est servi directement depuis `src/` (fichiers statiques, sans bundler).
- La compilation Rust est lancée automatiquement et l'application s'ouvre.
- Toute modification du Rust déclenche une recompilation.

## Construire une release

Depuis `Pena-tauri/` :
```bash
cargo tauri build
```

L'exécutable est produit dans :
```
src-tauri/target/release/
```

### À propos du bundling

Dans `src-tauri/tauri.conf.json`, le bundling est **désactivé** :
```json
"bundle": { "active": false, "targets": "all", "icon": [] }
```

`cargo tauri build` produit donc l'**exécutable natif** (dans `target/release/`), mais ne
génère pas de paquets `.deb`, `.rpm` ou `.AppImage`. Pour activer la génération de ces
paquets, passer `bundle.active` à `true` et renseigner les icônes.

## Compiler le backend seul (sans Tauri CLI)

Pour de la compilation / des tests bas niveau, depuis `src-tauri/` :
```bash
cargo build              # compilation debug
cargo build --release    # compilation optimisée
cargo test               # tests unitaires
cargo clippy -- -D warnings   # lint (zéro warning toléré)
```

## Qualité et couverture

Le dépôt `Pena-tauri` impose un hook `pre-commit` qui bloque le commit si :
- **Clippy** remonte le moindre warning (`-D warnings`) ;
- la **couverture de lignes** est inférieure à **60 %** (via `cargo-llvm-cov`).

Installer l'outil de couverture :
```bash
cargo install cargo-llvm-cov
cargo llvm-cov --summary-only
```

## Récapitulatif des commandes

| But | Commande (depuis `Pena-tauri/`) |
|---|---|
| Développement | `cargo tauri dev` |
| Release (exécutable) | `cargo tauri build` |
| Compiler le backend | `cargo build --release` (depuis `src-tauri/`) |
| Tests | `cargo test` (depuis `src-tauri/`) |
| Lint | `cargo clippy -- -D warnings` |
| Couverture | `cargo llvm-cov --summary-only` |

## Voir aussi

- [Release et distribution](3.4-Release-et-distribution.md) — portabilité du binaire et création d'un paquet Flatpak
- [Installation (Linux générique)](3.1-Installation.md)
- [Installation sur Bazzite OS](3.2-Installation-Bazzite.md)
- [Architecture](../2-technique/2.1-Architecture.md)
