Commit Graph
702 Commits
Author SHA1 Message Date
Lukas Greve cd442c555f fix: add grub2-tools-minimal so grub2-common %posttrans does not fail the transaction 2026-09-05 21:27:16 +02:00
Lukas Greve 6e040e05a7 fix: include weak dependencies to prevent scriptlet failures 2026-09-05 21:17:01 +02:00
Lukas Greve 8a6a97559d feat: enable Fedora 44 server variant with systemd-boot
- re-enable the commented-out server recipe group
- repository: Fedora 44 only (was 43/rawhide)
- bootloader: systemd-boot (was grub)
- explicit initial-setup: server choice
- yields dish server_44_standard_systemd-boot_server_guest-agents.cfg
2026-09-05 13:51:16 +02:00
Lukas Greve 8ad3589223 feat: add Fedora 44 support alongside Fedora 43
- add fedora-44-mirrors ingredient and register it in the repository choices
- expand the desktop variant matrix to [43, 44, rawhide] (48 dishes)
- bump CI workflows and deploy fallback URL to Fedora 44
- cover both release repositories in tests
2026-09-04 13:55:24 +02:00
Lukas Greve c7142ac43a ci: build ISO from generated desktop dish via make all
- both ISO workflows run the new single 'make all' pipeline (they
  previously referenced the removed recipe-generator/ directory and
  nonexistent live kickstarts) and build from the generated
  desktop_43_standard_grub_gnome_guest-agents dish
- README: document the data-driven cooking pipeline (manifest +
  templates + make all), generated build products, and updated
  deploy/dish examples
2026-08-30 12:09:52 +02:00
Lukas Greve 73dd52e04e feat(deploy): generate dishes before deploy and fix dish selection
- deploy.sh now runs 'make all' in cook/ before deploying, since dishes
  are build products no longer tracked in git; failures show the make
  output and abort
- deploy-distro.sh selects dishes by the *guest-agents* marker (the new
  naming replaced the virtual* prefix) and uses --os-variant
  fedora-unknown instead of the stale fedora41 pin
2026-08-30 12:09:47 +02:00
Lukas Greve ae6eef4045 refactor(cook): data-driven recipe generation with in-process flatten and lint
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
2026-08-30 12:09:42 +02:00
Lukas Greve 842f754681 bump kickstart version 2026-03-30 20:31:13 +02:00
Lukas Greve bbdbef980b fix path 2026-03-30 20:30:17 +02:00
Lukas Greve 1ea58e3452 remove handling of security as special case 2026-03-30 20:30:11 +02:00
Lukas Greve 5fcbdc2e9d Restore earlier README.md version and remove DEV guides for now 2026-03-30 20:02:58 +02:00
Lukas Greve 2fd464dd5c Fix path to match repo reorg 2026-03-30 17:28:45 +02:00
Lukas Greve 626f0f9110 updated recipes and dishes 2026-03-30 17:19:27 +02:00
Lukas Greve ca316af700 Fix repository in name generation and templates so that rawhide variants are correctly generated 2026-03-30 17:16:32 +02:00
Lukas Greve 3efe5c2ee2 Updated generated dishes and recipes 2026-03-28 21:53:30 +01:00
Lukas Greve d2bba00600 simplify f43 key 2026-03-28 21:53:01 +01:00
Lukas Greve 833446a000 remove unused security part 2026-03-28 21:52:13 +01:00
Lukas Greve 55d0a9f649 Extend Makefile to allow for the cleaning of recipes and dishes 2026-03-28 21:51:52 +01:00
Lukas Greve b2c14dbcca Change filename generation variant order 2026-03-28 21:50:34 +01:00
Lukas Greve 464fd8c158 remove old python scripts and add new updated recipes 2026-03-27 19:34:05 +01:00
Lukas Greve e9615b524d Add recipe generator and dish flattener
- create generate_recipe.py for universal template recipe generation
- support cartesian product expansion from recipes_manifest.yaml
- generate 72 unique recipes with proper filename disambiguation
- update Makefile with simplified validation using ksflatten
- keep ksflatten-relative script as-is for dish flattening

The generator reads recipe_templates.yaml and recipes_manifest.yaml to
produce recipe files that ksflatten then flattens into final dishes.
2026-03-27 19:29:27 +01:00
Lukas Greve 6f5d7478be Fix duplicate storage configuration in recipes
- Move storage options from 'modifiers' to 'required' in recipe_templates.yaml
- Changed required.storage from {'ext4': storage/standard.ks} to {'standard': ..., 'encrypted': ...}
- Removed storage from modifiers section
- This ensures storage: encrypted recipes include only storage/encrypted.ks
- Updated generated recipes and dishes to reflect the fix
2026-03-27 16:06:57 +01:00
Lukas Greve a4bc2967e5 Change: Update recipe generation to use single universal template
- Transition from multi-template (install/live recipe types) to single universal template (proteus)
- Remove recipe_type parameter from RecipeGenerator
- Update manifest format (remove recipe_type field)
- Simplify CLI (remove --type argument, use --output for single generation)
- Filename generation now uses primary modifier as first component
2026-03-27 15:39:30 +01:00
Lukas Greve 3ffb079981 refactor: Move recipe generator to cook/ directory and fix flattening bugs
- Move recipe-generator/ to cook/ for cleaner structure

- Fix ksflatten-relative path conversion to handle all %include paths

- Fix validation exit code to only fail on actual errors

- All recipes now generate and flatten successfully via make all
2026-03-27 14:02:59 +01:00
Lukas Greve 288ed0a249 refactor: Simplify template logic - reduce from 6 to 3 categories, remove variant_type, keep validation, remove tests
Simplified template logic: reduced from 6 categories (required, modifiers, optional, versioned, conditional, flags) to 3 categories (required, modifiers, optional). Removed variant_type and replaced with modifier-based approach (version, bootloader replaced, hardware_support). All validation methods kept for recipe generation and validation. Removed tests directory (tests/test_recipe_generator.py, tests/integration/, tests/container/). Removed non-ISO workflows (validate-recipes, test-generation, container-tests, validate-ingredients). Updated Makefile, requirements.txt, and documentation. All 20 recipes successfully generated, validated, and flattened.
2026-03-27 12:13:51 +01:00
Lukas Greve 789e0e05d4 refactor: Remove deprecated ingredients_dir parameter from RecipeGenerator
Simplify RecipeGenerator.__init__() to accept only templates_file parameter.
The old two-argument pattern RecipeGenerator(ingredients_dir, templates_file)
is no longer supported. All existing code already uses the new single-argument
style.

Changes:
- Remove ingredients_dir_or_templates parameter
- Remove backward compatibility logic
- Remove unused Optional import
- Update DEVELOPMENT.md example

Migration: Change RecipeGenerator(Path('ingredients'), Path('templates.yaml'))
           to RecipeGenerator(Path('templates.yaml'))
2026-03-27 11:07:53 +01:00
Lukas Greve 0a3c2b14d8 docs: Add comprehensive documentation to recipe generator
Add detailed docstrings and inline comments to all recipe generator modules explaining classes, functions, and complex logic in plain English.

Files updated:
- recipe-generator/recipe_generator.py: Module, class, and method docs
- recipe-generator/cli.py: CLI modes, arguments, and workflow docs
- recipe-generator/validators.py: Three-layer validation architecture docs
- recipe-generator/manifest.py: Manifest processing and variant expansion docs
- recipe-generator/generate_recipe.py: Entry point documentation
2026-03-27 11:07:16 +01:00
Lukas Greve 31955a8983 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)
2026-03-26 20:27:56 +01:00
Lukas Greve 3eb4c75392 refactor: fix linting issues - remove unused kwargs, fix unused variable, and make method public 2026-03-26 19:26:31 +01:00
Lukas Greve 050f41787b Deleted extra dishes 2026-03-26 16:10:16 +01:00
Lukas Greve 05d611276d fix: Add _bare-metal suffix for False boolean modifiers to prevent filename collisions
The manifest uses hyphenated keys (guest-agents, hardware-support) but the filename
generation was looking for underscored keys, causing 16 variants to overwrite 4 files.

Added _get_modifier() helper to normalize both key formats and added _bare-metal suffix
for False values of guest_agents, ensuring unique filenames for all variant combinations.

This restores the intended 24 distinct variants from the manifest and adds support for
all modifiers (bootloader, initial-setup, desktop, security, storage, guest_agents, hardware_support).
2026-03-26 16:09:28 +01:00
Lukas Greve 81c8392874 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
2026-03-26 15:53:50 +01:00
Lukas Greve 898c831065 refactor: Modularize recipe generator
- Split generate_recipe.py into cli.py, recipe_generator.py, validators.py, manifest.py
- Removed override logic - modifiers now add fragments rather than replace
- Added filename deduplication to prevent overwriting recipes
- Updated CI workflows and tests to use new module structure
- Made pykickstart a hard dependency
- Removed ingredients/ directory support (only fragments/*.ks now used)
- New layout: 5 modules (~990 lines) vs single 769-line file
2026-03-26 15:31:18 +01:00
Lukas Greve 8f824cb977 Remove deprecated command tracking from generate_recipe
- Remove DEPRECATED_COMMANDS dictionary
- Remove _check_deprecated_commands() method
- Remove deprecated command checks from validation
- Remove test methods for deprecated commands
- Remove DEPRECATED_COMMANDS documentation reference

This shifts responsibility for tracking deprecated kickstart commands away
from the recipe generator, as this is not its primary role.
2026-03-26 14:29:22 +01:00
Lukas Greve d93e84cb09 Fix duplicate storage partitioning when storage=encrypted is defined 2026-03-26 14:13:01 +01:00
Lukas Greve 7f2f150fd2 Automate flattening: convert %ksappend to %include for ksflatten compatibility 2026-03-26 14:04:52 +01:00
Lukas Greve 8c0c3907d4 minor change for where the bootloader is 2026-03-26 11:19:09 +01:00
Lukas Greve 5c9a2535df minor change for where the bootloader is 2026-03-26 11:10:36 +01:00
Lukas Greve f6809e8756 Make initial-setup required in install template, with server as default
- Add initial-setup to required section in install template
- Default: fragments/initial-setup/server/config.ks
- Override: fragments/initial-setup/{desktop|gnome|generic-wayland}/config.ks
- Add initial-setup to override_keys set
2026-03-26 11:09:28 +01:00
Lukas Greve b97b9bb919 Make version required in core, with 43 as default
- Add version to required section in install and live templates
- Set 43 as default version (overridable via modifiers)
- Update CLI default from rawhide to 43
2026-03-26 11:06:29 +01:00
Lukas Greve c2829dc614 Add bootloader modifier to install template
- Add bootloader modifier following security pattern (override, not additive)
- Supports 'grub' and 'systemd-boot' options
- Default uses grub from required, override via modifier

Closes #issue
2026-03-26 10:57:42 +01:00
Lukas Greve 9c905ee3de Move security from modifiers to required in install template
- Security is now enabled by default in all install recipes
- Add override handling to skip required fragment when modifier sets security
- Fix modifier key lookup to handle both hyphen and underscore keys

Closes #issue
2026-03-26 10:49:45 +01:00
Lukas Greve 91cb314467 Reduces the number of generated variants 2026-03-26 10:39:46 +01:00
Lukas Greve c193914435 Fix duplicate recipe filenames by adding hardware-support, guest-agents, and hypervisor-type suffixes
Previously, list modifiers like hardware-support, guest-agents, and hypervisor-type created multiple variants but overwrote the same filenames. Now:

1. Add '_hw' suffix when hardware-support is enabled
2. Add '_ga' suffix when guest-agents is enabled
3. Add CPU type (amdcpu, intelcpu) suffix for hypervisor variants
4. Normalize modifier names from hypervisor-type to hypervisor_type

This ensures all 144 recipes have unique filenames.
2026-03-26 10:34:35 +01:00
Lukas Greve cd203b8799 Refactor security and guest-agents config
- Move guest-agents from hypervisor modifier to independent optional feature
- Merge guest-agents/gui.ks into base.ks
- Remove security from required, add optional security modifier with off option
- Fix hypervisor-type modifier key normalization (underscore→hyphen)
- Add expand_variants() to handle list values in manifest
- Update all tests and expected recipes
2026-03-25 21:18:01 +01:00
Lukas Greve 5b8974a6ed hypervisor: implement base vs desktop variants with GUI packages only for desktop
- Split guest-agents/packages.ks into base.ks (qemu-guest-agent) and gui.ks (spice-vdagent)
- Move hypervisor modifier from variant_type.hypervisor to dedicated modifier section
- Added hypervisor modifier with base (headless) and desktop (GUI) options
- Create hypervisor-desktop variant with desktop: gnome for GUI hypervisors
- Update generate_recipe.py to recognize hypervisor-desktop variant name

This ensures GUI packages (virt-manager, spice-vdagent) are only included
in hypervisors with desktop environments, keeping headless hypervisors minimal.
2026-03-25 20:06:13 +01:00
Lukas Greve 0843127d6a Reorganize fragments: flat structure from fragments/shared/ and fragments/platform/ 2026-03-25 19:40:07 +01:00
Lukas Greve 520657dcee recipe-generator: Update to new template structure with install and live templates
- Replaced individual templates with unified 'install' (desktop, server, hypervisor) and 'live' (live-desktop, live-server) templates

- Added new modifiers: variant_type, hypervisor-type, desktop, initial-setup, virtualization

- Updated generate_recipe.py to handle new modifier structure with additive flags

- Updated recipes_manifest.yaml with new modifier structure

- Added missing fragment files and directories
2026-03-25 19:15:32 +01:00
Lukas Greve 3782777058 refactor: functional separation with deploy/, recipe-generator/, and bin/
- deploy/: deployment bash scripts (4 files)
- recipe-generator/: recipe generation tool (Python + YAML configs)
- bin/: executable wrappers (single generate-recipe entry point)
- Updated deploy.sh, README.md, DEVELOPMENT.md, DEVELOPMENT_QUICK.md
- Updated tests/test_recipe_generator.py and tests/integration/test_integration.py
- Updated CI workflow and Makefile paths
- All 41 tests pass
2026-03-25 09:34:00 +01:00
Lukas Greve 00c4356ff3 Add DEVELOPMENT.md and DEVELOPMENT_QUICK.md
DEVELOPMENT.md comprehensive guide for contributors covering:
- Architecture overview
- Development environment setup
- Fragment development (54 modular .ks files)
- Recipe generation via manifest + templates
- Testing suite (36+ tests)
- CI/CD workflows
- Common workflows + Migration Guide

DEVELOPMENT_QUICK.md quick reference companion
2026-03-24 21:43:01 +01:00