Releaser.Graph (releaser v0.0.2)

Copy Markdown View Source

Dependency graph building and topological sorting for monorepo apps.

Builds a directed graph from internal path: dependencies and provides topological ordering for correct publish order, dependency resolution, and cascade planning.

Summary

Functions

Builds a dependency graph from a list of apps.

Returns a map of %{app_name => [dependent_names]} (reverse graph).

Filters topological levels to only include the specified apps. Removes empty levels.

Computes topological levels using Kahn's algorithm.

Resolves transitive dependents for a list of app names (reverse direction).

Resolves transitive dependencies for a list of app names.

Functions

build(apps)

Builds a dependency graph from a list of apps.

Returns a map of %{app_name => [dependency_names]}.

dependents_of(apps)

Returns a map of %{app_name => [dependent_names]} (reverse graph).

For each app, lists which apps depend on it.

filter_levels(levels, required_apps)

Filters topological levels to only include the specified apps. Removes empty levels.

topological_levels(apps)

Computes topological levels using Kahn's algorithm.

Returns [{level, [app_names]}] where level 0 has no internal deps, level 1 depends only on level 0, etc.

transitive_dependents(app_names, apps)

Resolves transitive dependents for a list of app names (reverse direction).

Given an app, returns all apps that depend on it recursively (upstream). For example, if cfdi_xml depends on cfdi_csd, then cfdi_xml is a transitive dependent of cfdi_csd.

This is the inverse of transitive_deps/2.

transitive_deps(app_names, graph)

Resolves transitive dependencies for a list of app names.

Returns a MapSet of all apps that need to be included (the requested apps plus all their transitive dependencies).