Replace the hardcoded TEMPLATES dict and the ksflatten-relative wrapper with a single data-driven pipeline: - recipe_templates.yaml becomes the single source of truth with three sections: base (always included), choices (exactly-one per category, the invariant pykickstart cannot check) and features (additive flags or one-of values) - generate_recipe.py is a pure YAML consumer: it resolves ingredients, renders dishes via pykickstart in-process (no ksflatten binary, no %include path munging), lints the invariants pykickstart cannot check (exactly-one per choice category, known keys, existing fragments, unique filenames) and validates every generated dish - dish names are derived by a generic rule with canonical category order from the templates, independent of YAML key order; no committed generated files means no name burn-in - recipes/ and dishes/ become gitignored build products; the 68 tracked generated files (already out of sync with the manifest) are removed - delete dead ingredients (section-data/, validation/, initial-setup/ desktop/, live/hypervisor.ks, rpmfusion-nonfree.ks), the stale all-ingredients.cfg (replaced by 'make inventory') and the bin/generate-recipe and bin/ksflatten-relative wrappers - Makefile: single 'make all' step plus lint, validate, inventory, test - add 16 pytest tests covering expansion, selection, naming, lint and flatten/validate round-trips
58 lines
1.8 KiB
YAML
58 lines
1.8 KiB
YAML
# Recipe Manifest for Phyllome OS
|
|
# Define all recipe variants using ingredients from recipe_templates.yaml.
|
|
# Edit this file to add new variants, then run: make all
|
|
#
|
|
# Syntax:
|
|
# - Single values: repository: "43"
|
|
# - List values: repository: ["43", "rawhide"] (expands to multiple variants)
|
|
# - Booleans: hardware-support: true / false (feature flags)
|
|
#
|
|
# NOTE: List values create a cartesian product.
|
|
# Example: repository: ["43", "rawhide"] + storage: ["standard", "encrypted"]
|
|
# creates 4 variants: (43,standard), (43,encrypted), (rawhide,standard), (rawhide,encrypted)
|
|
#
|
|
# NOTE: The 'name' field prefixes every generated dish/recipe filename, e.g.
|
|
# the group below yields dishes like desktop_43_gnome_standard_grub_guest-agents.cfg.
|
|
|
|
recipes:
|
|
# Desktop variants
|
|
- name: desktop
|
|
variants:
|
|
- repository: ["43", "rawhide"]
|
|
desktop: gnome
|
|
storage: ["standard", "encrypted"]
|
|
bootloader: ["grub", "systemd-boot"]
|
|
hardware-support: [true, false]
|
|
guest-agents: [true, false]
|
|
|
|
# # Server variants
|
|
# - name: server
|
|
# variants:
|
|
# - repository: ["43", "rawhide"]
|
|
# storage: standard
|
|
# bootloader: grub
|
|
# hardware-support: false
|
|
# guest-agents: true
|
|
#
|
|
# # Hypervisor variants
|
|
# - name: hypervisor
|
|
# variants:
|
|
# - repository: 43
|
|
# storage: standard
|
|
# bootloader: grub
|
|
# hardware-support: true
|
|
# guest-agents: false
|
|
# hypervisor: base
|
|
# hypervisor_type: ["amdcpu", "intelcpu"]
|
|
#
|
|
# # Desktop-hypervisor variants
|
|
# - name: desktop-hypervisor
|
|
# variants:
|
|
# - repository: 43
|
|
# desktop: gnome
|
|
# storage: standard
|
|
# bootloader: grub
|
|
# hardware-support: false
|
|
# guest-agents: true
|
|
# hypervisor: desktop
|
|
# hypervisor_type: ["amdcpu", "intelcpu"] |