mix workspace. graph
(Workspace v0.4.2)
View Source
Prints the workspace graph.
$ mix workspace.graph
Formatters
By default the graph will be pretty printed in the terminal:
$ mix workspace.graph
:api
├── :accounts
│ └── :ecto_utils
├── :cli_tools
└── :orders
├── :string_utils
└── :warehouse
└── :ecto_utils
:back_office
└── :cli_tools
You can also format it as mermaid or dot:
$ mix workspace.graph --format dot
digraph G {
"accounts" -> "ecto_utils";
"api" -> "accounts";
"api" -> "cli_tools";
"api" -> "orders";
"back_office" -> "cli_tools";
"orders" -> "string_utils";
"orders" -> "warehouse";
"warehouse" -> "ecto_utils";
}
Showing project's statuses
If you pass the --show-status flag the project statuses are also
included.
$ mix workspace.graph --show-status
:api ✚
├── :accounts ✔
│ └── :ecto_utils ✔
├── :cli_tools ✚
└── :orders ✔
├── :string_utils ✔
└── :warehouse ✔
└── :ecto_utils ✔
:back_office ●
└── :cli_tools ✚
The following color coding is used:
- Modified projects are shown in red color
- Affected projects are shown in orange color
Focusing the graph around a project
You can focus the graph around a single project by passing the --focus
option.
$ mix workspace.graph --focus api
:api
├── :accounts
├── :cli_tools
└── :orders
This will print the graph around cli_tools including only it's children
and parents that have a distance of 1 edge from it. You can widen the
picture by setting the --proximity flag.
External dependencies
By default only the workspace projects are included in the graph. You
can however include the external dependencies by passing the --external
flag:
$ mix workspace.graph --external
:api
├── :accounts
│ └── :ecto_utils
│ └── :poison (external)
├── :cli_tools
└── :orders
├── :string_utils
│ └── :ex_doc (external)
└── :warehouse
└── :ecto_utils
:back_office
└── :cli_tools
Explicit path dependencies
Paths declared in a project's :affected_by config are always included
in the graph, shared by all projects declaring them:
$ mix workspace.graph
:api
└── :nif
├── native/common (path)
└── proto/*.proto (path)
:other
└── native/common (path)
If --show-status is set, paths with changed files are marked as
modified. In mermaid and dot output paths are rendered with a
distinct node shape.
Command Line Options
--external(boolean) - If set external dependencies will also be inlcuded in the generated graph. [default:false]--focus(string) - If set the graph will be focused around the given project. Should be combined with:proximityin order to define the depth of inward and outward neighbours to be displayed.--format(string) - The output format of the graph. It can be one of the following:pretty- pretty prints the graph as a tree.plain- does not use Unicode code points for formatting the tree.mermaid- exports the graph as a mermaid graph.dot- produces a graphviz DOT graph description of the workspace. Allowed values:["pretty", "plain", "mermaid", "dot"]. [default:"pretty"]
--proximity(integer) - The maximum allowed proximity between a graph's project and children or parent projects. Only applicable if:focusis set. [default:1]
Workspace status options
Status is retrieved from the files changed on --head since it diverged from --base,
similar to git diff base...head, and any uncommitted or untracked files. Knowing the
changed files we can limit the execution of workspace commands only to relevant projects.
--base(string) - The base git reference to compare the head to. Applied only when--affectedor--modifiedare set.--head(string) - A reference to the git head. Applied only if--baseis set for getting the changed files [default:"HEAD"]
Filtering options
-e, --exclude...(string) - Ignore the given projects [values can be grouped with the,separator]
Display options
--show-status(boolean) - If set the status of each project will be included in the output graph [default:false]--show-tags(boolean) - If set the project's tags are also included in the generated graph. Currently applicable only for:prettyand:plainformatters. [default:false]
Global workspace options
--config-path(string) - The path to the workspace config to be used, relative to the workspace path [default:".workspace.exs"]--workspace-path(string) - If set it specifies the root workspace path, defaults to current directory