diff --git a/ebuild/packages/recipe.py b/ebuild/packages/recipe.py index 6cbdb38..c75aaeb 100644 --- a/ebuild/packages/recipe.py +++ b/ebuild/packages/recipe.py @@ -89,6 +89,23 @@ def validate(self) -> None: f"Must be one of {self.VALID_BUILD_SYSTEMS}." ) + def to_dict(self) -> Dict[str, Any]: + """Serialize the recipe using the canonical YAML recipe schema.""" + return { + "package": self.name, + "version": self.version, + "description": self.description, + "license": self.license, + "url": self.url, + "checksum": self.checksum, + "build": self.build_system, + "dependencies": list(self.dependencies), + "patches": list(self.patches), + "configure_args": list(self.configure_args), + "build_args": list(self.build_args), + "install_args": list(self.install_args), + } + def _parse_string_list( raw: Dict[str, Any], diff --git a/tests/unit/test_recipe.py b/tests/unit/test_recipe.py new file mode 100644 index 0000000..e7b1f3b --- /dev/null +++ b/tests/unit/test_recipe.py @@ -0,0 +1,21 @@ +from ebuild.packages.recipe import PackageRecipe + + +def test_package_recipe_to_dict_uses_canonical_schema(): + recipe = PackageRecipe( + name="demo", + version="1.0.0", + url="https://example.com/demo.tar.gz", + build_system="cmake", + dependencies=["dep"], + ) + + data = recipe.to_dict() + + assert data["package"] == "demo" + assert data["version"] == "1.0.0" + assert data["url"] == "https://example.com/demo.tar.gz" + assert data["build"] == "cmake" + assert data["dependencies"] == ["dep"] + assert "name" not in data + assert "build_system" not in data \ No newline at end of file