Beryl::Apply::Resolver
Résout l'ensemble des recettes à exécuter et leur ordre, à partir
d'une liste de recettes d'ENTRÉE (les noms demandés) et d'un CHEMIN
DE RECHERCHE de dépôts de recettes (search_dirs, ordonné).
Chemin de recherche (priorité au premier qui matche) : permet de
séparer les recettes PRIVÉES par société (ex. <config>/<société>/ recipes/, qui PEUT surcharger une recette générique du même nom)
des recettes GÉNÉRIQUES publiques (ex. dépôt beryl-recipes). La
société privée passe en tête → override ; le générique en fallback.
Les recettes d'entrée viennent de la config (apply_recipes:,
cascadé du merge société → domaine → host) ou d'un argument CLI
one-off (beryl sync <host> <recette>). Il n'y a PLUS de dossier
d'orchestration par host : la personnalisation passe par les
parameters: des recettes.
Étapes :
- Fermeture transitive des
requires:— chaque recette est cherchée dans lessearch_dirs(1er match gagne). Introuvable partout →RecipeNotFound. - Tri topologique (Kahn) : les dépendances sortent avant leurs
dépendants. Ordre alphabétique à indegree égal (déterministe).
order: [a, b]d'une recette ajoute l'arête a → b (b après a). - Cycle →
Cycle(liste des recettes impliquées).