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:
@@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user