Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
238ef0a162 | ||
|
|
a1a6038219 | ||
|
|
94a6b7adaa |
No files matched your search
@@ -41,6 +41,10 @@ gradlePlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvmToolchain(masterLibs.versions.javaVersion.get().toInt())
|
||||||
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain {
|
toolchain {
|
||||||
languageVersion.set(JavaLanguageVersion.of(masterLibs.versions.javaVersion.get()))
|
languageVersion.set(JavaLanguageVersion.of(masterLibs.versions.javaVersion.get()))
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ dependencyResolutionManagement {
|
|||||||
|
|
||||||
versionCatalogs {
|
versionCatalogs {
|
||||||
create("masterLibs") {
|
create("masterLibs") {
|
||||||
from("net.keinekekse:version-catalog:104")
|
from("net.keinekekse:version-catalog:141")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,12 @@ import io.github.z4kn4fein.semver.withoutSuffixes
|
|||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.file.ConfigurableFileCollection
|
import org.gradle.api.file.ConfigurableFileCollection
|
||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
|
import org.gradle.api.provider.MapProperty
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@CacheableTask
|
||||||
abstract class AddVersionTask : DefaultTask() {
|
abstract class AddVersionTask : DefaultTask() {
|
||||||
|
|
||||||
// 1. Define what triggers the task (Source Files)
|
// 1. Define what triggers the task (Source Files)
|
||||||
@@ -41,46 +43,100 @@ abstract class AddVersionTask : DefaultTask() {
|
|||||||
@get:Input
|
@get:Input
|
||||||
abstract val versionPackageName: Property<String>
|
abstract val versionPackageName: Property<String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val modules: MapProperty<String, Map<String, String>>
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun execute() {
|
fun execute() {
|
||||||
println("execute task: incrementBuildNumber")
|
|
||||||
val buildNumber = incrementAndGetBuildNumber()
|
val buildNumber = incrementAndGetBuildNumber()
|
||||||
writeClassFile(buildNumber)
|
writeClassFile(buildNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun writeClassFile(buildNumber: String) {
|
private fun writeClassFile(buildNumber: String) {
|
||||||
val ver = getVersionInfo(buildNumber)
|
var fileContent =
|
||||||
|
|
||||||
val file = versionClassFile.get().asFile
|
|
||||||
file.parentFile.mkdirs()
|
|
||||||
file.writeText(
|
|
||||||
"""
|
"""
|
||||||
package ${versionPackageName.get()}
|
package ${versionPackageName.get()}
|
||||||
|
|
||||||
object VERSION {
|
import net.keinekekse.version.Version
|
||||||
const val version = "${ver.version}"
|
|
||||||
const val fullVersion = "${ver.fullVersion}"
|
""".trimIndent() +
|
||||||
const val major = ${ver.major}
|
buildVersionObject(
|
||||||
const val minor = ${ver.minor}
|
"",
|
||||||
const val patch = ${ver.patch}
|
projectVersion.get(),
|
||||||
const val preRelease = "${ver.preRelease}"
|
buildNumber,
|
||||||
const val buildMetadata = "${ver.buildMetadata}"
|
displayNameExtra.get(),
|
||||||
const val buildDate = "${ver.buildDate}"
|
copyrightExtra.get(),
|
||||||
const val displayName = "${ver.displayName}"
|
projectName.get(),
|
||||||
const val copyright = "${ver.copyright}"
|
projectDescription.get()
|
||||||
const val name = "${ver.name}"
|
)
|
||||||
const val description = "${ver.description}"
|
if (modules.isPresent) {
|
||||||
|
modules.get().forEach { (moduleName, moduleInfo) ->
|
||||||
|
fileContent +=
|
||||||
|
buildVersionObject(
|
||||||
|
moduleName,
|
||||||
|
moduleInfo["version"] ?: "",
|
||||||
|
buildNumber,
|
||||||
|
moduleInfo["displayName"] ?: moduleName,
|
||||||
|
moduleInfo["copyright"] ?: copyrightExtra.get(),
|
||||||
|
moduleName,
|
||||||
|
moduleInfo["description"] ?: ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val file = versionClassFile.get().asFile
|
||||||
|
file.parentFile.mkdirs()
|
||||||
|
file.writeText(fileContent)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildVersionObject(
|
||||||
|
moduleName: String,
|
||||||
|
versionString: String,
|
||||||
|
buildNumber: String,
|
||||||
|
longName: String,
|
||||||
|
copy: String,
|
||||||
|
shortName: String,
|
||||||
|
desc: String,
|
||||||
|
): String {
|
||||||
|
val ver = getVersionInfo(versionString, buildNumber, longName, copy, shortName, desc)
|
||||||
|
val module = if (moduleName.isBlank()) {
|
||||||
|
""
|
||||||
|
} else {
|
||||||
|
"_$moduleName"
|
||||||
|
}
|
||||||
|
|
||||||
|
return """
|
||||||
|
|
||||||
|
object VERSION$module: Version {
|
||||||
|
override val version = "${ver.version}"
|
||||||
|
override val fullVersion = "${ver.fullVersion}"
|
||||||
|
override val major = ${ver.major}
|
||||||
|
override val minor = ${ver.minor}
|
||||||
|
override val patch = ${ver.patch}
|
||||||
|
override val preRelease = "${ver.preRelease}"
|
||||||
|
override val buildMetadata = "${ver.buildMetadata}"
|
||||||
|
override val buildDate = "${ver.buildDate}"
|
||||||
|
override val displayName = "${ver.displayName}"
|
||||||
|
override val copyright = "${ver.copyright}"
|
||||||
|
override val name = "${ver.name}"
|
||||||
|
override val description = "${ver.description}"
|
||||||
}
|
}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getVersionInfo(buildNumber: String): VersionInfo {
|
private fun getVersionInfo(
|
||||||
|
versionString: String,
|
||||||
|
buildNumber: String,
|
||||||
|
longName: String,
|
||||||
|
copy: String,
|
||||||
|
shortName: String,
|
||||||
|
desc: String,
|
||||||
|
): VersionInfo {
|
||||||
val version =
|
val version =
|
||||||
if (Version.parse(projectVersion.get(), strict = false).buildMetadata.isNullOrEmpty())
|
if (Version.parse(versionString, strict = false).buildMetadata.isNullOrEmpty())
|
||||||
Version.parse(projectVersion.get() + "+build.$buildNumber", strict = false)
|
Version.parse("$versionString+build.$buildNumber", strict = false)
|
||||||
else Version.parse(projectVersion.get(), strict = false)
|
else Version.parse(versionString, strict = false)
|
||||||
|
|
||||||
println("Source files changed. Setting version to $version")
|
println("Source files changed. Setting version to $version")
|
||||||
|
|
||||||
@@ -91,13 +147,14 @@ abstract class AddVersionTask : DefaultTask() {
|
|||||||
preRelease = version.preRelease ?: "",
|
preRelease = version.preRelease ?: "",
|
||||||
buildMetadata = version.buildMetadata ?: "",
|
buildMetadata = version.buildMetadata ?: "",
|
||||||
fullVersion = version.toString(),
|
fullVersion = version.toString(),
|
||||||
version = if (version.isPreRelease) version.toString() else
|
version = if (version.isPreRelease)
|
||||||
|
"${version.major}.${version.minor}.${version.patch}-${version.preRelease}" else
|
||||||
version.withoutSuffixes().toString(),
|
version.withoutSuffixes().toString(),
|
||||||
buildDate = java.time.Instant.now().toString(),
|
buildDate = java.time.Instant.now().toString(),
|
||||||
displayName = displayNameExtra.get(),
|
displayName = longName,
|
||||||
copyright = copyrightExtra.get(),
|
copyright = copy,
|
||||||
name = projectName.get(),
|
name = shortName,
|
||||||
description = projectDescription.get() ?: ""
|
description = desc
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,25 +36,53 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
|||||||
* versionConfig {
|
* versionConfig {
|
||||||
* versionClassFile.set(layout.projectDirectory.file("src/main/kotlin/Version.kt"))
|
* versionClassFile.set(layout.projectDirectory.file("src/main/kotlin/Version.kt"))
|
||||||
* versionPackageName.set("net.keinekekse")
|
* versionPackageName.set("net.keinekekse")
|
||||||
|
*
|
||||||
|
* // Optional Versionen von Teilbereichen des Programms
|
||||||
|
* modules.set(
|
||||||
|
* mapOf(
|
||||||
|
* "books" to mapOf( // -> object VERSION_books
|
||||||
|
* "version" to libs.versions.books.get(),
|
||||||
|
* "displayName" to "Books-DB",
|
||||||
|
* "copyright" to "Copyright (c) 2026 Hartmut Bauer", // null => extra["copyright]
|
||||||
|
* "description" to "Books + Comics Database" // null => ""
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* )
|
||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* VERSION-class:
|
* VERSION-class:
|
||||||
*
|
*
|
||||||
* ```
|
* ```
|
||||||
* object VERSION {
|
* import net.keinekekse.version.Version // -> util-Lib
|
||||||
* const val version = "1.0.0-beta.1+build.13" // für Release-Ver: major.minor.patch
|
*
|
||||||
* const val fullVersion = "1.0.0-beta.1+build.13"
|
* object VERSION: Version {
|
||||||
* const val major = 1
|
* override val version = "1.0.0-beta.1 // für Release-Ver: major.minor.patch
|
||||||
* const val minor = 0
|
* override val fullVersion = "1.0.0-beta.1+build.13"
|
||||||
* const val patch = 0
|
* override val major = 1
|
||||||
* const val preRelease = "beta.1"
|
* override val minor = 0
|
||||||
* const val buildMetadata = "build.13"
|
* override val patch = 0
|
||||||
* const val buildDate = "2026-01-10T18:54:42.227942Z"
|
* override val preRelease = "beta.1"
|
||||||
* const val displayName = "Program"
|
* override val buildMetadata = "build.13"
|
||||||
* const val copyright = "Copyright (c) 2026 Hartmut Bauer"
|
* override val buildDate = "2026-01-10T18:54:42.227942Z"
|
||||||
* const val name = "program-name"
|
* override val displayName = "Program"
|
||||||
* const val description = "Program description"
|
* override val copyright = "Copyright (c) 2026 Hartmut Bauer"
|
||||||
|
* override val name = "program-name"
|
||||||
|
* override val description = "Program description"
|
||||||
|
* }
|
||||||
|
* object VERSION_books: Version {
|
||||||
|
* override val version = "0.1.0-alpha.1"
|
||||||
|
* override val fullVersion = "0.1.0-alpha.1+build.11"
|
||||||
|
* override val major = 0
|
||||||
|
* override val minor = 1
|
||||||
|
* override val patch = 0
|
||||||
|
* override val preRelease = "alpha.1"
|
||||||
|
* override val buildMetadata = "build.11"
|
||||||
|
* override val buildDate = "2026-09-19T00:18:40.584742Z"
|
||||||
|
* override val displayName = "Books-DB"
|
||||||
|
* override val copyright = "Copyright (c) 2026 Hartmut Bauer"
|
||||||
|
* override val name = "books"
|
||||||
|
* override val description = "Books + Comics Database"
|
||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
@@ -121,6 +149,15 @@ class VersionPlugin : Plugin<Project> {
|
|||||||
if (it.has("copyright")) it.get("copyright")?.toString() else ""
|
if (it.has("copyright")) it.get("copyright")?.toString() else ""
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if (extension.modules.isPresent) {
|
||||||
|
modules.set(extension.modules)
|
||||||
|
extension.modules.get().forEach { (moduleName, moduleInfo) ->
|
||||||
|
// project.extensions.create("${moduleName}Version", VersionPluginExtension::class.java).apply {
|
||||||
|
// versionClassFile.set(project.layout.buildDirectory.file("generated/sources/version/${moduleName}/kotlin/${project.name}-version.kt"))
|
||||||
|
// modules.set(moduleInfo)
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. Handle Kotlin/JVM (Standard Project)
|
// 1. Handle Kotlin/JVM (Standard Project)
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
package net.keinekekse.version
|
package net.keinekekse.version
|
||||||
|
|
||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
|
import org.gradle.api.provider.MapProperty
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
|
|
||||||
interface VersionPluginExtension {
|
interface VersionPluginExtension {
|
||||||
val versionPackageName: Property<String>
|
val versionPackageName: Property<String>
|
||||||
|
|
||||||
val versionClassFile: RegularFileProperty
|
val versionClassFile: RegularFileProperty
|
||||||
|
|
||||||
|
val modules: MapProperty<String, Map<String, String>>
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user