diff --git a/examples/extensions/README.md b/examples/extensions/README.md index 42c7fe29..9163001f 100644 --- a/examples/extensions/README.md +++ b/examples/extensions/README.md @@ -6,4 +6,4 @@ ### [Use custom deployers](extensions/deployers/) -- Learn how to create a custom deployer in Conan. [Docs](https://docs.conan.io/2/reference/extensions/deployers.html) +- Learn how to create a custom deployer in Conan. [Docs](https://docs.conan.io/2/reference/extensions/deployers.html) \ No newline at end of file diff --git a/examples/extensions/deployers/metadata/conanfile.py b/examples/extensions/deployers/metadata/conanfile.py new file mode 100644 index 00000000..f8de6337 --- /dev/null +++ b/examples/extensions/deployers/metadata/conanfile.py @@ -0,0 +1,9 @@ +from conan import ConanFile + + +class App(ConanFile): + name = "app" + version = "1.0" + + def requirements(self): + self.requires("pkg1/1.0") diff --git a/examples/extensions/deployers/metadata/metadata_deploy.py b/examples/extensions/deployers/metadata/metadata_deploy.py new file mode 100644 index 00000000..bae05c9d --- /dev/null +++ b/examples/extensions/deployers/metadata/metadata_deploy.py @@ -0,0 +1,12 @@ +import os +import shutil + + +def deploy(graph, output_folder, **kwargs): + # Note the kwargs argument is mandatory to be robust against future changes. + conanfile = graph.root.conanfile + for name, dep in conanfile.dependencies.items(): + shutil.copytree(dep.package_metadata_folder, + os.path.join(output_folder, "dependencies_metadata", "packages", dep.ref.name, dep.pref.package_id)) + shutil.copytree(dep.recipe_metadata_folder, + os.path.join(output_folder, "dependencies_metadata", "recipes", dep.ref.name)) diff --git a/examples/extensions/deployers/metadata/pkg1/conanfile.py b/examples/extensions/deployers/metadata/pkg1/conanfile.py new file mode 100644 index 00000000..2ac48698 --- /dev/null +++ b/examples/extensions/deployers/metadata/pkg1/conanfile.py @@ -0,0 +1,18 @@ +import os + +from conan import ConanFile +from conan.tools.files import save, copy + + +class Pkg1(ConanFile): + name = "pkg1" + version = "1.0" + + requires = "pkg2/1.0" + + def source(self): + save(self, os.path.join(self.recipe_metadata_folder, "logs", "src.log"), f"srclog {self.name}!!!") + + def build(self): + save(self, "buildlog.txt", f"some logs {self.name}!!!") + copy(self, "buildlog.txt", src=self.build_folder, dst=os.path.join(self.package_metadata_folder, "logs")) diff --git a/examples/extensions/deployers/metadata/pkg2/conanfile.py b/examples/extensions/deployers/metadata/pkg2/conanfile.py new file mode 100644 index 00000000..17525e79 --- /dev/null +++ b/examples/extensions/deployers/metadata/pkg2/conanfile.py @@ -0,0 +1,16 @@ +import os + +from conan import ConanFile +from conan.tools.files import save, copy + + +class Pkg2(ConanFile): + name = "pkg2" + version = "1.0" + + def source(self): + save(self, os.path.join(self.recipe_metadata_folder, "logs", "src.log"), f"srclog {self.name}!!!") + + def build(self): + save(self, "buildlog.txt", f"some logs {self.name}!!!") + copy(self, "buildlog.txt", src=self.build_folder, dst=os.path.join(self.package_metadata_folder, "logs")) diff --git a/examples/extensions/deployers/metadata/run_example.py b/examples/extensions/deployers/metadata/run_example.py new file mode 100644 index 00000000..97153d90 --- /dev/null +++ b/examples/extensions/deployers/metadata/run_example.py @@ -0,0 +1,24 @@ +import os +import shutil +from test.examples_tools import run, tmp_dir + +with tmp_dir("metadata_tmp"): + shutil.copytree("../pkg1", "./pkg1") + shutil.copytree("../pkg2", "./pkg2") + shutil.copy("../conanfile.py", "./conanfile.py") + shutil.copy("../metadata_deploy.py", "./metadata_deploy.py") + run("conan create pkg1") + run("conan create pkg2") + output = run("conan install . --deployer=metadata_deploy") + # Our requirements should now be in here + dependency_folders = os.listdir("dependencies_metadata") + assert "recipes" in dependency_folders + assert "packages" in dependency_folders + + recipe_folders = os.listdir("dependencies_metadata/recipes") + assert "pkg1" in recipe_folders + assert "pkg2" in recipe_folders + + package_folders = os.listdir("dependencies_metadata/packages") + assert "pkg1" in package_folders + assert "pkg2" in package_folders