Remplace l'URL du depot par un placeholder, et dit quoi changer avant de publier

Sortie du projet. Le README ouvre desormais sur une section « A faire avant de
publier ce projet quelque part » : ce que commande la ligne unique de
publier.sh, ce qui reste a changer a la main, et ce qu'il ne faut surtout PAS
changer a la main (amd64.url, reecrite a chaque publication).

⚠ Le remplacement de fichiers ne regle pas l'historique git, qui porte ces URL
dans chaque ancien commit. Seul un depot neuf sans historique en vient a bout.

Restent volontairement : maintainers, l'adresse de contact et le site de
l'auteur dans /a-propos — l'AGPL attend qu'on puisse joindre la source, donc
l'auteur.

626 tests au vert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-22 13:03:45 +02:00
co-authored by Claude Opus 5
parent 31c63a9917
commit 9e31e147b5
3 changed files with 75 additions and 9 deletions
+32 -2
View File
@@ -2374,6 +2374,36 @@ référencés mais qui partaient dans chaque release. L'archive passe de **69 à
l'écart est bien moindre que sur disque (8,4 Mo), les *source maps* étant du texte qui se l'écart est bien moindre que sur disque (8,4 Mo), les *source maps* étant du texte qui se
compresse très bien. **Toujours mesurer sur l'archive, jamais sur le disque.** compresse très bien. **Toujours mesurer sur l'archive, jamais sur le disque.**
## Les URL de dépôt sont un placeholder — sortie du projet (2026-08-22)
`https://forge.example.org/mabibli` remplace partout l'URL du Gitea privé de l'utilisateur.
`example.org` est réservé à la documentation par la **RFC 2606** : le placeholder est donc
définitivement injoignable, ce qui est exactement ce qu'on veut d'un placeholder.
⚠️ **Une seule ligne commande tout** : `depot_code`, en tête de `build/publier.sh`. Les URL
de release, d'archive et le message de fin en dérivent. `--depot-code URL` fait la même
chose sans modifier le fichier.
⚠️ **`publier.sh` REFUSE de publier tant que le placeholder est en place**, et il refuse
**avant de compiler**, comme ses autres garde-fous. Sans lui, on écrirait dans
`manifest.toml` une `amd64.url` que personne ne peut télécharger — et l'échec surviendrait
**bien plus loin**, à l'installation, sous la forme d'un `ynh_setup_source` en erreur, sans
rapport apparent avec la cause. C'est la même famille de panne que le manifeste corrigé mais
non poussé : un défaut posé ici, constaté ailleurs.
⚠️ **Ce que le remplacement de fichiers ne règle PAS** : l'**historique git** porte ces URL
dans chaque ancien commit, et le dépôt du paquet contient en plus une archive de 68 Mo
committée par erreur à la 0.1.0 puis retirée. Seul un dépôt **neuf, sans historique**, en
vient à bout — c'est ce qui a été décidé pour la sortie.
⚠️ **`amd64.url` ne se change pas à la main** : `publier.sh` la réécrit à chaque
publication. La corriger donnerait l'illusion que c'est fait.
Ce qui **reste** volontairement : `maintainers = ["mathieu"]` (c'est le champ prévu par le
format v2), l'adresse de contact et le site de l'auteur dans `/a-propos` (décidé au lot Y —
l'AGPL attend d'ailleurs qu'on puisse joindre la source, donc l'auteur), et `"mathieu"`
comme nom de lecteur dans les jeux de test.
## Historique du projet (pourquoi ces choix) ## Historique du projet (pourquoi ces choix)
L'utilisateur a testé deux solutions existantes avant de se lancer dans un projet custom : L'utilisateur a testé deux solutions existantes avant de se lancer dans un projet custom :
@@ -2692,8 +2722,8 @@ Vérifié en exécution, styles calculés à l'appui : à 375 px, menu déployé
Relevé dans la console de l'application installée, le 2026-08-20 : Relevé dans la console de l'application installée, le 2026-08-20 :
``` ```
Access to manifest at 'https://akbar.nohost.me/yunohost/sso?r=…' Access to manifest at 'https://exemple.tld/yunohost/sso?r=…'
(redirected from 'https://mabibli.akbar.nohost.me/manifest.webmanifest') (redirected from 'https://mabibli.exemple.tld/manifest.webmanifest')
blocked by CORS policy: No 'Access-Control-Allow-Origin' header blocked by CORS policy: No 'Access-Control-Allow-Origin' header
``` ```
+1 -1
View File
@@ -121,7 +121,7 @@
private const string Site = "https://www.limonier.be"; private const string Site = "https://www.limonier.be";
/// <summary>Dépôt du code — ce que l'AGPL attend qu'on rende accessible.</summary> /// <summary>Dépôt du code — ce que l'AGPL attend qu'on rende accessible.</summary>
private const string Depot = "https://git.akbar.nohost.me/mathieu/mabibli"; private const string Depot = "https://forge.example.org/mabibli";
private VersionApplication? _version; private VersionApplication? _version;
+42 -6
View File
@@ -15,6 +15,42 @@ des décisions à destination de Claude Code, et `IDEES.md`, les pistes **non ac
| [Publication](#publication) | sortir une version, en une commande | | [Publication](#publication) | sortir une version, en une commande |
| [Mettre en production](#mettre-en-production) | installer, mettre à jour, revenir en arrière, désinstaller | | [Mettre en production](#mettre-en-production) | installer, mettre à jour, revenir en arrière, désinstaller |
## ⚠️ À faire avant de publier ce projet quelque part
Les URL de dépôt sont un **placeholder volontaire**, `https://forge.example.org/mabibli`
(le domaine `example.org` est réservé à la documentation par la RFC 2606, donc
définitivement injoignable). Rien ne fonctionnera tant qu'il n'est pas remplacé.
**Une seule ligne commande tout le reste** — `depot_code`, en tête de
`mabibli_ynh/build/publier.sh`. Elle produit les URL de release, celles d'archive, et le
message de fin. Pour un essai ponctuel, `--depot-code https://…` fait la même chose sans
modifier le fichier.
⚠️ **`publier.sh` refuse de publier tant que le placeholder est en place**, et il refuse
*avant* de compiler. C'est délibéré : publier avec une URL morte écrirait dans
`manifest.toml` une `amd64.url` que personne ne peut télécharger, et l'échec surviendrait
bien plus tard, à l'installation, sous la forme d'un `ynh_setup_source` en erreur — sans
rapport apparent avec la cause.
Restent à changer à la main, une fois seulement :
| Fichier | Quoi |
|---|---|
| `mabibli_ynh/manifest.toml` | `code = "…"`, et `maintainers` |
| `mabibli_ynh/conf/systemd.service` | `Documentation=…` |
| `mabibli_ynh/doc/ADMIN.md` | le lien de bas de page |
| `mabibli_ynh/README.md`, ce fichier | les liens et les commandes d'exemple |
| `MaBibli.Client/Pages/APropos.razor` | `Depot`, `Site`, et l'adresse de contact |
⚠️ **`amd64.url` dans le manifeste n'est PAS à changer à la main** : `publier.sh` la
réécrit à chaque publication. La corriger donnerait l'illusion que c'est fait alors que la
source du problème est ailleurs.
⚠️ **Le dépôt du code doit être PUBLIC.** `ynh_setup_source` télécharge sans jeton, et
Gitea comme GitHub répondent **404** — pas 403 — à un anonyme sur un dépôt privé. Le
symptôme est alors rigoureusement identique à « la release n'existe pas ». Contrôle qui
tranche, hors session authentifiée : `curl -fsSLI "<url de l'archive>"`.
## Demande initiale ## Demande initiale
Gérer une bibliothèque personnelle (livres physiques et numériques), avec : Gérer une bibliothèque personnelle (livres physiques et numériques), avec :
@@ -81,7 +117,7 @@ complet à une machine qui n'en a pas besoin, pour une compilation lente. Voir
## Le paquet YunoHost ## Le paquet YunoHost
MaBibli se déploie via un **second dépôt**, [`mabibli_ynh`](https://git.akbar.nohost.me/mathieu/mabibli_ynh), MaBibli se déploie via un **second dépôt**, [`mabibli_ynh`](https://forge.example.org/mabibli_ynh),
qui **ne contient aucun code C#** : il porte le manifeste, les configurations nginx et qui **ne contient aucun code C#** : il porte le manifeste, les configurations nginx et
systemd, et les scripts d'installation. Toute la documentation, elle, vit ici — ce systemd, et les scripts d'installation. Toute la documentation, elle, vit ici — ce
fichier est le point d'entrée unique du projet. fichier est le point d'entrée unique du projet.
@@ -261,7 +297,7 @@ Vérification, à faire **sans être authentifié** (autre navigateur, ou `curl`
ci-dessous) : ci-dessous) :
```bash ```bash
curl -fsSLI "https://git.akbar.nohost.me/mathieu/mabibli/releases/download/v0.1.0/mabibli-0.1.0-linux-x64.tar.gz" | head -1 curl -fsSLI "https://forge.example.org/mabibli/releases/download/v0.1.0/mabibli-0.1.0-linux-x64.tar.gz" | head -1
``` ```
Attendu : `HTTP/2 200`. Un 404 signifie soit que la release n'est pas déposée, soit que Attendu : `HTTP/2 200`. Un 404 signifie soit que la release n'est pas déposée, soit que
@@ -283,13 +319,13 @@ Le contrôle qui tranche, quel que soit le chemin suivi — c'est le manifeste *
serveur le lira** : serveur le lira** :
```bash ```bash
curl -fsSL "https://git.akbar.nohost.me/mathieu/mabibli_ynh/raw/branch/main/manifest.toml" | grep amd64 curl -fsSL "https://forge.example.org/mabibli_ynh/raw/branch/main/manifest.toml" | grep amd64
``` ```
#### A.5 Installer #### A.5 Installer
```bash ```bash
sudo yunohost app install https://git.akbar.nohost.me/mathieu/mabibli_ynh --debug sudo yunohost app install https://forge.example.org/mabibli_ynh --debug
``` ```
YunoHost demande le domaine (celui créé en A.1) et le groupe autorisé (`all_users`). YunoHost demande le domaine (celui créé en A.1) et le groupe autorisé (`all_users`).
@@ -385,7 +421,7 @@ Créer la release `v0.1.1` dans Gitea, y téléverser
`build/dist/mabibli-0.1.1-linux-x64.tar.gz`, puis vérifier sans authentification : `build/dist/mabibli-0.1.1-linux-x64.tar.gz`, puis vérifier sans authentification :
```bash ```bash
curl -fsSLI "https://git.akbar.nohost.me/mathieu/mabibli/releases/download/v0.1.1/mabibli-0.1.1-linux-x64.tar.gz" | head -1 curl -fsSLI "https://forge.example.org/mabibli/releases/download/v0.1.1/mabibli-0.1.1-linux-x64.tar.gz" | head -1
``` ```
#### B.5 Pousser le paquet #### B.5 Pousser le paquet
@@ -406,7 +442,7 @@ sudo yunohost backup create --apps mabibli
``` ```
```bash ```bash
sudo yunohost app upgrade mabibli -u https://git.akbar.nohost.me/mathieu/mabibli_ynh --debug sudo yunohost app upgrade mabibli -u https://forge.example.org/mabibli_ynh --debug
``` ```
⚠️ **L'option `-u` n'est pas facultative ici.** MaBibli n'est pas dans le catalogue ⚠️ **L'option `-u` n'est pas facultative ici.** MaBibli n'est pas dans le catalogue