Ajoute les sections Compilation (dotnet build/test, publish self-contained linux-x64) et Publication (script publier-release.sh de mabibli_ynh, renvoi vers PUBLICATION.md pour la marche complète). Corrige au passage la mention du scanner (ZXing.Net -> zbar), devenue inexacte depuis la bascule documentée dans CLAUDE.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
94 lines
4.3 KiB
Markdown
94 lines
4.3 KiB
Markdown
# MaBibli
|
|
|
|
Application de gestion de bibliothèque personnelle, self-hosted sur YunoHost.
|
|
|
|
## Demande initiale
|
|
|
|
Gérer une bibliothèque personnelle (livres physiques et numériques), avec :
|
|
|
|
- **Liste des livres physiques**
|
|
- **Liste des livres ebooks**
|
|
- **Gestion de prêts** — prêter un livre à quelqu'un, marquer comme récupéré, historique des prêts
|
|
- **Récupération automatique des infos via ISBN** (titre, auteur, éditeur, couverture) — scan caméra + saisie manuelle
|
|
- **Consultation hors-ligne** de la bibliothèque existante (le lookup ISBN, lui, nécessite le réseau)
|
|
- **Statuts de lecture** — à lire, en cours, lu, etc.
|
|
|
|
## Contraintes techniques
|
|
|
|
- **Langage** : C# / ASP.NET Core
|
|
- **Frontend** : Blazor WebAssembly, en **PWA** (installable, utilisable hors-ligne pour la consultation de la bibliothèque déjà enregistrée)
|
|
- **Scan code-barres** : **zbar** (WebAssembly, LGPL-2.1) — voir `CLAUDE.md` pour l'historique de la bascule depuis ZXing.Net
|
|
- **Accès** : smartphone (GSM) et PC, via navigateur
|
|
- **Multi-utilisateur** : géré via le SSO de **YunoHost** (en-têtes SSOwat, pas d'auth custom) — **collection commune** au foyer, avec traçabilité de qui a ajouté chaque livre
|
|
- **Base de données** : **SQLite**
|
|
- **Hébergement** : **YunoHost**, en installation **native (sans Docker)** — packaging façon `_ynh`, inspiré de [radarr_ynh](https://github.com/YunoHost-Apps/radarr_ynh) (déploiement .NET self-contained, pas de dépendance dotnet-runtime côté système)
|
|
- **Sources ISBN** : cascade **BnF (SRU) puis OpenLibrary** — bases libres, sans clé API, pas de dépendance à Google Books. La BnF passe en premier pour la couverture du fonds francophone. Voir `CLAUDE.md` pour le détail
|
|
- **Ebooks** : fiches d'inventaire uniquement, les fichiers ne sont pas hébergés par l'application
|
|
|
|
## Compilation
|
|
|
|
Prérequis : le SDK **.NET 10** (`dotnet --version`).
|
|
|
|
### En développement
|
|
|
|
```bash
|
|
dotnet build
|
|
dotnet test
|
|
```
|
|
|
|
Pour lancer l'application en local (l'API sert aussi le client Blazor compilé) :
|
|
|
|
```bash
|
|
dotnet run --project MaBibli.Api
|
|
```
|
|
|
|
### Publication self-contained (ce que le serveur reçoit réellement)
|
|
|
|
Le serveur YunoHost ne compile jamais : il télécharge une archive déjà publiée et la
|
|
déploie telle quelle (voir « Publication » ci-dessous). Pour produire ce même artefact
|
|
en local, à des fins de vérification :
|
|
|
|
```bash
|
|
dotnet publish MaBibli.Api --configuration Release --runtime linux-x64 --self-contained
|
|
```
|
|
|
|
`MaBibli.Api` référence `MaBibli.Client` : le client Blazor WebAssembly est compilé au
|
|
passage et atterrit dans `wwwroot/` du publish. Un seul projet à publier suffit donc
|
|
pour les trois (`MaBibli.Client`, `MaBibli.Shared`, `MaBibli.Api`). `--self-contained`
|
|
embarque le runtime .NET dans le dossier produit : aucun `dotnet-runtime` n'est requis
|
|
côté serveur.
|
|
|
|
⚠️ **Ne jamais compiler sur le serveur YunoHost lui-même** : ce serait imposer le SDK
|
|
complet à une machine qui n'en a pas besoin, pour une compilation lente. Voir
|
|
`CLAUDE.md`, section « Chaîne de publication ».
|
|
|
|
## Publication
|
|
|
|
MaBibli se publie et se déploie via un **second dépôt**, `mabibli_ynh` (le paquet
|
|
YunoHost), qui contient le script réutilisable `build/publier-release.sh` :
|
|
|
|
```bash
|
|
cd ../mabibli_ynh
|
|
./build/publier-release.sh
|
|
```
|
|
|
|
Ce script compile ce dépôt (`mabibli`) en `Release` self-contained, **vérifie** le
|
|
résultat (binaire présent, `wwwroot/` embarqué, toutes les ressources d'`index.html`
|
|
réellement sur disque, aucun placeholder d'empreinte non substitué), produit une
|
|
archive `.tar.gz` reproductible, calcule son `sha256`, et met à jour `version`,
|
|
`amd64.url` et `amd64.sha256` dans `mabibli_ynh/manifest.toml`.
|
|
|
|
Reste ensuite, à la main : créer le tag et la release Git correspondants sur ce dépôt,
|
|
y téléverser l'archive, puis committer et pousser `manifest.toml` dans `mabibli_ynh`
|
|
(YunoHost lit le manifeste **depuis Gitea**, jamais une copie locale).
|
|
|
|
**La marche à suivre complète et éprouvée** — première mise en production, montée de
|
|
version, retour arrière, désinstallation — est dans `mabibli_ynh/PUBLICATION.md`. Ne
|
|
pas la reproduire ici : ce sont des gestes propres au paquet YunoHost, pas au code de
|
|
ce dépôt.
|
|
|
|
## Statut
|
|
|
|
Voir `CLAUDE.md` pour le contexte complet et l'historique des décisions à destination
|
|
de Claude Code.
|