From 1ae37417a439bce5c6f6da56c12cb2faaa51befd Mon Sep 17 00:00:00 2001 From: Henry Kupty Date: Tue, 22 Oct 2024 11:52:45 +0200 Subject: [PATCH] chore: Move logic to handle version to build plugin --- build-logic/build.gradle.kts | 21 +++++++++++++ build-logic/settings.gradle.kts | 1 + build-logic/src/main/kotlin/ProjectVersion.kt | 30 +++++++++++++++++++ build.gradle => build.gradle.kts | 0 gradle.properties | 1 - penna-api/build.gradle | 10 ++++++- penna-core/build.gradle | 4 +++ settings.gradle | 5 +++- version | 1 + 9 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 build-logic/build.gradle.kts create mode 100644 build-logic/settings.gradle.kts create mode 100644 build-logic/src/main/kotlin/ProjectVersion.kt rename build.gradle => build.gradle.kts (100%) delete mode 100644 gradle.properties create mode 100644 version diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 00000000..bd481ea1 --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() +} + +gradlePlugin { + plugins { + create("projectVersionPlugin") { + id = "penna.build.projectVersion" + implementationClass = "ProjectVersionPlugin" + } + } +} + +dependencies { + implementation(gradleApi()) + implementation(localGroovy()) +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..7fbbd448 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "build-logic" diff --git a/build-logic/src/main/kotlin/ProjectVersion.kt b/build-logic/src/main/kotlin/ProjectVersion.kt new file mode 100644 index 00000000..ae8ade0c --- /dev/null +++ b/build-logic/src/main/kotlin/ProjectVersion.kt @@ -0,0 +1,30 @@ +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.register +import kotlin.io.path.readBytes + +abstract class ProjectVersion : DefaultTask() { + @TaskAction + fun action() { + try { + val version = + project.rootDir + .toPath() + .resolve("version") + .readBytes() + .toString(Charsets.UTF_8) + logger.info("Read $version") + project.version = version + } catch (ex: Exception) { + logger.warn("Unable to fetch version because of exception", ex) + } + } +} + +class ProjectVersionPlugin : Plugin { + override fun apply(target: Project) { + target.tasks.register("projectVersion") + } +} diff --git a/build.gradle b/build.gradle.kts similarity index 100% rename from build.gradle rename to build.gradle.kts diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index b21853fa..00000000 --- a/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -version=0.8.0 diff --git a/penna-api/build.gradle b/penna-api/build.gradle index f1833811..5ec4e9ca 100644 --- a/penna-api/build.gradle +++ b/penna-api/build.gradle @@ -1,6 +1,7 @@ plugins { id 'java-library' id 'penna.publishing' + id 'penna.build.projectVersion' id 'pmd' } @@ -20,6 +21,8 @@ java { tasks.withType(AbstractArchiveTask).configureEach { preserveFileTimestamps = false reproducibleFileOrder = true + + dependsOn("projectVersion") } // The API is an optional client-facing library and therefore it should not have gaps @@ -32,8 +35,13 @@ tasks.withType(JavaCompile).configureEach { "-Xdoclint:all/public", "-Werror" ] + + dependsOn("projectVersion") } + +version = "0.8.1" + dependencies { compileOnly libs.slf4j compileOnly libs.jetbrains.annotations @@ -50,4 +58,4 @@ jar { manifest { attributes('Implementation-Version': project.version) } -} \ No newline at end of file +} diff --git a/penna-core/build.gradle b/penna-core/build.gradle index e8a4632f..0ebb7c69 100644 --- a/penna-core/build.gradle +++ b/penna-core/build.gradle @@ -4,6 +4,7 @@ plugins { id 'java-library' id 'penna.publishing' id 'signing' + id 'penna.build.projectVersion' id 'pmd' id 'jvm-test-suite' } @@ -33,6 +34,9 @@ tasks.withType(JavaCompile).configureEach { // TODO Eventually we should enable -Werror here //"-Werror" ] + + dependsOn("projectVersion") + } diff --git a/settings.gradle b/settings.gradle index e26cc8d0..8b274045 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,6 @@ pluginManagement { + includeBuild('build-logic') + repositories { gradlePluginPortal() } @@ -14,5 +16,6 @@ rootProject.name = 'penna' include "penna-api" include "penna-core" // include "penna-perf" +include "penna-integration" include "penna-yaml-config" -include 'sample' \ No newline at end of file +include 'sample' diff --git a/version b/version new file mode 100644 index 00000000..c18d72be --- /dev/null +++ b/version @@ -0,0 +1 @@ +0.8.1 \ No newline at end of file