|
|
@@ -87,6 +87,8 @@ backupmanager_ynh/
|
|
|
│ ├── remote_instances.html
|
|
|
│ ├── remote_instance_form.html
|
|
|
│ └── federation.html
|
|
|
+├── v3/
|
|
|
+│ └── apps.json # Catalogue YunoHost personnalisé (version disponible)
|
|
|
└── doc/
|
|
|
```
|
|
|
|
|
|
@@ -480,6 +482,14 @@ rsync -az -e "ssh -i $key -p $port" archive.tar archive.info.json user@host:/rem
|
|
|
- [x] Rétention distante SSH : après chaque transfert rsync, nettoyage via SSH
|
|
|
- [x] Vue globale des archives `/overview` : local + SSH + instances, suppression manuelle, rétention à la demande
|
|
|
|
|
|
+### Phase 6 — Qualité & opérations ✅ (2026-07-17)
|
|
|
+- [x] Vue globale par job avec onglets (par job / par destination) — indicateur de réplication coloré
|
|
|
+- [x] Collecte parallèle des destinations dans la vue globale (`ThreadPoolExecutor`)
|
|
|
+- [x] Fix timeout instances fédérées : `(connect=5s, read=15s)` au lieu de `15s` global
|
|
|
+- [x] Fix `core_only` : `BACKUP_CORE_ONLY` passé via `env_keep` sudoers (plus de `sudo env`)
|
|
|
+- [x] Fix listage SSH : remplacement de `find -printf` (GNU only) par `find + stat` portable
|
|
|
+- [x] Catalogue YunoHost personnalisé (`v3/apps.json`) — mises à jour détectables depuis l'interface web
|
|
|
+
|
|
|
### En cours / À venir
|
|
|
- [ ] Script backup/restore de l'app pour YNH (SQLite + clés SSH)
|
|
|
- [ ] Pagination de l'historique des runs
|
|
|
@@ -494,7 +504,37 @@ rsync -az -e "ssh -i $key -p $port" archive.tar archive.info.json user@host:/rem
|
|
|
- **sudo rsync** : crée des fichiers `/tmp` owned root → cleanup via `sudo rm -rf` (sudoers)
|
|
|
- **Runs bloqués** : nettoyés toutes les heures par APScheduler (> 6h → status error)
|
|
|
- **Migration SQLite** : colonnes ajoutées à chaud via `ALTER TABLE` dans `app.py` au démarrage
|
|
|
-- **Rétention SSH** : utilise `find -printf '%f\t%s\n'` (GNU find, disponible sur Debian/Ubuntu)
|
|
|
+- **Listage SSH** : `cd {dir} && find . -maxdepth 1 -name '*.tar' | stat -c%s` — portable (pas de `find -printf` absent sur BusyBox/BSD)
|
|
|
+- **core_only** : variable `BACKUP_CORE_ONLY=1` transmise via `subprocess(env=)` + `env_keep` dans sudoers (pas via `sudo env` non autorisé)
|
|
|
+- **Vue globale** : collecte des destinations en parallèle via `ThreadPoolExecutor` — une destination lente ne bloque pas les autres
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 16. Processus de release
|
|
|
+
|
|
|
+### Configuration initiale (une seule fois par serveur YunoHost)
|
|
|
+
|
|
|
+1. Créer `/etc/yunohost/apps_catalog.yml` :
|
|
|
+ ```yaml
|
|
|
+ - id: default
|
|
|
+ url: https://app.yunohost.org/default
|
|
|
+ - id: backupmanager-hansen
|
|
|
+ url: https://git.hansen.tl/YunoHost-Apps/backupmanager_ynh/raw/main
|
|
|
+ ```
|
|
|
+2. Rafraîchir le cache : `sudo yunohost tools update apps`
|
|
|
+
|
|
|
+YunoHost construit l'URL du catalogue en ajoutant `/v3/apps.json` à l'URL de base,
|
|
|
+soit : `https://git.hansen.tl/YunoHost-Apps/backupmanager_ynh/raw/main/v3/apps.json`
|
|
|
+
|
|
|
+### À chaque release
|
|
|
+
|
|
|
+1. Bumper la version dans **deux fichiers** (ex : `1.1~ynh1` → `1.2~ynh1`) :
|
|
|
+ - `manifest.toml` → champ `version`
|
|
|
+ - `v3/apps.json` → champ `manifest.version`
|
|
|
+2. Committer et pousser sur `main`
|
|
|
+3. YunoHost détecte la différence lors du prochain rafraîchissement (quotidien automatique
|
|
|
+ ou manuel avec `sudo yunohost tools update apps`) et propose la mise à jour dans l'interface web
|
|
|
+4. L'upgrade récupère le code depuis le git et installe la nouvelle version
|
|
|
|
|
|
---
|
|
|
|