Plan d'intégration — Starlight Giscus
Plan d’Intégration — Plugin starlight-giscus
Section titled “Plan d’Intégration — Plugin starlight-giscus”Document de Référence :
GettingStarted/39-plan-starlight-giscus-integration.md
Source Clonée :~/astro/starlight-giscus(packages/starlight-giscus@1.2.0)
Version cible :starlight-giscus@1.2.0
Compatibilité :@astrojs/starlight@0.42.4(peerDependency :>=0.41.0)
Méthodologie : CycleDOC → SPEC → CODE → TEST → INTÉG
1. Synthèse de l’Investigation
Section titled “1. Synthèse de l’Investigation”L’analyse du code source cloné dans ~/astro/starlight-giscus révèle :
1.1 Architecture du Plugin
Section titled “1.1 Architecture du Plugin”- Mécanisme d’injection : Le plugin surcharge le composant
Paginationviastarlight-giscus/overrides/Pagination.astro. - Rendu : Il injecte le composant
<Comments />juste au-dessus des liens de navigation précédente/suivante (<Default />). - Synchronisation Thème : Un Custom Element
<giscus-comments>écoute :- Les changements de mutations sur
document.documentElement(data-theme). - L’événement Starlight
astro:after-swap. - Le stockage
localStorage.getItem('starlight-theme'). - Il envoie un message
postMessageà l’iframe Giscus pour basculer instantanément entre thème clair et thème sombre sans rechargement.
- Les changements de mutations sur
- Activation conditionnelle par page : Le composant vérifie
entry.data.giscus ?? true. Si une page agiscus: falsedans son frontmatter, aucun widget Giscus n’est rendu. - Dépendances : 0 dépendance runtime externe (utilise le script distant officiel
https://giscus.app/client.js).
1.2 Paramètres requis
Section titled “1.2 Paramètres requis”Quatre champs obligatoires sont vérifiés par validateAndNormalizeConfig :
repo(ex:'audyssee/PP')repoId(identifiant GraphQL du repo sur GitHub, ex:'R_...')category(nom de la catégorie de discussion GitHub, ex:'General'ou'Q&A')categoryId(identifiant GraphQL de la catégorie, ex:'DIC_...')
1.3 Prérequis GitHub & Giscus
Section titled “1.3 Prérequis GitHub & Giscus”Pour que les discussions s’affichent réellement :
- Les GitHub Discussions doivent être activées sur le dépôt GitHub cible.
- L’application GitHub Giscus doit être autorisée sur le dépôt.
- Le configurateur https://giscus.app permet de récupérer
repoIdetcategoryId.
2. Cycle DOC → SPEC → CODE → TEST → INTÉG
Section titled “2. Cycle DOC → SPEC → CODE → TEST → INTÉG”Phase 1 : DOC (Documentation préliminaire)
Section titled “Phase 1 : DOC (Documentation préliminaire)”- Vérifier la compatibilité des schémas de contenu Astro v5 / Starlight 0.42.
- Valider la gestion des variables d’environnement (
.envet.env.example) pour ne pas hardcoder les identifiants GitHub.
Phase 2 : SPEC (Spécification de l’intégration)
Section titled “Phase 2 : SPEC (Spécification de l’intégration)”- Ordre des plugins dans
apps/web/astro.config.mjs:starlightViewModes(...)starlightSidebarTopics(...)starlightGiscus(...)starlightPageActions(...)starlightDocSearch(...)
- Schéma de collection dans
apps/web/src/content.config.ts:- Ajouter
giscus: z.boolean().optional().default(true)dans l’extension du schémadocs.
- Ajouter
- Variables d’environnement :
PUBLIC_GISCUS_REPOPUBLIC_GISCUS_REPO_IDPUBLIC_GISCUS_CATEGORYPUBLIC_GISCUS_CATEGORY_ID- Valeurs par défaut fallback propres si variables absentes pour ne pas bloquer le build local.
Phase 3 : CODE (Implémentation)
Section titled “Phase 3 : CODE (Implémentation)”- Installation du paquet :
Terminal window pnpm --filter amn-astro add starlight-giscus@1.2.0 - Mise à jour du schéma de contenu :
- Fichier :
apps/web/src/content.config.ts - Déclaration du champ optionnel
giscusavecdefault(true).
- Fichier :
- Mise à jour de la configuration Starlight :
- Fichier :
apps/web/astro.config.mjs - Importation de
starlightGiscus from 'starlight-giscus'. - Ajout dans
pluginsavec mappingpathname, chargement différélazy: true, et support thème dynamique.
- Fichier :
- Mise à jour des variables d’environnement d’exemple :
- Fichier :
.env.example
- Fichier :
Phase 4 : TEST (Validation locale)
Section titled “Phase 4 : TEST (Validation locale)”- Validation statique et typage :
Terminal window pnpm --filter amn-astro run typecheck # (astro check) - Build de production :
Terminal window pnpm --filter amn-astro run build - Test fonctionnel dans le navigateur :
- Accéder à une page de documentation publique (ex:
http://localhost:8787/gettingstarted/01-setup-local/). - Vérifier la présence de la section Giscus en bas de page (au-dessus de la pagination).
- Basculer le mode sombre / clair et vérifier la mise à jour dynamique du thème du widget.
- Tester l’exclusion sur une page avec
giscus: falsedans le frontmatter.
- Accéder à une page de documentation publique (ex:
Phase 5 : INTÉG (Capitalisation & Documentation)
Section titled “Phase 5 : INTÉG (Capitalisation & Documentation)”- Rédiger la documentation d’intégration dédiée :
docs/L2_Presentation/astro/starlight/Starlight-Plugin-Giscus.md - Mettre à jour
test-docs/starlight-site-update.md(marquer le point 3 comme complété).
3. Matrice de Risques & Atténuations
Section titled “3. Matrice de Risques & Atténuations”| Risque | Impact | Solution / Atténuation |
|---|---|---|
Erreur au build si repoId ou categoryId est absent |
Échec du démarrage Astro | Fournir des fallbacks dans astro.config.mjs ou configurer des variables par défaut. |
| Dépôt GitHub privé ou Discussions désactivées | Message d’avertissement dans l’iframe Giscus | L’iframe gère nativement l’erreur sans casser l’affichage de la page de documentation. |
Conflit de composant Pagination |
Écrasement mutuel | Aucun autre plugin n’override Pagination (SidebarWithAuth override Sidebar, pas Pagination). |
| Pages internes (ADR, SOP, GettingStarted) commentables | Commentaires involontaires sur docs privées | Possibilité de désactiver via giscus: false par page ou par catégorie. |
4. Prochaine étape
Section titled “4. Prochaine étape”Attendre la validation du plan avant de passer à l’installation du paquet (pnpm add starlight-giscus) et à l’exécution de la phase CODE.