@startdot digraph DockerDeps { //rankdir=BT; rankdir=TD; node [shape=cylinder, style="rounded,filled", color=black, fillcolor=royalblue]; CPP_PKG [label="C++ Tools\ne.g. cmake, g++", shape=box3d]; DOTNET_PKG [label=".Net Tools\ne.g. dotnet-sdk", shape=box3d, fillcolor=forestgreen]; JAVA_PKG [label="Java Tools\ne.g. openjdk, maven", shape=box3d, fillcolor=crimson]; SRC [label="git repo", shape=folder]; // ARCHIVE subgraph clusterDocker { DISTRO_IMG [label=":latest"]; ENV_IMG [label="or-tools/docker:__env\nenv"]; DEVEL_IMG [label="or-tools/docker:__devel\ndevel"]; CPP_BUILD_IMG [label="or-tools/docker:__cpp_build\ncpp_build"]; DOTNET_BUILD_IMG [label="or-tools/docker:__dotnet_build\ndotnet_build"]; JAVA_BUILD_IMG [label="or-tools/docker:__java_build\njava_build"]; CPP_ARCHIVE_IMG [label="or-tools/docker:__cpp_archive\ncpp_archive"]; DOTNET_ARCHIVE_IMG [label="or-tools/docker:__dotnet_archive\ndotnet_archive"]; JAVA_ARCHIVE_IMG [label="or-tools/docker:__java_archive\njava_archive"]; edge [color=black]; DISTRO_IMG -> ENV_IMG; ENV_IMG -> DEVEL_IMG; DEVEL_IMG -> CPP_BUILD_IMG; DEVEL_IMG -> DOTNET_BUILD_IMG; DEVEL_IMG -> JAVA_BUILD_IMG; CPP_BUILD_IMG -> CPP_ARCHIVE_IMG; DOTNET_BUILD_IMG -> DOTNET_ARCHIVE_IMG; JAVA_BUILD_IMG -> JAVA_ARCHIVE_IMG; subgraph clusterArchive { node [shape=note, style="rounded,filled", color=black, fillcolor=royalblue]; CPP_OR_TAR [label="or-tools_cpp___vX.Y.Z.tar.gz"]; DOTNET_OR_TAR [label="or-tools_dotnet___vX.Y.Z.tar.gz"]; JAVA_OR_TAR [label="or-tools_java___vX.Y.Z.tar.gz"]; color=royalblue; label = "export/archives/"; } edge [color=red]; CPP_ARCHIVE_IMG -> CPP_OR_TAR [label="make __cpp_archive"]; DOTNET_ARCHIVE_IMG -> DOTNET_OR_TAR [label="make __dotnet_archive"]; JAVA_ARCHIVE_IMG -> JAVA_OR_TAR [label="make __java_archive"]; subgraph clusterTestArchive { TEST_CPP_IMG [label="or-tools/docker:__cpp_test\ncpp_test"]; TEST_DOTNET_IMG [label="or-tools/docker:__dotnet_test\ndotnet_test"]; TEST_JAVA_IMG [label="or-tools/docker:__java_test\njava_test"]; edge [color=black]; CPP_OR_TAR -> TEST_CPP_IMG; DOTNET_OR_TAR -> TEST_DOTNET_IMG; JAVA_OR_TAR -> TEST_JAVA_IMG; color=royalblue; label = "test//.Dockerfile"; } edge [color=black]; ENV_IMG -> TEST_CPP_IMG; ENV_IMG -> TEST_DOTNET_IMG; ENV_IMG -> TEST_JAVA_IMG; color=royalblue; label = "images/.Dockerfile"; } edge [color=black]; CPP_PKG -> ENV_IMG [label="install", style="dashed"]; DOTNET_PKG -> ENV_IMG [label="install", style="dashed"]; JAVA_PKG -> ENV_IMG [label="install", style="dashed"]; SRC -> DEVEL_IMG [label="copy", style="dashed"]; // PYTHON subgraph clusterPython { PY_DISTRO_IMG [label="manylinux:latest"]; PY_PKG [label="Python Tools\ne.g. python, wheel", shape=box3d, fillcolor=gold]; PY_ENV_IMG [label="or-tools/docker:python__env\nenv"]; PY_DEVEL_IMG [label="or-tools/docker:python__devel\ndevel"]; PY_BUILD_IMG [label="or-tools/docker:python__build\nbuild"]; edge [color=black]; PY_PKG -> PY_DISTRO_IMG [label="install", style="dashed"]; PY_DISTRO_IMG -> PY_ENV_IMG PY_ENV_IMG -> PY_DEVEL_IMG PY_DEVEL_IMG -> PY_BUILD_IMG subgraph clusterPythonWheel { node [shape=note, style="rounded,filled", color=black, fillcolor=royalblue]; OR_WHL [label="ortools.manylinux.X.Y.Z.whl"]; color=royalblue; label = "export/python/archives/"; } edge [color=red]; PY_BUILD_IMG -> OR_WHL [label="make python___export"]; PY_TEST_IMG [label="or-tools/docker:python__test\ntest"]; edge [color=black]; PY_DISTRO_IMG -> PY_TEST_IMG OR_WHL -> PY_TEST_IMG color=royalblue; label = "python//Dockerfile"; } edge [color=black]; CPP_PKG -> PY_ENV_IMG [label="install", style="dashed"]; SRC -> PY_DEVEL_IMG [label="copy", style="dashed"]; } @enddot