From a309cf3b5f49544d70c7dfa94263f0422d37f233 Mon Sep 17 00:00:00 2001 From: Paula Osterkamp Date: Wed, 15 Oct 2025 09:26:38 +0200 Subject: [PATCH 1/2] feat: enable input of graphmodels --- .../dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt | 4 ++-- .../main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt | 2 +- .../kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt | 2 +- .../dev/iurysouza/modulegraph/model/GraphParseResult.kt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt index 35b71a3..44b1299 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt @@ -122,11 +122,11 @@ abstract class CreateModuleGraphTask : DefaultTask() { @get:Input @get:Option(option = "graphModels", description = "The produced graph models") - internal abstract val graphModels: ListProperty + abstract val graphModels: ListProperty @get:OutputDirectory @get:Option(option = "projectDirectory", description = "The root project directory") - internal abstract val projectDirectory: DirectoryProperty + abstract val projectDirectory: DirectoryProperty @get:Input @get:Option( diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt index c35875d..3e97782 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt @@ -5,7 +5,7 @@ import java.io.Serializable as JavaSerializable import kotlinx.serialization.Serializable @Serializable -internal data class Module( +data class Module( val path: String, val configName: String? = null, val type: ModuleType = ModuleType.Java(), diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt index f51e689..7286372 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt @@ -142,7 +142,7 @@ data class GraphConfig( */ var nestingEnabled: Boolean? = null - internal fun build(): GraphConfig { + fun build(): GraphConfig { return GraphConfig( readmePath = readmePath, heading = heading, diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt index 07175d4..89f11f0 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt @@ -5,7 +5,7 @@ import java.io.Serializable as JavaSerializable import kotlinx.serialization.Serializable @Serializable -internal data class GraphParseResult( +data class GraphParseResult( /** The output graph model after parsing */ val graph: ProjectGraph, /** The original config provided used to produce [graph] */ From 7c2b0aa321486fbdd4aa178dd936794ce6c1f970 Mon Sep 17 00:00:00 2001 From: Paula Osterkamp Date: Thu, 23 Oct 2025 16:53:11 +0200 Subject: [PATCH 2/2] docs: add example for custom graph model --- README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/README.md b/README.md index e7d8402..6876733 100644 --- a/README.md +++ b/README.md @@ -795,6 +795,39 @@ moduleGraphConfig { If you don't set `rootModulesRegex`, all modules will be considered root modules and cannot be excluded, even if they match `excludedModulesRegex`. +## Providing a Custom Graph Model + +Per default, the plugin generates a graph from the relationships between Gradle modules in your project. You can also extend the task to render graphs from custom data for example, to visualize third-party dependencies or other non-project relationships. + +Here's a basic example of how to create a custom graph model by registering a new task of type `CreateModuleGraphTask`: + +```kotlin +import dev.iurysouza.modulegraph.gradle.CreateModuleGraphTask +import dev.iurysouza.modulegraph.gradle.Module +import dev.iurysouza.modulegraph.ModuleType +import dev.iurysouza.modulegraph.model.GraphConfig +import dev.iurysouza.modulegraph.model.GraphParseResult + +tasks.register("customModuleGraph") { + // Build your custom graph model + val moduleA = Module(":alpha", null, ModuleType.JavaLibrary()) + val moduleB = Module(":beta", null, ModuleType.Unknown()) + + val fullGraph = linkedMapOf( + moduleA to listOf(moduleB) + ) + + // Configure the graph + val builder = GraphConfig.Builder("README.md", "Custom Module Graph") + builder.showFullPath = true + val config = builder.build() + + // Set the custom graph model and project directory as task inputs + graphModels.set(listOf(GraphParseResult(fullGraph, config))) + projectDirectory.set(project.layout.projectDirectory) +} +``` + ## Contributing 🤝 Feel free to open an issue or submit a pull request for any bugs/improvements.