refactor: rename fragments directory to ingredients and update all references

- Directory rename: fragments/ → ingredients/ (54 .ks files)
- Updated all Python scripts:
  * tests/integration/conftest.py - fixture renames
  * tests/integration/test_integration.py - constant and path updates
  * tests/test_recipe_generator.py - updated test assertions
  * recipe-generator/validators.py - updated comments and error messages
  * recipe-generator/recipe_generator.py - updated comment
- Updated all YAML files:
  * recipe-generator/recipe_templates.yaml - 66 path references
  * .gitea/workflows/validate-fragments.yaml → validate-ingredients.yaml
  * .gitea/workflows/test-generation.yaml - path patterns
- Updated scripts:
  * bin/ksflatten-relative - updated path detection
- Updated test file:
  * tests/integration/test_fragments.py → test_ingredients.py
- Updated documentation:
  * DEVELOPMENT.md - simplified references
  * DEVELOPMENT_QUICK.md - updated examples
  * tests/container/README.md - test references
- Regenerated all recipes (16 files) with ingredient paths
- Updated test fixtures (7 files)
- All integration tests pass (5/5)
- All unit tests pass (29/31 - 2 pre-existing failures unrelated)
This commit is contained in:
Lukas Greve
2026-03-26 20:27:56 +01:00
parent 3eb4c75392
commit 31955a8983
135 changed files with 670 additions and 1319 deletions
+6 -6
View File
@@ -18,7 +18,7 @@ podman build -t phyllo/test-runner tests/container/
podman run --rm -v .:/phyllomeos:ro phyllo/test-runner
# Run specific test file
podman run --rm -v .:/phyllomeos:ro phyllo/test-runner pytest tests/integration/test_fragments.py -v
podman run --rm -v .:/phyllomeos:ro phyllo/test-runner pytest tests/integration/test_ingredients.py -v
# Interactive mode for debugging
podman run -it --rm -v .:/phyllomeos phyllo/test-runner bash
@@ -32,9 +32,9 @@ podman run -it --rm -v .:/phyllomeos phyllo/test-runner bash
- **Description:** Tests for recipe generator functionality (template loading, validation, version extraction)
### Fragment Validation Tests
- **Location:** `tests/integration/test_fragments.py`
- **Location:** `tests/integration/test_ingredients.py`
- **Count:** ~15 tests
- **Description:** Validates all 54 fragments with pykickstart, checks section structure
- **Description:** Validates all 54 ingredients with pykickstart, checks section structure
### Recipe Composition Tests
- **Location:** `tests/integration/test_recipe_composition.py`
@@ -57,14 +57,14 @@ podman run -it --rm -v .:/phyllomeos phyllo/test-runner bash
tests/
├── test_recipe_generator.py # Unit tests (36 tests)
├── integration/
│ ├── test_fragments.py # Fragment validation (~15 tests)
│ ├── test_ingredients.py # Fragment validation (~15 tests)
│ ├── test_recipe_composition.py # Recipe generation (~10 tests)
│ ├── test_semantic_validation.py # pykickstart semantic (~10 tests)
│ ├── test_golden_masters.py # Regression tests (~5 tests)
│ └── conftest.py # Pytest fixtures
├── fixtures/
│ ├── expected_recipes/ # 5 golden master files
│ └── sample_fragments/ # Test fragment samples
│ └── sample_ingredients/ # Test fragment samples
└── container/
├── Containerfile # Test runner container definition
├── run-tests.sh # Test entrypoint script
@@ -110,7 +110,7 @@ podman run -it --rm -v .:/phyllomeos phyllo/test-runner bash
# Run tests manually
cd /phyllomeos
pytest tests/integration/test_fragments.py -v
pytest tests/integration/test_ingredients.py -v
```
### Permission denied errors
@@ -7,18 +7,18 @@
# A recipe for a desktop hypervisor
%include fragments/core/base.ks
%include fragments/storage/standard.ks
%include fragments/bootloader/grub.ks
%include fragments/core/locale.ks
%include fragments/core/services.ks
%include fragments/core/network.ks
%include fragments/packages/core-group.ks
%include fragments/packages/fedora-remix.ks
%include fragments/packages/hand-picked.ks
%include fragments/core/security/enabled.ks
%include fragments/packages/virtual-machine-manager/packages.ks
%include fragments/packages/virtual-machine-manager/post-scripts.ks
%include fragments/initial-setup/server/config.ks
%include fragments/hypervisor/intelcpu.ks
%include fragments/repo/rawhide-mirrors.ks
%include ingredients/core/base.ks
%include ingredients/storage/standard.ks
%include ingredients/bootloader/grub.ks
%include ingredients/core/locale.ks
%include ingredients/core/services.ks
%include ingredients/core/network.ks
%include ingredients/packages/core-group.ks
%include ingredients/packages/fedora-remix.ks
%include ingredients/packages/hand-picked.ks
%include ingredients/core/security/enabled.ks
%include ingredients/packages/virtual-machine-manager/packages.ks
%include ingredients/packages/virtual-machine-manager/post-scripts.ks
%include ingredients/initial-setup/server/config.ks
%include ingredients/hypervisor/intelcpu.ks
%include ingredients/repo/rawhide-mirrors.ks
@@ -7,18 +7,18 @@
# A recipe for a desktop hypervisor
%include fragments/core/base.ks
%include fragments/storage/standard.ks
%include fragments/bootloader/grub.ks
%include fragments/core/locale.ks
%include fragments/core/services.ks
%include fragments/core/network.ks
%include fragments/packages/core-group.ks
%include fragments/packages/fedora-remix.ks
%include fragments/packages/hand-picked.ks
%include fragments/core/security/enabled.ks
%include fragments/packages/virtual-machine-manager/packages.ks
%include fragments/packages/virtual-machine-manager/post-scripts.ks
%include fragments/initial-setup/server/config.ks
%include fragments/hypervisor/intelcpu.ks
%include fragments/repo/rawhide-mirrors.ks
%include ingredients/core/base.ks
%include ingredients/storage/standard.ks
%include ingredients/bootloader/grub.ks
%include ingredients/core/locale.ks
%include ingredients/core/services.ks
%include ingredients/core/network.ks
%include ingredients/packages/core-group.ks
%include ingredients/packages/fedora-remix.ks
%include ingredients/packages/hand-picked.ks
%include ingredients/core/security/enabled.ks
%include ingredients/packages/virtual-machine-manager/packages.ks
%include ingredients/packages/virtual-machine-manager/post-scripts.ks
%include ingredients/initial-setup/server/config.ks
%include ingredients/hypervisor/intelcpu.ks
%include ingredients/repo/rawhide-mirrors.ks
@@ -7,18 +7,18 @@
# A recipe for a desktop hypervisor
%include fragments/core/base.ks
%include fragments/storage/standard.ks
%include fragments/bootloader/grub.ks
%include fragments/core/locale.ks
%include fragments/core/services.ks
%include fragments/core/network.ks
%include fragments/packages/core-group.ks
%include fragments/packages/fedora-remix.ks
%include fragments/packages/hand-picked.ks
%include fragments/core/security/enabled.ks
%include fragments/packages/virtual-machine-manager/packages.ks
%include fragments/packages/virtual-machine-manager/post-scripts.ks
%include fragments/initial-setup/server/config.ks
%include fragments/hypervisor/intelcpu.ks
%include fragments/repo/rawhide-mirrors.ks
%include ingredients/core/base.ks
%include ingredients/storage/standard.ks
%include ingredients/bootloader/grub.ks
%include ingredients/core/locale.ks
%include ingredients/core/services.ks
%include ingredients/core/network.ks
%include ingredients/packages/core-group.ks
%include ingredients/packages/fedora-remix.ks
%include ingredients/packages/hand-picked.ks
%include ingredients/core/security/enabled.ks
%include ingredients/packages/virtual-machine-manager/packages.ks
%include ingredients/packages/virtual-machine-manager/post-scripts.ks
%include ingredients/initial-setup/server/config.ks
%include ingredients/hypervisor/intelcpu.ks
%include ingredients/repo/rawhide-mirrors.ks
+14 -14
View File
@@ -7,17 +7,17 @@
# A recipe for a live desktop
%include fragments/shared/live/core/base.ks
%include fragments/shared/live/core/storage.ks
%include fragments/platform/generic-rawhide/bootloader/grub.ks
%include fragments/shared/core/locale.ks
%include fragments/shared/core/services.ks
%include fragments/shared/core/network.ks
%include fragments/shared/live/core/packages.ks
%include fragments/shared/live/post/base.ks
%include fragments/shared/live/post/session.ks
%include fragments/shared/initial-setup/desktop/config.ks
%include fragments/shared/desktop/gnome/config.ks
%include fragments/shared/desktop/gnome/packages.ks
%include fragments/shared/desktop/gnome/post-scripts.ks
%include fragments/platform/generic-rawhide/repo/rawhide-mirrors.ks
%include ingredients/shared/live/core/base.ks
%include ingredients/shared/live/core/storage.ks
%include ingredients/platform/generic-rawhide/bootloader/grub.ks
%include ingredients/shared/core/locale.ks
%include ingredients/shared/core/services.ks
%include ingredients/shared/core/network.ks
%include ingredients/shared/live/core/packages.ks
%include ingredients/shared/live/post/base.ks
%include ingredients/shared/live/post/session.ks
%include ingredients/shared/initial-setup/desktop/config.ks
%include ingredients/shared/desktop/gnome/config.ks
%include ingredients/shared/desktop/gnome/packages.ks
%include ingredients/shared/desktop/gnome/post-scripts.ks
%include ingredients/platform/generic-rawhide/repo/rawhide-mirrors.ks
+11 -11
View File
@@ -7,14 +7,14 @@
# A recipe for a live server
%include fragments/shared/live/core/base.ks
%include fragments/shared/live/core/storage.ks
%include fragments/platform/generic-rawhide/bootloader/grub.ks
%include fragments/shared/core/locale.ks
%include fragments/shared/core/services.ks
%include fragments/shared/core/network.ks
%include fragments/shared/live/core/packages.ks
%include fragments/shared/live/post/base.ks
%include fragments/shared/live/post/session.ks
%include fragments/shared/initial-setup/server/config.ks
%include fragments/platform/generic-rawhide/repo/rawhide-mirrors.ks
%include ingredients/shared/live/core/base.ks
%include ingredients/shared/live/core/storage.ks
%include ingredients/platform/generic-rawhide/bootloader/grub.ks
%include ingredients/shared/core/locale.ks
%include ingredients/shared/core/services.ks
%include ingredients/shared/core/network.ks
%include ingredients/shared/live/core/packages.ks
%include ingredients/shared/live/post/base.ks
%include ingredients/shared/live/post/session.ks
%include ingredients/shared/initial-setup/server/config.ks
%include ingredients/platform/generic-rawhide/repo/rawhide-mirrors.ks
+11 -11
View File
@@ -7,14 +7,14 @@
# A recipe for a virtual desktop
%include fragments/shared/core/base.ks
%include fragments/shared/storage/standard.ks
%include fragments/platform/generic-43/bootloader/grub.ks
%include fragments/shared/core/locale.ks
%include fragments/shared/core/services.ks
%include fragments/shared/core/network.ks
%include fragments/shared/packages/core-group.ks
%include fragments/shared/packages/fedora-remix.ks
%include fragments/shared/packages/hand-picked.ks
%include fragments/shared/initial-setup/server/config.ks
%include fragments/platform/generic-43/repo/fedora-mirrors.ks
%include ingredients/shared/core/base.ks
%include ingredients/shared/storage/standard.ks
%include ingredients/platform/generic-43/bootloader/grub.ks
%include ingredients/shared/core/locale.ks
%include ingredients/shared/core/services.ks
%include ingredients/shared/core/network.ks
%include ingredients/shared/packages/core-group.ks
%include ingredients/shared/packages/fedora-remix.ks
%include ingredients/shared/packages/hand-picked.ks
%include ingredients/shared/initial-setup/server/config.ks
%include ingredients/platform/generic-43/repo/fedora-mirrors.ks
+11 -11
View File
@@ -7,14 +7,14 @@
# A recipe for a virtual server
%include fragments/shared/core/base.ks
%include fragments/shared/storage/standard.ks
%include fragments/platform/generic-43/bootloader/grub.ks
%include fragments/shared/core/locale.ks
%include fragments/shared/core/services.ks
%include fragments/shared/core/network.ks
%include fragments/shared/packages/core-group.ks
%include fragments/shared/packages/fedora-remix.ks
%include fragments/shared/packages/hand-picked.ks
%include fragments/shared/initial-setup/server/config.ks
%include fragments/platform/generic-rawhide/repo/rawhide-mirrors.ks
%include ingredients/shared/core/base.ks
%include ingredients/shared/storage/standard.ks
%include ingredients/platform/generic-43/bootloader/grub.ks
%include ingredients/shared/core/locale.ks
%include ingredients/shared/core/services.ks
%include ingredients/shared/core/network.ks
%include ingredients/shared/packages/core-group.ks
%include ingredients/shared/packages/fedora-remix.ks
%include ingredients/shared/packages/hand-picked.ks
%include ingredients/shared/initial-setup/server/config.ks
%include ingredients/platform/generic-rawhide/repo/rawhide-mirrors.ks
+6 -6
View File
@@ -27,9 +27,9 @@ def project_root():
@pytest.fixture
def fragments_dir(project_root):
"""Return fragments directory."""
return project_root / 'fragments'
def ingredients_dir(project_root):
"""Return ingredients directory."""
return project_root / 'ingredients'
@pytest.fixture
@@ -39,9 +39,9 @@ def recipes_dir(project_root):
@pytest.fixture
def fragments(fragments_dir):
"""List all .ks fragment files."""
return list(fragments_dir.glob('**/*.ks'))
def ingredients(ingredients_dir):
"""List all .ks ingredient files."""
return list(ingredients_dir.glob('**/*.ks'))
@pytest.fixture
+14 -14
View File
@@ -13,7 +13,7 @@ import os
PROJECT_ROOT = Path('/home/lukas/Code/virt/phyllomeos')
RECIPE_GENERATOR_DIR = PROJECT_ROOT / 'recipe-generator'
RECIPE_DIR = PROJECT_ROOT / 'recipes'
FRAGMENTS_DIR = PROJECT_ROOT / 'fragments'
INGREDIENTS_DIR = PROJECT_ROOT / 'ingredients'
CONTAINER_DIR = PROJECT_ROOT / 'tests' / 'container'
@@ -73,25 +73,25 @@ def test_container_build():
pytest.fail(f"Container build failed: {result.stderr}")
def test_fragments_structure():
"""Verify fragment directory structure."""
def test_ingredients_structure():
"""Verify ingredient directory structure."""
# Check core directories
assert (FRAGMENTS_DIR / 'core' / 'security').exists()
assert (INGREDIENTS_DIR / 'core' / 'security').exists()
# Check desktop directories
assert (FRAGMENTS_DIR / 'desktop' / 'gnome').exists()
assert (FRAGMENTS_DIR / 'desktop' / 'labwc').exists()
assert (INGREDIENTS_DIR / 'desktop' / 'gnome').exists()
assert (INGREDIENTS_DIR / 'desktop' / 'labwc').exists()
# vmm is now in virtual-machine-manager directory (under packages)
# assert (FRAGMENTS_DIR / 'desktop' / 'vmm').exists()
# assert (INGREDIENTS_DIR / 'desktop' / 'vmm').exists()
# Check hypervisor directories
assert (FRAGMENTS_DIR / 'hypervisor' / 'base').exists()
assert (FRAGMENTS_DIR / 'hypervisor' / 'base').exists()
assert (INGREDIENTS_DIR / 'hypervisor' / 'base').exists()
assert (INGREDIENTS_DIR / 'hypervisor' / 'base').exists()
# Check live directories
assert (FRAGMENTS_DIR / 'live' / 'core' / 'bootloader').exists()
assert (FRAGMENTS_DIR / 'live' / 'post').exists()
assert (INGREDIENTS_DIR / 'live' / 'core' / 'bootloader').exists()
assert (INGREDIENTS_DIR / 'live' / 'post').exists()
# Count fragments
fragment_count = len(list(FRAGMENTS_DIR.glob('**/*.ks')))
assert fragment_count >= 45, f"Expected at least 45 fragments, found {fragment_count}"
# Count ingredients
ingredient_count = len(list(INGREDIENTS_DIR.glob('**/*.ks')))
assert ingredient_count >= 45, f"Expected at least 45 ingredients, found {ingredient_count}"
+17 -17
View File
@@ -59,10 +59,10 @@ class TestRecipeGenerator:
storage='standard',
security='secure')
assert '# An install recipe for desktop, server, or hypervisor' in content
assert '%include fragments/core/base.ks' in content
assert '%include fragments/desktop/gnome/packages.ks' in content
assert '%include fragments/repo/fedora-43-mirrors.ks' in content
assert '%include fragments/core/security/enabled.ks' in content
assert '%include ingredients/core/base.ks' in content
assert '%include ingredients/desktop/gnome/packages.ks' in content
assert '%include ingredients/repo/fedora-43-mirrors.ks' in content
assert '%include ingredients/core/security/enabled.ks' in content
def test_generate_virtual_desktop_encrypted(self):
"""Test generating encrypted desktop recipe."""
@@ -70,7 +70,7 @@ class TestRecipeGenerator:
desktop='gnome',
storage='encrypted',
security='secure')
assert '%include fragments/storage/encrypted.ks' in content
assert '%include ingredients/storage/encrypted.ks' in content
def test_generate_virtual_desktop_labwc(self):
"""Test generating LabWC desktop recipe."""
@@ -78,8 +78,8 @@ class TestRecipeGenerator:
desktop='labwc',
storage='standard',
security='secure')
assert '%include fragments/desktop/labwc/config.ks' in content
assert '%include fragments/desktop/gnome/packages.ks' not in content
assert '%include ingredients/desktop/labwc/config.ks' in content
assert '%include ingredients/desktop/gnome/packages.ks' not in content
def test_generate_virtual_desktop_devel(self):
"""Test generating development mode desktop recipe."""
@@ -87,7 +87,7 @@ class TestRecipeGenerator:
desktop='gnome',
storage='standard',
security='off')
assert '%include fragments/core/security/disabled.ks' in content
assert '%include ingredients/core/security/disabled.ks' in content
def test_generate_virtual_server(self):
"""Test generating server recipe."""
@@ -95,7 +95,7 @@ class TestRecipeGenerator:
initial_setup='server',
security='secure')
assert '# An install recipe for desktop, server, or hypervisor' in content
assert '%include fragments/initial-setup/server/config.ks' in content
assert '%include ingredients/initial-setup/server/config.ks' in content
def test_generate_desktop_hypervisor_amd(self):
"""Test generating AMD CPU hypervisor recipe."""
@@ -104,8 +104,8 @@ class TestRecipeGenerator:
hypervisor='base',
hypervisor_type='amdcpu',
security='secure')
assert '%include fragments/hypervisor/amdcpu.ks' in content
assert '%include fragments/hypervisor/intelcpu.ks' not in content
assert '%include ingredients/hypervisor/amdcpu.ks' in content
assert '%include ingredients/hypervisor/intelcpu.ks' not in content
def test_generate_desktop_hypervisor_intel_gpu(self):
"""Test generating Intel CPU+GPU hypervisor recipe."""
@@ -114,7 +114,7 @@ class TestRecipeGenerator:
hypervisor='base',
hypervisor_type='intelcpu',
security='secure')
assert '%include fragments/hypervisor/intelcpu.ks' in content
assert '%include ingredients/hypervisor/intelcpu.ks' in content
def test_generate_live_desktop(self):
"""Test generating live desktop recipe."""
@@ -122,15 +122,15 @@ class TestRecipeGenerator:
desktop='gnome',
security='secure')
assert '# A live recipe for live-desktop or live-server' in content
assert '%include fragments/live/core/base.ks' in content
assert '%include fragments/live/core/storage.ks' in content
assert '%include ingredients/live/core/base.ks' in content
assert '%include ingredients/live/core/storage.ks' in content
def test_generate_live_server(self):
"""Test generating live server recipe."""
content = self.generator.generate_recipe('live', 'rawhide',
security='secure')
assert '# A live recipe for live-desktop or live-server' in content
assert '%include fragments/live/core/base.ks' in content
assert '%include ingredients/live/core/base.ks' in content
def test_no_duplicate_includes(self):
"""Test that duplicate includes are prevented."""
@@ -144,13 +144,13 @@ class TestRecipeGenerator:
assert len(paths) == len(set(paths)), "Found duplicate %include entries"
def test_missing_ingredient_detection(self):
"""Test that missing fragments are detected."""
"""Test that missing ingredients are detected."""
content = self.generator.generate_recipe('install', '43',
desktop='gnome',
storage='standard',
security='secure')
issues = self.generator.validate_recipe(content)
assert issues == [], f"Found missing fragments: {issues}"
assert issues == [], f"Found missing ingredients: {issues}"
def test_filename_generation_standard(self):
"""Test filename generation for standard configuration."""