Solution Starlight - Configuration Content Collections Externes
DOC : Consultation de la documentation
Section titled “DOC : Consultation de la documentation”Source : Astro MCP - Content Collections glob loader
Recherche : glob loader base path custom directory
Résultat : Le loader glob() accepte un paramètre base pour lire depuis n’importe quel répertoire sur le filesystem
SPEC : Solution implémentée - Option 3 (Meilleure solution)
Section titled “SPEC : Solution implémentée - Option 3 (Meilleure solution)”Problème résolu :
- Sync script complexe qui cassait la structure
- Duplication des fichiers entre
docs/,GettingStarted/etapps/web/src/content/docs/ - Starlight échouait à afficher les docs
Solution appliquée :
Utiliser le loader glob() avec des bases personnalisées pour lire directement depuis les répertoires originaux.
Avantages :
- ✅ Pas de duplication - Les docs restent dans leurs répertoires originaux
- ✅ Pas de sync script - Configuration statique, simple et fiable
- ✅ Structure préservée - Starlight lit directement depuis
docs/etGettingStarted/ - ✅ Maintenance réduite - Un seul endroit pour éditer les docs
- ✅ Compatible Starlight - Utilise l’API officielle d’Astro
CODE : Modifications effectuées
Section titled “CODE : Modifications effectuées”1. Modification src/content.config.ts
Section titled “1. Modification src/content.config.ts”Ajout de la collection gettingStarted :
const gettingStarted = defineCollection({ loader: glob({ base: '../../GettingStarted', pattern: '**/*.{md,mdx}' }), schema: (context) => { const starlightSchema = docsSchema()(context); return z.preprocess((data: any) => { if (data && typeof data === 'object') { if (!data.title) { const inferredTitle = formatTitleFromPath((context as any)?.id); return { ...data, title: inferredTitle, }; } } return data; }, starlightSchema); },});Modification de la collection docs :
docs: defineCollection({ loader: glob({ base: '../../docs', pattern: '**/*.{md,mdx}' }), // ... schema avec preprocessing}),Suppression de l’import inutilisé :
// Supprimé: docsLoader (remplacé par glob)2. Modification astro.config.mjs
Section titled “2. Modification astro.config.mjs”Suppression du lien “Présentation” :
sidebar: [ { label: 'Getting Started', items: [{ autogenerate: { directory: 'GettingStarted' } }], }, { label: 'Documentation Technique', items: [{ autogenerate: { directory: 'docs' } }], },],3. Modification .github/workflows/deploy-dev.yml
Section titled “3. Modification .github/workflows/deploy-dev.yml”Suppression du sync-docs.sh :
# Supprimé:# - name: Sync docs to Starlight# run: ./sync-docs.sh source-to-starlight# - name: Commit synced docs# run: |# git config --local user.email "github-actions[bot]@users.noreply.github.com"# git config --local user.name "github-actions[bot]"# git add apps/web/src/content/docs/# git diff --staged --quiet || git commit -m "chore: sync docs from source to starlight [skip ci]"TEST : Validation
Section titled “TEST : Validation”- ✅ Typecheck réussi (0 erreurs, 0 warnings)
- ✅ Build réussi (107 fichiers HTML indexés)
- ✅ Pagefind indexation réussie
- ✅ Sitemap généré
- ✅ Docs de
docs/etGettingStarted/chargés correctement
INTÉG : Documentation et nettoyage
Section titled “INTÉG : Documentation et nettoyage”Actions recommandées :
Section titled “Actions recommandées :”-
Supprimer les répertoires dupliqués (optionnel) :
Terminal window rm -rf apps/web/src/content/docs/docsrm -rf apps/web/src/content/docs/getting-started -
Supprimer ou archiver le script sync-docs.sh :
Terminal window # Archiver (recommandé)mv sync-docs.sh sync-docs.sh.backup# Ou supprimerrm sync-docs.sh -
Documenter le nouveau workflow :
- Éditer directement dans
docs/etGettingStarted/ - Le build Astro chargera automatiquement les modifications
- Plus besoin de script de synchronisation
- Éditer directement dans
Notes importantes :
Section titled “Notes importantes :”- Structure des fichiers : Les fichiers dans
docs/sont organisés par sous-dossiers (L1_Contenu, L2_Presentation, L3_Backend, PM, SOP) - Fichiers PM et SOP : Ils sont inclus dans le build mais peuvent être exclus via filtre si nécessaire
- GettingStarted : Synchronisé automatiquement via la collection séparée
- Starlight sidebar : Utilise
autogeneratepour générer automatiquement la navigation
Conclusion
Section titled “Conclusion”Cette solution élimine la complexité du sync script et permet une maintenance simplifiée de la documentation. Les docs sont maintenant gérés comme une source unique de vérité dans leurs répertoires originaux.