class

Beryl::Apply::Resolver

Inherits Reference < Object

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 :

  1. Fermeture transitive des requires: — chaque recette est cherchée dans les search_dirs (1er match gagne). Introuvable partout → RecipeNotFound.
  2. 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).
  3. Cycle → Cycle (liste des recettes impliquées).

Constructors

new(search_dirs : Array(String) | String)
Source

Instance methods

resolve(requested : Array(String)) : Array(Recipe)

Retourne les recettes dans l'ordre d'exécution (dépendances d'abord), à partir des noms d'entrée requested. Liste vide si requested est vide.

Source

Nested types