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 :proximity in 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 :focus is 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 --affected or --modified are set.
  • --head (string) - A reference to the git head. Applied only if --base is 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 :pretty and :plain formatters. [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