add info extension

This commit is contained in:
2025-09-08 16:55:07 +02:00
parent bd74a0aca8
commit 1866b7b117
4 changed files with 101 additions and 0 deletions

View File

@@ -6,6 +6,10 @@
The GitExtension enhances versioning by dynamically appending the Git hash before "snapshot" in the version string. For example, 0.0.0-SNAPSHOT becomes 0.0.0.0a2b3c4d-SNAPSHOT, ensuring each build reflects its commit origin, prevents overwriting existing versions. This feature aids developers during development by providing clear version identification.
### Extension Info.
The InfoExtension provides information for name and version, vendor name, and UTC timestamp.
## Publish gradle plugin locally.
```shell

View File

@@ -1,9 +1,11 @@
package ltd.lulz.plugin
import ltd.lulz.plugin.extension.GitExtension
import ltd.lulz.plugin.extension.InfoExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import ltd.lulz.plugin.extension.GitExtension.Companion.PLUGIN_NAME as GIT_PLUGIN_NAME
import ltd.lulz.plugin.extension.InfoExtension.Companion.PLUGIN_NAME as INFO_PLUGIN_NAME
@Suppress("unused")
class CorePlugin : Plugin<Project> {
@@ -15,8 +17,14 @@ class CorePlugin : Plugin<Project> {
project: Project,
) {
gitExtension(project)
infoExtension(project)
}
private fun infoExtension(
project: Project,
): InfoExtension = project.extensions
.create(INFO_PLUGIN_NAME, InfoExtension::class.java, project)
private fun gitExtension(
project: Project,
): GitExtension = project.extensions

View File

@@ -0,0 +1,16 @@
package ltd.lulz.plugin.extension
import java.time.OffsetDateTime.now
import java.time.ZoneId.of
import java.time.format.DateTimeFormatter.ofPattern
import org.gradle.api.Project
abstract class InfoExtension(private val project: Project) {
companion object {
const val PLUGIN_NAME = "info"
}
val nameVersion get() = "Project Name: ${project.name} Version: ${project.version}"
val utcTimestamp = now().atZoneSameInstant(of("UTC")).format(ofPattern("yyyy-MM-dd HH:mm:ss z")).toString()
val vendorName = "Lulz Ltd"
}

View File

@@ -0,0 +1,73 @@
package ltd.lulz.plugin.extension
import io.mockk.every
import io.mockk.mockkStatic
import io.mockk.unmockkStatic
import java.time.OffsetDateTime
import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
class InfoExtensionTest {
companion object {
const val BASIC_TIMESTAMP = "2002-02-20T02:10:11+01:00"
const val EXTENSION = "info"
const val PLUGIN_ID = "ltd.lulz.plugin.core-plugin"
const val PROJECT_NAME = "test-project"
const val SNAPSHOT_VERSION = "0.0.0-SNAPSHOT"
@JvmStatic
@BeforeAll
fun buildUp() {
mockkStatic(OffsetDateTime::class)
every { OffsetDateTime.now() } returns OffsetDateTime.parse(BASIC_TIMESTAMP)
}
@JvmStatic
@AfterAll
fun tearDown() {
unmockkStatic(OffsetDateTime::class)
}
}
lateinit var project: Project
@BeforeEach
fun beforeEach() {
project = ProjectBuilder.builder().withName(PROJECT_NAME).build()
project.version = SNAPSHOT_VERSION
project.pluginManager.apply(PLUGIN_ID)
}
@Test
fun `get vendor`() {
// when
val extension = project.extensions.getByName(EXTENSION) as InfoExtension
// then
assertEquals("Lulz Ltd", extension.vendorName)
}
@Test
fun `get timestamp`() {
// when
val extension = project.extensions.getByName(EXTENSION) as InfoExtension
// then
assertEquals("2002-02-20 01:10:11 UTC", extension.utcTimestamp)
}
@Test
fun `get build`() {
// when
val extension = project.extensions.getByName(EXTENSION) as InfoExtension
// then
assertEquals("Project Name: test-project Version: 0.0.0-SNAPSHOT", extension.nameVersion)
}
}