Il y en avait deux, et le mauvais portait le nom le plus convaincant :
`publier-release.sh` compilait, archivait et réécrivait le manifeste, à
charge pour l'appelant de committer. Lancé seul, il a produit les deux
moitiés de la panne du 2026-08-21 — un manifeste corrigé mais non poussé,
et une release v0.4.0 contenant six commits de plus que son tag.
`publier.sh` absorbe l'étape et refuse désormais de publier, avant de
compiler, si le tag de la version existe déjà (en nommant le commit du tag
et celui de HEAD) ou si le dépôt du code n'est pas propre. `--archive-seule`
garde la brique réutilisable en CI, sous le même nom : ni manifeste, ni
commit, ni tag, donc rien à moitié publié.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
L'asset de la release v0.4.0 a été remplacé sur Gitea ; le sha256 du
manifeste désignait encore l'archive précédente, d'où l'échec de
`yunohost app upgrade` (et de son retour arrière, qui retélécharge la
même source).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
La page « À propos » de l'application affiche la version publiée : encore
faut-il que le binaire la connaisse. Le publish reçoit donc, à côté de
`-p:Version` déjà présent, `-p:MaBibliDateBuild`.
⚠️ Cet horodatage est le témoin de l'injection : sans lui, l'application se
déclare « version de développement » plutôt que d'afficher le « 1.0.0 » que le
SDK pose par défaut, lequel se lirait comme une vraie version alors qu'il ne
désigne rien.
`SOURCE_DATE_EPOCH` est respecté, comme pour l'archive : sinon deux
compilations du même commit donneraient deux sha256 différents pour la seule
raison que l'heure a changé, et la reproductibilité visée par les options de
`tar` ne vaudrait plus rien.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
publier.sh enchaîne la publication de bout en bout : version déduite de la
précédente, archive, manifeste, commit et push du paquet, tag et push du code,
avec vérification côté distant. Seul le dépôt de l'archive dans la release
Gitea reste manuel — l'URL est rappelée en fin de sortie.
PUBLICATION.md et A_FAIRE.md sont supprimés : leur contenu vit désormais dans
le README de mabibli, point d'entrée unique du projet. doc/DESCRIPTION.md et
doc/ADMIN.md restent ici, YunoHost les lisant lui-même.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Meme pictogramme de livre ouvert que MaBibli.Client (favicon, icones PWA) : deux pages
en V dans le bleu d'accent de l'app, tranche centrale blanche. Convention du catalogue
d'applications YunoHost : logo.png a la racine du depot.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PUBLICATION.md donne les gestes pas à pas, avec le contrôle attendu à
chaque étape : première mise en production, montée de version (0.1.0 →
0.1.1), retour arrière si la mise à jour échoue, désinstallation.
Deux points qui se paient cher s'ils sont oubliés y sont explicites :
`--version` est obligatoire pour une nouvelle version applicative (sans
lui le script reproduit celle du manifeste), et la sauvegarde de sécurité
pré-upgrade ne contient PAS le répertoire de données.
README et A_FAIRE renvoient au fichier plutôt que de tripler la
procédure. Dernière URL fictive éliminée : gitea.exemple.org subsistait
dans l'exemple CI de publier-release.sh.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le data_dir de YunoHost vit sous /home/yunohost.app/mabibli, or
ProtectHome=yes rend /home vide dans le namespace du service : le démarrage
mourait sur « SQLite Error 14: unable to open database file ».
ReadWritePaths ne perce pas ProtectHome — vérifié sur une unité de test :
`yes` + ReadWritePaths échoue, `tmpfs` + BindPaths réussit. La forme retenue
garde les répertoires personnels du serveur invisibles au service.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`Environment=` découpe sur les espaces : sans guillemets, la ligne
définissait `ConnectionStrings__MaBibli=Data` et une variable parasite
`Source=…`. L'application recevait la chaîne de connexion `Data` et mourait
au démarrage en ArgumentException, faisant échouer l'installation à l'étape
« Démarrage de mabibli » (constaté sur le serveur, reproduit isolément sur
une unité de test).
Version de paquet à ~ynh2 : l'archive est inchangée, seule la conf bouge.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le commit précédent portait le bon message mais pas les modifications :
manifest.toml, README.md, conf/systemd.service et la valeur par défaut de
--base-url référençaient encore gitea.example.org, ce qui faisait échouer
l'installation au Prefetching asset main.
A_FAIRE.md est réécrit : la visibilité privée du dépôt du code devient le
point bloquant restant (Gitea répond 404, pas 403, à un anonyme).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>