From d9a26c93e9d54b12cacadd6e0dbf7bf8d97a0dd0 Mon Sep 17 00:00:00 2001 From: Alexander Goussas Date: Thu, 23 Oct 2025 12:34:05 -0500 Subject: [PATCH] feat: add plugin configuration --- app/build.gradle.kts | 8 ++++- .../aloussase/changelog/ChangelogPlugin.kt | 9 +++++ .../config/ChangelogPluginExtension.kt | 16 +++++++++ .../aloussase/changelog/config/Config.kt | 35 +++++++++++++++++++ .../aloussase/changelog/config/GitInfo.kt | 9 +++++ .../changelog/formats/DocumentFormat.kt | 14 ++++++++ 6 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/ChangelogPluginExtension.kt create mode 100644 changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/Config.kt create mode 100644 changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/GitInfo.kt create mode 100644 changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/formats/DocumentFormat.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d448fae..d4ec185 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,7 +4,13 @@ plugins { application } -dependencies { +changelog { + format = "markdown" + outputFileName = "CHANGELOG.md" + + git { + baseBranch = "master" + } } application { diff --git a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/ChangelogPlugin.kt b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/ChangelogPlugin.kt index a497eee..a38e0e4 100644 --- a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/ChangelogPlugin.kt +++ b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/ChangelogPlugin.kt @@ -1,11 +1,20 @@ package io.github.aloussase.changelog +import io.github.aloussase.changelog.config.ChangelogPluginExtension +import io.github.aloussase.changelog.config.Config import org.gradle.api.Plugin import org.gradle.api.Project class ChangelogPlugin : Plugin { override fun apply(project: Project) { + val extension = project.extensions.create("changelog", ChangelogPluginExtension::class.java) + + extension.gitInfo.baseBranch.convention("master") + extension.format.convention("markdown") + project.tasks.register("changelog") { + val config = Config.from(extension) + println(config) } } } diff --git a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/ChangelogPluginExtension.kt b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/ChangelogPluginExtension.kt new file mode 100644 index 0000000..907c997 --- /dev/null +++ b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/ChangelogPluginExtension.kt @@ -0,0 +1,16 @@ +package io.github.aloussase.changelog.config + +import org.gradle.api.Action +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Nested + +abstract class ChangelogPluginExtension { + @get:Nested + abstract val gitInfo: GitInfo; + + abstract val format: Property + + abstract val outputFileName: Property + + fun git(action: Action) = action.execute(gitInfo) +} diff --git a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/Config.kt b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/Config.kt new file mode 100644 index 0000000..3b5fd24 --- /dev/null +++ b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/Config.kt @@ -0,0 +1,35 @@ +package io.github.aloussase.changelog.config + +import io.github.aloussase.changelog.formats.DocumentFormat +import org.gradle.api.GradleException + +data class Config( + val outputFileName: String, + val gitBranch: String, + val documentFormat: DocumentFormat, +) { + companion object { + fun from(extension: ChangelogPluginExtension): Config { + val format = DocumentFormat.parse(extension.format.get()) + if (format == null) { + throw GradleException("Invalid document format: cannot make a changelog from ${extension.format.get()}") + } + + val branchName = extension.gitInfo.baseBranch.get() + if (branchName.isBlank()) { + throw GradleException("Branch name cannot be blank") + } + + val outputFileName = extension.outputFileName.get() + if (outputFileName.isBlank()) { + throw GradleException("Output file name cannot be blank") + } + + return Config( + outputFileName, + branchName, + format + ) + } + } +} diff --git a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/GitInfo.kt b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/GitInfo.kt new file mode 100644 index 0000000..4ad6bba --- /dev/null +++ b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/GitInfo.kt @@ -0,0 +1,9 @@ +package io.github.aloussase.changelog.config + +import org.gradle.api.provider.Property + +interface GitInfo { + + val baseBranch: Property + +} diff --git a/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/formats/DocumentFormat.kt b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/formats/DocumentFormat.kt new file mode 100644 index 0000000..8f39b4d --- /dev/null +++ b/changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/formats/DocumentFormat.kt @@ -0,0 +1,14 @@ +package io.github.aloussase.changelog.formats + +enum class DocumentFormat { + Markdown; + + companion object { + fun parse(format: String): DocumentFormat? { + return when (format) { + "markdown", "md" -> Markdown + else -> null + } + } + } +} -- 2.43.0