Set-OPS-Public/docs/theme-forgejo-hors-flotte.md
Daniel Allaire ac85278366 preuve : P34 — chaque document declare son lecteur (D-74)
La refonte de ce matin posait une convention. Une convention qu'on n'outille
pas tient tant que quelqu'un y pense : c'est le raisonnement de D-70, applique
au corpus documentaire.

Etat de depart mesure : 2 documents sur 34 declaraient leur lecteur. Les 32
autres disaient leur SUJET — ce qui avait enfoui le runbook de reprise le plus
utile du depot au §6 de autorisation.md.

Les 38 le declarent desormais, lecteur determine document par document et non
colle au gabarit : l'exploitant (devis, migration de tenant, cycle de vie,
gabarit d'or), le mainteneur (conceptions, registres, carte), le lecteur
externe (ecosysteme-chezlepro), l'agent IA (MISE-A-JOUR-CODEX-CLAUDE).

Deux exemptions DERIVEES, pas listees — un chemin en dur aurait vieilli a la
premiere page ajoutee : un document qui s'annonce genere, et un fragment sans
titre. Les 13 exemptes verifies un par un ; aucun document ecrit a la main
n'est exempte par accident. La preuve ne lit que l'EN-TETE, ce qui empeche
frontiere-opnsense.md et plan-et-generation.md — qui parlent de generation
dans leur corps — d'etre exemptes a tort.

Eprouvee dans les deux sens. Elle a echoue seule des sa premiere execution en
nommant deux documents que mon inventaire avait manques (docs/audit/). Puis
test negatif delibere : declaration retiree de meta-classe.md -> ECHEC la
nommant ; restauree -> OK.

Ce qu'elle ne teste pas : que le lecteur declare soit le BON. Ca se juge en
revue ; elle garantit qu'on a du y penser.

P01–P34. Comptes perimes corriges au passage (AGENTS.md et devis-services.md
annoncaient encore 30 preuves).

Verifie : prouver.py 0 (34 OK), plan-recette inchange.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 07:53:04 -04:00

125 lines
4.4 KiB
Markdown

# Appliquer le thème Alliance Boréale à une forge Forgejo hors flotte
> **Pour qui :** l'**exploitant** d'une forge Forgejo *hors* de la flotte Set-OPS.
Procédure **manuelle**, pour une instance Forgejo qui n'est **pas** gérée par Set-OPS —
typiquement la forge historique qui héberge ce dépôt et son wiki.
> Pour une forge de la flotte (`forge-01`), ne rien faire à la main : passer
> `serveur_forgejo_branding: true` et déployer le groupe `serveur_forgejo`. Le rôle copie
> exactement les mêmes fichiers.
## Ce que ça couvre
Forgejo n'offre **aucun réglage web** pour le CSS personnalisé : il faut déposer un fichier
sur le serveur. Une fois en place, la feuille est injectée sur **toutes** les pages —
dépôts, tickets, code, README et **wiki**. Le wiki n'a pas de thème distinct, il hérite du
même habillage.
## Prérequis
- accès **root** (ou `sudo`) sur la machine qui exécute Forgejo ;
- connaître le **répertoire `custom`** de l'instance ;
- une fenêtre où redémarrer le service est acceptable (quelques secondes d'indisponibilité).
Trouver le répertoire `custom` :
```bash
# 1. déclaré explicitement ?
grep -iE '^\s*(CUSTOM_PATH|ROOT)\s*=' /etc/forgejo/app.ini
# 2. ou par la variable d'environnement du service
systemctl show forgejo -p Environment | tr ' ' '\n' | grep -i custom
# 3. défaut usuel des paquets / installs binaires
ls -d /var/lib/forgejo/custom 2>/dev/null
```
## Les fichiers
Les deux fichiers vivent déjà dans ce dépôt — **ne pas en faire de copie** :
| Fichier du dépôt | Destination sur la forge |
|---|---|
| `roles/serveur_forgejo/files/custom/public/assets/css/alliance.css` | `<custom>/public/assets/css/alliance.css` |
| `roles/serveur_forgejo/files/custom/templates/custom/header.tmpl` | `<custom>/templates/custom/header.tmpl` |
Optionnels, si l'on veut aussi le logo et la favicon étoile :
`files/custom/public/assets/img/{logo,favicon}.svg``<custom>/public/assets/img/`.
## Pose
Depuis une copie locale du dépôt, en remplaçant `FORGE` et `CUSTOM` :
```bash
FORGE=root@forge.exemple.ca # hôte de la forge
CUSTOM=/var/lib/forgejo/custom # répertoire custom trouvé plus haut
SRC=roles/serveur_forgejo/files/custom
scp "$SRC/public/assets/css/alliance.css" "$FORGE:/tmp/alliance.css"
```
Puis **sur la forge** :
```bash
CUSTOM=/var/lib/forgejo/custom
OWNER=git:git # utilisateur du service (souvent git ou forgejo)
install -D -o $OWNER -m 0644 /tmp/alliance.css "$CUSTOM/public/assets/css/alliance.css"
```
### Injecter la feuille — l'étape à ne pas rater
`header.tmpl` est injecté dans le `<head>` de **toutes** les pages.
> ⚠️ **Si le fichier existe déjà, ne pas l'écraser** : une autre personnalisation y vit
> peut-être. Y **ajouter** la ligne.
```bash
CUSTOM=/var/lib/forgejo/custom
LINK='<link rel="stylesheet" href="{{AppSubUrl}}/assets/css/alliance.css?v=1">'
TPL="$CUSTOM/templates/custom/header.tmpl"
if [ -f "$TPL" ]; then
grep -qF 'alliance.css' "$TPL" || printf '%s\n' "$LINK" >> "$TPL"
else
install -D -o git:git -m 0644 /dev/null "$TPL"
printf '%s\n' "$LINK" > "$TPL"
fi
systemctl restart forgejo
```
## Vérifier
```bash
# la feuille est servie (200, type CSS)
curl -sI https://forge.exemple.ca/assets/css/alliance.css | head -3
# elle est bien référencée dans le <head> d'une page de wiki
curl -s https://forge.exemple.ca/<proprio>/<depot>/wiki | grep -o 'alliance\.css[^"]*'
```
À l'œil, sur une page de wiki en thème sombre : fond bleu nuit avec une nappe magenta à
droite et verte en bas à gauche, filet d'aurore sous les titres, code en ligne en teal.
Le ciel nocturne ne s'applique **qu'aux thèmes sombres** (`forgejo-dark`, `forgejo-auto`).
En thème clair, seules les couleurs d'accent changent — c'est voulu.
## Revenir en arrière
```bash
CUSTOM=/var/lib/forgejo/custom
sed -i '/alliance\.css/d' "$CUSTOM/templates/custom/header.tmpl"
rm -f "$CUSTOM/public/assets/css/alliance.css"
systemctl restart forgejo
```
## Après une mise à jour de Forgejo
`alliance.css` est en deux sections (cf. `roles/serveur_forgejo/README.md`) :
- **§1 Variables** — surcharge de variables de couleur officielles. Ne casse pas.
- **§2 Décor** — s'appuie sur des classes internes (`.markup h1`, `.markup blockquote`…).
**À revérifier après chaque montée de version majeure.** Si quelque chose déraille,
supprimer §2 ramène au thème sobre sans rien perdre d'essentiel.