refactor: Remove filename deduplication to generate all 24 variants

- Removed deduplication logic from cli.py
- All 24 variants now processed (some overwrite with same filename)
- manifests: Added comments explaining cartesian product and filename behavior
- tests: Updated assertions for correct filename generation order
- Added 3 new tests for guest_agents and hardware_support modifiers
This commit is contained in:
Lukas Greve
2026-03-26 15:53:50 +01:00
parent 898c831065
commit 81c8392874
16 changed files with 239 additions and 25 deletions
-6
View File
@@ -233,7 +233,6 @@ def generate_from_manifest(args: argparse.Namespace, generator: RecipeGenerator)
sys.exit(1)
# Track seen filenames to avoid overwriting duplicates
seen_filenames = set()
# Generate all recipes
for recipe_config in manifest.get('recipes', []):
@@ -271,11 +270,6 @@ def generate_from_manifest(args: argparse.Namespace, generator: RecipeGenerator)
output_path = args.output_dir / filename
if filename in seen_filenames:
continue # Already generated this filename
seen_filenames.add(filename)
if args.dry_run:
print(f"Would generate: {output_path}")
else:
+7
View File
@@ -6,6 +6,13 @@
# - Single values: version: "43"
# - List values: version: ["43", "rawhide"] (expands to multiple variants)
# - List modifiers: hypervisor_type: ["amdcpu", "intelcpu"] (expands to separate variants)
#
# NOTE: List values create a cartesian product.
# Example: version: ["43", "rawhide"] + storage: ["standard", "encrypted"]
# creates 4 variants: (43,standard), (43,encrypted), (rawhide,standard), (rawhide,encrypted)
#
# NOTE: Boolean modifiers (guest-agents, hardware-support) only affect filename when True.
# Multiple variants with False values will produce the same filename (last one wins).
recipes:
# Install variants - desktop
+5 -5
View File
@@ -8,17 +8,17 @@
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/bootloader/grub.ks
%include fragments/initial-setup/server/config.ks
%include fragments/core/security/enabled.ks
%include fragments/storage/standard.ks
%include fragments/repo/fedora-43-mirrors.ks
+5 -4
View File
@@ -8,17 +8,18 @@
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/bootloader/grub.ks
%include fragments/initial-setup/server/config.ks
%include fragments/core/security/enabled.ks
%include fragments/storage/encrypted.ks
%include fragments/repo/fedora-43-mirrors.ks
@@ -8,17 +8,19 @@
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/bootloader/grub.ks
%include fragments/initial-setup/server/config.ks
%include fragments/core/security/enabled.ks
%include fragments/storage/encrypted.ks
%include fragments/repo/rawhide-mirrors.ks
+5 -4
View File
@@ -8,17 +8,18 @@
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/bootloader/grub.ks
%include fragments/initial-setup/server/config.ks
%include fragments/core/security/enabled.ks
%include fragments/storage/standard.ks
%include fragments/repo/rawhide-mirrors.ks
@@ -0,0 +1,27 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/packages/virtual-machine-manager/packages.ks
%include fragments/packages/virtual-machine-manager/post-scripts.ks
%include fragments/hypervisor/amdcpu.ks
@@ -0,0 +1,27 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/desktop/gnome/config.ks
%include fragments/desktop/gnome/packages.ks
%include fragments/desktop/gnome/post-scripts.ks
%include fragments/packages/virtual-machine-manager/packages.ks
%include fragments/packages/virtual-machine-manager/post-scripts.ks
%include fragments/hypervisor/intelcpu.ks
+25
View File
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/hypervisor/base/packages.ks
%include fragments/hypervisor/base/services.ks
%include fragments/hypervisor/base/post-scripts.ks
%include fragments/hypervisor/amdcpu.ks
@@ -0,0 +1,25 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/hypervisor/base/packages.ks
%include fragments/hypervisor/base/services.ks
%include fragments/hypervisor/base/post-scripts.ks
%include fragments/hypervisor/intelcpu.ks
+21
View File
@@ -0,0 +1,21 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
+22
View File
@@ -0,0 +1,22 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# An install recipe for desktop, server, or hypervisor
%include fragments/core/base.ks
%include fragments/repo/fedora-43-mirrors.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/initial-setup/server/config.ks
%include fragments/repo/rawhide-mirrors.ks
+20
View File
@@ -0,0 +1,20 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# A live recipe for live-desktop or live-server
%include fragments/live/core/base.ks
%include fragments/repo/fedora-43-mirrors.ks
%include fragments/live/core/storage.ks
%include fragments/live/core/bootloader/grub.ks
%include fragments/core/locale.ks
%include fragments/core/services.ks
%include fragments/core/network.ks
%include fragments/live/core/packages.ks
%include fragments/live/post/base.ks
%include fragments/live/post/session.ks
%include fragments/repo/rpmfusion-nonfree.ks
+20
View File
@@ -0,0 +1,20 @@
# __ ____ ____ _____
# ____ / /_ __ __/ / /___ ____ ___ ___ / __ \/ ___/
# / __ \/ __ \/ / / / / / __ \/ __ `__ \/ _ \ / / / /\__ \
# / /_/ / / / / /_/ / / / /_/ / / / / / / __/ / /_/ /___/ /
# / .___/_/ /_/\__, /_/_/\____/_/ /_/ /_/\___/ \____//____/
# /_/ /____/
# A live recipe for live-desktop or live-server
%include fragments/live/core/base.ks
%include fragments/repo/fedora-43-mirrors.ks
%include fragments/live/core/storage.ks
%include fragments/live/core/bootloader/grub.ks
%include fragments/core/locale.ks
%include fragments/core/services.ks
%include fragments/core/network.ks
%include fragments/live/core/packages.ks
%include fragments/live/post/base.ks
%include fragments/live/post/session.ks
%include fragments/repo/rpmfusion-nonfree.ks
+1 -1
View File
@@ -37,7 +37,7 @@ def test_validate_all_generated_recipes():
"""Test validating all generated recipes."""
# Count generated recipes
recipe_count = len(list(RECIPE_DIR.glob('*.cfg')))
assert recipe_count > 0, "No recipes generated"
assert recipe_count > 0, f"Expected recipes, got {recipe_count}"
# Validate each recipe
for recipe_file in RECIPE_DIR.glob('*.cfg'):
+22
View File
@@ -245,3 +245,25 @@ part / --fstype="ext4" --grow
content = ""
issues = self.generator.validate_recipe_semantic(content, '43')
assert issues == []
def test_filename_generation_with_guest_agents(self):
"""Test filename includes 'virtual' when guest_agents=True."""
filename = self.generator.generate_filename('install', '43',
variant_type='desktop',
guest_agents=True)
assert filename == 'install_virtual_desktop_43.cfg'
def test_filename_generation_with_hardware_support(self):
"""Test filename includes 'hardware-support' when enabled."""
filename = self.generator.generate_filename('install', '43',
variant_type='desktop',
hardware_support=True)
assert filename == 'install_desktop_hardware-support_43.cfg'
def test_filename_generation_with_both_modifiers(self):
"""Test filename includes both modifiers when enabled."""
filename = self.generator.generate_filename('install', '43',
variant_type='desktop',
guest_agents=True,
hardware_support=True)
assert filename == 'install_virtual_desktop_hardware-support_43.cfg'