README.md 9313 octets

girust_doc — Documentation officielle gitrust

Sources de la documentation publique de gitrust, forge Git self-hosted en Rust.

Site publié : demo.gitrust.eu — 6 langues (fr, en, de, es, pt, it).


Ce qu'il y a dedans

Quatre manuels organisés selon Diátaxis :

ManuelPublicContenu
user_manual/Utilisateurs finaux de la forgeInscription, SSH, dépôts, PR, issues, CI, notifications
administration_manual/Ops / self-hostersInstallation, config, sauvegarde, mise à jour, conformité ANSSI
developer_manual/Contributeurs core + API clientsArchitecture, patrons de code, API REST, tests, QA
template/TousConfigs et scripts copiables (.env, Docker, nginx, systemd, CI…)

Chaque manuel suit les 4 modes Diátaxis : tutorials, how-to, reference, explanation. Les tutoriels respectent un template pédagogique strict (objectifs Bloom, scaffolding, checkpoints, troubleshoot) — voir CONTRIBUTING.md.


Démarrage rapide

Prérequis

cargo install mdbook mdbook-mermaid mdbook-i18n-helpers
npm install -g markdownlint-cli2 @mermaid-js/mermaid-cli
sudo apt install gettext   # pour msginit / msgmerge (Debian/Ubuntu)
mdbook-mermaid install .   # une seule fois

Construire et prévisualiser

mdbook serve --open                    # dev FR avec rechargement auto
mdbook build -d book/fr                # FR en statique
MDBOOK_BOOK__LANGUAGE=en mdbook build -d book/en   # EN
./scripts/build-all-langs.sh           # les 6 langues + landing page

Sortie dans book/.

Vérifier la qualité

markdownlint-cli2 "**/*.md" "#!book/**" "#!node_modules/**"
for f in diagrams/*.mmd; do mmdc -i "$f" -o /tmp/test.svg; done

Pipeline CI Dagger (mode Power)

Le dossier .dagger/ contient un module Dagger Python qui reproduit tout le pipeline dans un conteneur reproductible. Utilisé par gitrust-ci en Power Mode :

dagger call -m .dagger/ ci --source=. export --path=./public
dagger call -m .dagger/ build --source=. --lang=en export --path=./public/en
dagger call -m .dagger/ lint --source=.

Voir .dagger/README.md pour les détails.


Traduction (workflow gettext)

Langue source : français. Les autres langues vivent dans po/*.po et sont fusionnées au build par mdbook-i18n-helpers.

# Extraire les chaînes à traduire
MDBOOK_OUTPUT='{"xgettext":{"pot-file":"messages.pot"}}' mdbook build -d po

# Mettre à jour une langue
msgmerge --update po/en.po po/messages.pot

Workflow complet : CONTRIBUTING.md §3.


Export PDF

Deux implémentations au choix — produit pdf/documentation-<lang>.pdf (une par langue).

Option Rust (recommandée) — scripts/build-pdf/

Wrapper léger autour de wkhtmltopdf (backend par défaut) avec fallback automatique vers chromium --headless si wkhtmltopdf n'est pas installé.

sudo apt install wkhtmltopdf               # ou brew install wkhtmltopdf

cargo run --release --manifest-path scripts/build-pdf/Cargo.toml            # les 6 langues
cargo run --release --manifest-path scripts/build-pdf/Cargo.toml -- fr en   # langues spécifiques

# Forcer chromium si wkhtmltopdf est trouvé mais non souhaité :
PDF_BACKEND=chromium cargo run --release --manifest-path scripts/build-pdf/Cargo.toml -- fr

wkhtmltopdf est ~10× plus rapide que Chromium complet sur un print.html de 94 pages et évite les crashes V8 sur les documents volumineux. Laisse 3 s à Mermaid pour se rendre via le JS QtWebKit embarqué.

Option Python — scripts/build-pdf.py

# Python 3.9+ uniquement. Pour Python 3.8 : pip install 'weasyprint==60.2' 'pydyf==0.8.0'
pip install weasyprint

./scripts/build-pdf.py              # les 6 langues
./scripts/build-pdf.py fr en        # langues spécifiques
OUT_DIR=./dist ./scripts/build-pdf.py

Pur Python, pas de binaire externe. Attention : weasyprint n'exécute pas le JavaScript, les diagrammes Mermaid restent en source brute. Préférer la version Rust pour un rendu fidèle.


SEO & AI Search Readiness

Optimisé pour indexation Google + découverte AI search (ChatGPT, Claude, Perplexity). Voir seo/AUDIT.md pour le rapport détaillé (score 88 %).

Artefacts générés automatiquement au build

book/
├── robots.txt          # bots IA autorisés (GPTBot, ClaudeBot, PerplexityBot, Google-Extended)
├── llms.txt            # manifest llmstxt.org avec 25+ liens directs
├── sitemap.xml         # index des 6 sitemaps par langue
└── <lang>/sitemap.xml  # 95 URLs/lang avec hreflang + priorité Diátaxis

Chaque page HTML contient :

  • <link rel="canonical"> pointant vers l'URL publiée
  • 6 <link rel="alternate" hreflang="…"> + x-default
  • OpenGraph + Twitter Cards complets
  • JSON-LD @graph : Organization + WebSite + TechArticle

Configuration dans theme/head.hbs. Post-traitement dans scripts/seo-postbuild.sh — appelé automatiquement par build-all-langs.sh.

Changer l'URL de publication

Par défaut https://demo.gitrust.eu/docs. Pour un staging :

SITE_BASE_URL=https://staging.example.com/docs ./scripts/build-all-langs.sh

Captures d'écran (Playwright)

Les tutoriels user_manual/ et administration_manual/ référencent des captures dans screenshots/. Le script Playwright s'authentifie sur une instance gitrust et prend les captures automatiquement :

GITRUST_URL=https://votre-instance.example \
GITRUST_USER=votre-login \
GITRUST_PASS='votre-mot-de-passe' \
node scripts/screenshot-runner/capture.mjs

Structure du dépôt

girust_doc/
├── book.toml                   # config mdBook (thème gitrust, mermaid, i18n)
├── src/                        # sources mdBook (FR canonique)
│   ├── SUMMARY.md              # table des matières globale
│   ├── introduction.md
│   └── <manuel>/               # symlinks vers les 4 manuels racine
├── user_manual/                # ┐
├── administration_manual/      # ├ 4 manuels × 4 dossiers Diátaxis
├── developer_manual/           # ┤   (tutorials/ how-to/ reference/ explanation/)
├── template/                   # ┘
├── diagrams/                   # sources Mermaid partagées (.mmd)
├── po/                         # traductions gettext (en, de, es, pt, it)
├── screenshots/                # captures Playwright + placeholders
├── theme/                      # thème mdBook (palette gitrust + head.hbs SEO)
├── seo/                        # robots.txt, llms.txt, AUDIT.md
├── pdf/                        # sortie PDF par langue (gitignoré)
├── book/                       # sortie mdBook par langue (gitignoré)
├── .dagger/                    # module Dagger Python (pipeline CI)
├── scripts/
│   ├── build-all-langs.sh      # builde les 6 langues + SEO postbuild
│   ├── build-pdf.py            # export PDF (weasyprint, sans JS)
│   ├── build-pdf/              # export PDF (Rust → wkhtmltopdf / chromium)
│   ├── seo-postbuild.sh        # génère sitemap, robots, llms
│   └── screenshot-runner/      # Playwright (capture.mjs, capture-usermanual.mjs)
├── .plans/                     # plans de travail versionnés
├── .github/workflows/          # CI GitHub Actions (build + lint)
├── CONTRIBUTING.md             # workflow PR, Diátaxis, pédagogie, i18n
├── .markdownlint.yaml
└── .gitignore

Contribuer

Lire CONTRIBUTING.md avant toute PR. Points clés :

  • Choisir le mode Diátaxis avant de créer un fichier (tutorial / how-to / reference / explanation).
  • Tutoriels : respecter la checklist pédagogique (objectifs Bloom, prérequis, checkpoints, troubleshoot, récap).
  • Mermaid : source unique par diagramme dans diagrams/.
  • Traduction : modifier uniquement les po/*.po, jamais les .md non-FR.
  • Screenshots : via Playwright, pas en ligne de commande manuelle.

État du projet

IndicateurValeur
Pages Markdown94
Stubs restants0
Langues buildées6 (fr + en, de, es, pt, it)
URLs indexées (sitemap)570 (95 × 6)
Pages tutorielles avec template pédagogique8 (3 user + 3 admin + 2 dev)
Captures d'écran (Playwright + placeholders)42
Diagrammes Mermaid centralisésdans diagrams/ + inline dans les .md
Pipeline CIDagger Python + GitHub Actions YAML
Export PDFRust (wkhtmltopdf, défaut) ou Python (weasyprint) → pdf/
SEO score (cf. seo/AUDIT.md)88 / 100

Licence

Documentation publiée sous CC BY 4.0. Module Dagger et scripts sous même licence que gitrust (voir dépôt principal).