From 147e07b457141c6ede1a1fba0ac646ede5b9ed04 Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Mon, 22 Sep 2025 02:35:43 +0300 Subject: [PATCH] Added dependency-graph example --- .../1-master-project/make.json | 11 ++++++++ .../2-circular-reference/make.json | 9 ++++++ .../3-cross-reference/make.json | 9 ++++++ .../4-circular-dependency/make.json | 9 ++++++ .../5-simple-dependency/make.json | 9 ++++++ .../6-multi-dependency/make.json | 11 ++++++++ .../7-simple-reference/make.json | 6 ++++ .../8-multi-reference/make.json | 6 ++++ examples/dependency-graph/__main__.py | 28 +++++++++++++++++++ 9 files changed, 98 insertions(+) create mode 100644 examples/dependency-graph/1-master-project/make.json create mode 100644 examples/dependency-graph/2-circular-reference/make.json create mode 100644 examples/dependency-graph/3-cross-reference/make.json create mode 100644 examples/dependency-graph/4-circular-dependency/make.json create mode 100644 examples/dependency-graph/5-simple-dependency/make.json create mode 100644 examples/dependency-graph/6-multi-dependency/make.json create mode 100644 examples/dependency-graph/7-simple-reference/make.json create mode 100644 examples/dependency-graph/8-multi-reference/make.json create mode 100644 examples/dependency-graph/__main__.py diff --git a/examples/dependency-graph/1-master-project/make.json b/examples/dependency-graph/1-master-project/make.json new file mode 100644 index 0000000..82c066c --- /dev/null +++ b/examples/dependency-graph/1-master-project/make.json @@ -0,0 +1,11 @@ +{ + "info": { + "name": "1. Master Project", + "author": "Horizon Team" + }, + "dependencies": [ + "../2-circular-reference", + "../5-simple-dependency", + "../8-multi-reference" + ] +} diff --git a/examples/dependency-graph/2-circular-reference/make.json b/examples/dependency-graph/2-circular-reference/make.json new file mode 100644 index 0000000..d500573 --- /dev/null +++ b/examples/dependency-graph/2-circular-reference/make.json @@ -0,0 +1,9 @@ +{ + "info": { + "name": "2. Circular Reference", + "author": "Horizon Team" + }, + "dependencies": [ + "../3-cross-reference" + ] +} diff --git a/examples/dependency-graph/3-cross-reference/make.json b/examples/dependency-graph/3-cross-reference/make.json new file mode 100644 index 0000000..2e6fc59 --- /dev/null +++ b/examples/dependency-graph/3-cross-reference/make.json @@ -0,0 +1,9 @@ +{ + "info": { + "name": "3. Cross Reference", + "author": "Horizon Team" + }, + "dependencies": [ + "../4-circular-dependency" + ] +} diff --git a/examples/dependency-graph/4-circular-dependency/make.json b/examples/dependency-graph/4-circular-dependency/make.json new file mode 100644 index 0000000..74e3c90 --- /dev/null +++ b/examples/dependency-graph/4-circular-dependency/make.json @@ -0,0 +1,9 @@ +{ + "info": { + "name": "4. Circular Dependency", + "author": "Horizon Team" + }, + "dependencies": [ + "../2-circular-reference" + ] +} diff --git a/examples/dependency-graph/5-simple-dependency/make.json b/examples/dependency-graph/5-simple-dependency/make.json new file mode 100644 index 0000000..e1897a7 --- /dev/null +++ b/examples/dependency-graph/5-simple-dependency/make.json @@ -0,0 +1,9 @@ +{ + "info": { + "name": "5. Simple Dependency", + "author": "Horizon Team" + }, + "dependencies": [ + "../6-multi-dependency" + ] +} diff --git a/examples/dependency-graph/6-multi-dependency/make.json b/examples/dependency-graph/6-multi-dependency/make.json new file mode 100644 index 0000000..724e2e4 --- /dev/null +++ b/examples/dependency-graph/6-multi-dependency/make.json @@ -0,0 +1,11 @@ +{ + "info": { + "name": "6. Multi Dependency", + "author": "Horizon Team" + }, + "dependencies": [ + "../3-cross-reference", + "../7-simple-reference", + "../8-multi-reference" + ] +} diff --git a/examples/dependency-graph/7-simple-reference/make.json b/examples/dependency-graph/7-simple-reference/make.json new file mode 100644 index 0000000..e9e781a --- /dev/null +++ b/examples/dependency-graph/7-simple-reference/make.json @@ -0,0 +1,6 @@ +{ + "info": { + "name": "7. Simple Reference", + "author": "Horizon Team" + } +} diff --git a/examples/dependency-graph/8-multi-reference/make.json b/examples/dependency-graph/8-multi-reference/make.json new file mode 100644 index 0000000..16eb0fa --- /dev/null +++ b/examples/dependency-graph/8-multi-reference/make.json @@ -0,0 +1,6 @@ +{ + "info": { + "name": "8. Multi Reference", + "author": "Horizon Team" + } +} diff --git a/examples/dependency-graph/__main__.py b/examples/dependency-graph/__main__.py new file mode 100644 index 0000000..61b59dc --- /dev/null +++ b/examples/dependency-graph/__main__.py @@ -0,0 +1,28 @@ +from os.path import basename, dirname, join + +from ..cli import (resolve_circular_references, # type: ignore + show_unresolved_dependencies) +from ..config import FileConfig # type: ignore +from ..language import MakeDataConfig # type: ignore +from ..project_graph import ProjectGraph # type: ignore +from ..shell import failure, pretty_debug, success # type: ignore + + +def pretty_print_order(graph: ProjectGraph): + return ' -> '.join([basename(edge.project.directory) \ + if isinstance(edge.project, FileConfig) \ + else str(edge) for edge in graph.traverse_dependencies()]) + +master_project_path = join(dirname(__file__), "1-master-project") +master_project = MakeDataConfig.of(master_project_path) +if master_project: + graph = ProjectGraph(master_project) + graph.collect_dependencies(master_project) + success(f"Got {len(graph.values())} nodes of {basename(master_project_path)!r} dependencies") + unresolved_artifacts = graph.resolve_dependencies() + show_unresolved_dependencies(unresolved_artifacts) + pretty_debug(f"Currently order (excluding affected projects): {pretty_print_order(graph)}") + resolve_circular_references(graph) + success(f"Order: {pretty_print_order(graph)}") +else: + failure("No such project.")