]> git.frustrated-labs.net Git - gradle-changelog-plugin.git/commitdiff
feat: add plugin configuration
authorAlexander Goussas <[email protected]>
Thu, 23 Oct 2025 17:34:05 +0000 (12:34 -0500)
committerAlexander Goussas <[email protected]>
Thu, 23 Oct 2025 17:34:05 +0000 (12:34 -0500)
app/build.gradle.kts
changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/ChangelogPlugin.kt
changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/ChangelogPluginExtension.kt [new file with mode: 0644]
changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/Config.kt [new file with mode: 0644]
changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/config/GitInfo.kt [new file with mode: 0644]
changelog-plugin/src/main/kotlin/io/github/aloussase/changelog/formats/DocumentFormat.kt [new file with mode: 0644]

index d448fae3123e1a1d5f64cf8cb5503e3c3a2214a5..d4ec185b90ab6d75b9c6588bb6833a69dd27db58 100644 (file)
@@ -4,7 +4,13 @@ plugins {
     application
 }
 
-dependencies {
+changelog {
+    format = "markdown"
+    outputFileName = "CHANGELOG.md"
+
+    git {
+        baseBranch = "master"
+    }
 }
 
 application {
index a497eee20844b3cba258e91b4abcdbfedcd0aa1e..a38e0e4fdfe61d11117cbfa8cd276995c0d1a485 100644 (file)
@@ -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<Project> {
     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 (file)
index 0000000..907c997
--- /dev/null
@@ -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<String>
+
+    abstract val outputFileName: Property<String>
+
+    fun git(action: Action<GitInfo>) = 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 (file)
index 0000000..3b5fd24
--- /dev/null
@@ -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 (file)
index 0000000..4ad6bba
--- /dev/null
@@ -0,0 +1,9 @@
+package io.github.aloussase.changelog.config
+
+import org.gradle.api.provider.Property
+
+interface GitInfo {
+
+    val baseBranch: Property<String>
+
+}
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 (file)
index 0000000..8f39b4d
--- /dev/null
@@ -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
+            }
+        }
+    }
+}