Add recipe generator for automation and DRY recipes

- create generate_recipe.py: CLI tool for generating recipes from templates
- add recipe_templates.yaml: 5 base templates (virtual-desktop, virtual-server, desktop-hypervisor, live-desktop, live-server)
- add recipes_manifest.yaml: 16 recipe variants defined declaratively
- add Makefile: automation targets for generate, validate, test
- add requirements.txt: PyYAML dependency
- add tests/test_recipe_generator.py: 25 pytest tests

This enables:
- Template-based recipe generation with minimal duplication
- One-line variant addition via YAML manifest editing
- Automatic duplicate include prevention
- Ingredient path validation

Generated recipes are committed for reproducibility as per project conventions.
This commit is contained in:
Lukas Greve
2026-03-24 19:52:34 +01:00
parent c1c5fa8d07
commit 1aa264c146
40 changed files with 1601 additions and 124 deletions
+166
View File
@@ -0,0 +1,166 @@
# Recipe Templates for Phyllome OS Kickstart Generator
# Each template defines the structure for a recipe type
# Modifiers allow variant creation without duplicating files
templates:
# Virtual desktop recipe
# Modifiers: desktop (gnome|labwc), storage (standard|encrypted),
# security (secure|devel), version (43|rawhide), post (true|false)
virtual-desktop:
description: "A recipe for a virtual desktop"
base: core
required:
- core
- storage: core-storage
- bootloader: core-bootloader-grub
- locale: core-locale
- services: core-services
- network: core-network
- packages: core-packages
- initial-setup: core-initial-setup-server
optional:
security:
secure: core-security-on
devel: core-security-off
version:
"43": core-fedora-repo-43
"rawhide": core-fedora-repo-rawhide
desktop:
gnome: base-desktop-gnome
labwc: base-desktop-labwc
post: core-post
extras:
- base-guest-agents
modifiers:
storage:
standard: core-storage
encrypted: core-storage-encrypted
# Virtual server recipe
# Modifiers: security (secure|devel), version (43|rawhide), post (true|false)
virtual-server:
description: "A recipe for a virtual server"
base: core
required:
- core
- storage: core-storage
- bootloader: core-bootloader-grub
- locale: core-locale
- services: core-services
- network: core-network
- packages: core-packages
- initial-setup: core-initial-setup-server
optional:
security:
secure: core-security-on
devel: core-security-off
version:
"43": core-fedora-repo-43
"rawhide": core-fedora-repo-rawhide
post: core-post
extras:
- base-guest-agents
modifiers:
storage:
standard: core-storage
encrypted: core-storage-encrypted
# Desktop hypervisor recipe
# Modifiers: cpu (generic|amdcpu|intelcpu), gpu (none|intelgpu),
# security (secure|devel), version (rawhide), post (true|false)
desktop-hypervisor:
description: "A recipe for a desktop hypervisor"
base: core
required:
- core
- storage: core-storage
- bootloader: core-bootloader-grub
- locale: core-locale
- services: core-services
- network: core-network
- packages: core-packages
- packages-hw: core-packages-hardware-support
- initial-setup: core-initial-setup-gnome-desktop
- desktop: base-desktop-gnome
- vmm: base-desktop-virtual-machine-manager
- repo: core-fedora-repo-rawhide
optional:
security:
secure: core-security-on
devel: core-security-off
cpu:
generic: base-hypervisor
amdcpu: base-hypervisor-amdcpu
intelcpu: base-hypervisor-intelcpu
gpu:
intelgpu: base-hypervisor-intelgpu
post: core-post
modifiers:
cpu:
generic: base-hypervisor
amdcpu: base-hypervisor-amdcpu
intelcpu: base-hypervisor-intelcpu
gpu:
none: null
intelgpu: base-hypervisor-intelgpu
storage:
standard: core-storage
encrypted: core-storage-encrypted
# Live desktop recipe
# Modifiers: desktop (gnome|none), security (secure|devel), version (rawhide)
live-desktop:
description: "A recipe for a live desktop"
base: live-core
required:
- live-core
- storage: live-core-storage
- bootloader: live-core-bootloader-grub
- locale: core-locale
- services: core-services
- network: core-network
- packages: core-packages
- mandatory: live-core-mandatory-packages
- post: live-core-post
- session: live-core-post-live-session
- initial-setup: core-initial-setup-gnome-desktop
- desktop: base-desktop-gnome
- repo: core-fedora-repo-rawhide
optional:
security:
secure: core-security-on
devel: core-security-off
packages-hw: core-packages-hardware-support
modifiers:
storage:
standard: live-core-storage
encrypted: live-core-storage
# Live server recipe
# Modifiers: security (secure|devel), version (rawhide), hypervisor (true|false)
live-server:
description: "A recipe for a live server"
base: live-core
required:
- live-core
- storage: live-core-storage
- bootloader: live-core-bootloader-grub
- locale: core-locale
- services: core-services
- network: core-network
- packages: core-packages
- mandatory: live-core-mandatory-packages
- post: live-core-post
- session: live-core-post-live-session
- initial-setup: core-initial-setup-server
- repo: core-fedora-repo-rawhide
optional:
security:
secure: core-security-on
devel: core-security-off
packages-hw: core-packages-hardware-support
hypervisor: base-hypervisor
modifiers:
storage:
standard: live-core-storage
encrypted: live-core-storage