Skip to content

Commit

Permalink
Fix plugin to work with Gradle Configuration Cache
Browse files Browse the repository at this point in the history
  • Loading branch information
LukeNeedham committed May 17, 2024
1 parent dcd0c2c commit a4e1826
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package dev.iurysouza.modulegraph

import java.io.Serializable
import java.io.Serializable as JavaSerializable
import kotlinx.serialization.Serializable
import org.gradle.api.Project
import org.gradle.api.artifacts.ExternalModuleDependency

@Suppress("UnusedPrivateMember")
@Serializable
sealed class ModuleType(
open val id: String,
open val color: String,
) : Serializable {
) : JavaSerializable {
data class Unknown(override val color: String = "#676767") : ModuleType("unknown", color)

data class Custom(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,24 @@ import dev.iurysouza.modulegraph.Theme
import dev.iurysouza.modulegraph.model.GraphConfig
import dev.iurysouza.modulegraph.model.GraphParseResult
import org.gradle.api.DefaultTask
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.logging.LogLevel
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.options.Option

/**
* The gradle task for this plugin,
* which holds all the configuration data that needs to be provided for the work to happen.
*
* All the properties defined in this task need to be Serializable -
* this is a requirement for the Gradle Configuration Cache to work.
*/
abstract class CreateModuleGraphTask : DefaultTask() {

@get:Input
Expand Down Expand Up @@ -103,6 +113,10 @@ abstract class CreateModuleGraphTask : DefaultTask() {
@get:Option(option = "graphModels", description = "The produced graph models")
internal abstract val graphModels: ListProperty<GraphParseResult>

@get:OutputDirectory
@get:Option(option = "projectDirectory", description = "The root project directory")
internal abstract val projectDirectory: DirectoryProperty

init {
group = "Reporting"
description = "Creates a mermaid dependency graph for the project"
Expand All @@ -118,7 +132,8 @@ abstract class CreateModuleGraphTask : DefaultTask() {
val config = result.config
val mermaidGraph = Mermaid.generateGraph(result)

val readmeFile = project.layout.projectDirectory.file(config.readmePath)
val root = projectDirectory.orNull ?: error("projectDirectory is not set")
val readmeFile = root.file(config.readmePath)

ReadmeWriter.appendOrOverwriteGraph(
mermaidGraph = mermaidGraph,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package dev.iurysouza.modulegraph.gradle

import dev.iurysouza.modulegraph.ModuleType
import java.io.Serializable
import java.io.Serializable as JavaSerializable
import kotlinx.serialization.Serializable

@Serializable
internal data class Module(
val path: String,
val configName: String? = null,
val type: ModuleType = ModuleType.Java(),
) : Serializable {
) : JavaSerializable {
companion object {
private const val serialVersionUID: Long = 46465844
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ open class ModuleGraphPlugin : Plugin<Project> {
task.setStyleByModuleType.set(extension.setStyleByModuleType)
task.rootModulesRegex.set(extension.rootModulesRegex)
task.graphConfigs.set(extension.graphConfigs)
task.projectDirectory.set(project.layout.projectDirectory)

val primaryGraphConfig = getPrimaryGraphConfig(task)
val additionalGraphConfigs = task.graphConfigs.getOrElse(emptyList())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@ package dev.iurysouza.modulegraph.model
import dev.iurysouza.modulegraph.LinkText
import dev.iurysouza.modulegraph.Orientation
import dev.iurysouza.modulegraph.Theme
import java.io.Serializable as JavaSerializable
import kotlinx.serialization.Serializable

/**
* The config for a single graph to be made.
*/
@Serializable
data class GraphConfig(
/* Output parameters */

Expand Down Expand Up @@ -69,7 +72,7 @@ data class GraphConfig(
* the generated graph will only include dependencies (direct and transitive) of root modules.
*/
val rootModulesRegex: String?,
) {
) : JavaSerializable {

class Builder(
/** @see [GraphConfig.readmePath] */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package dev.iurysouza.modulegraph.model

import dev.iurysouza.modulegraph.model.alias.ProjectGraph
import kotlinx.serialization.Serializable
import java.io.Serializable as JavaSerializable

@Serializable
internal data class GraphParseResult(
/** The output graph model after parsing */
val graph: ProjectGraph,
/** The original config provided used to produce [graph] */
val config: GraphConfig,
)
) : JavaSerializable

0 comments on commit a4e1826

Please sign in to comment.