From 829ce629cdad603900d7f7363e7272ea54a2f814 Mon Sep 17 00:00:00 2001 From: SrdjanV Date: Sat, 10 May 2025 21:53:12 +0200 Subject: [PATCH] Fix build src task caching --- build.gradle.kts | 5 +++ .../in/dragonbra/generators/rpc/RpcGenTask.kt | 33 +++++++++++--- .../steamlanguage/SteamLanguageGenTask.kt | 44 ++++++++++++++----- .../generators/versions/VersionGenTask.kt | 35 +++++++++++---- 4 files changed, 92 insertions(+), 25 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6729d2ed..d292f97a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.gradle.kotlin.dsl.invoke import org.jmailen.gradle.kotlinter.tasks.FormatTask import org.jmailen.gradle.kotlinter.tasks.LintTask @@ -36,6 +37,7 @@ protobuf.protoc { artifact = libs.protobuf.protoc.get().toString() } + /* Testing */ tasks.test { useJUnitPlatform() @@ -102,6 +104,9 @@ sourceSets.main { tasks["lintKotlinMain"].dependsOn("formatKotlin") tasks["check"].dependsOn("jacocoTestReport") tasks["compileJava"].dependsOn("generateSteamLanguage", "generateProjectVersion", "generateRpcMethods") +tasks["compileKotlin"].dependsOn("generateSteamLanguage", "generateProjectVersion", "generateRpcMethods") +tasks["generateRpcMethods"].dependsOn("extractProto", "extractIncludeProto") + // tasks["build"].finalizedBy("dokkaGenerate") /* Kotlinter */ diff --git a/buildSrc/src/main/kotlin/in/dragonbra/generators/rpc/RpcGenTask.kt b/buildSrc/src/main/kotlin/in/dragonbra/generators/rpc/RpcGenTask.kt index 4bf0888f..5ba67b11 100644 --- a/buildSrc/src/main/kotlin/in/dragonbra/generators/rpc/RpcGenTask.kt +++ b/buildSrc/src/main/kotlin/in/dragonbra/generators/rpc/RpcGenTask.kt @@ -2,10 +2,13 @@ package `in`.dragonbra.generators.rpc import `in`.dragonbra.generators.rpc.parser.ProtoParser import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction -import java.io.File +import javax.inject.Inject -open class RpcGenTask : DefaultTask() { +abstract class RpcGenTask : DefaultTask { companion object { private const val KDOC_AUTHOR = "Lossy" @@ -18,16 +21,32 @@ open class RpcGenTask : DefaultTask() { .trimMargin() } - private val outputDir = File( - project.layout.buildDirectory.get().asFile, - "generated/source/javasteam/main/java/" - ) - private val protoDirectory = project.file("src/main/proto") + @InputDirectory + abstract fun getProtoDirectory(): DirectoryProperty + + @OutputDirectory + abstract fun getOutputDir(): DirectoryProperty + + @Inject + constructor() { + getOutputDir().convention( + project.layout.buildDirectory.dir( + "generated/source/javasteam/main/java/" + ) + ) + getProtoDirectory().convention( + project.layout.projectDirectory.dir( + "src/main/proto" + ) + ) + } @TaskAction fun generate() { println("Generating RPC service methods as interfaces") + val outputDir = getOutputDir().get().asFile + val protoDirectory = getProtoDirectory().get().asFile outputDir.mkdirs() diff --git a/buildSrc/src/main/kotlin/in/dragonbra/generators/steamlanguage/SteamLanguageGenTask.kt b/buildSrc/src/main/kotlin/in/dragonbra/generators/steamlanguage/SteamLanguageGenTask.kt index 03b79541..c6450f58 100644 --- a/buildSrc/src/main/kotlin/in/dragonbra/generators/steamlanguage/SteamLanguageGenTask.kt +++ b/buildSrc/src/main/kotlin/in/dragonbra/generators/steamlanguage/SteamLanguageGenTask.kt @@ -8,27 +8,51 @@ import `in`.dragonbra.generators.steamlanguage.parser.token.TokenAnalyzer import org.apache.commons.io.FileUtils import org.apache.commons.io.IOUtils import org.gradle.api.DefaultTask -import org.gradle.api.tasks.InputDirectory +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import java.io.File import java.io.FileInputStream +import javax.inject.Inject -open class SteamLanguageGenTask : DefaultTask() { +abstract class SteamLanguageGenTask : DefaultTask { - private val outputDir = File( - project.layout.buildDirectory.get().asFile, - "generated/source/steamd/main/java/in/dragonbra/javasteam" - ) + private companion object { + private const val PKG = "in.dragonbra.javasteam" + } - private val inputFile = project.file("src/main/steamd/in/dragonbra/javasteam/steammsg.steamd") + @Input + abstract fun getInputPkg(): Property - private val pkg = "in.dragonbra.javasteam" + @InputFile + abstract fun getInputFile(): RegularFileProperty - @InputDirectory - fun getInputDirectory(): File = project.file("src/main/steamd/") + @OutputDirectory + abstract fun getOutputDir(): DirectoryProperty + + @Inject + constructor() { + getInputPkg().convention(PKG) + getInputFile().convention { + project.file("src/main/steamd/in/dragonbra/javasteam/steammsg.steamd") + } + getOutputDir().convention( + project.layout.buildDirectory.dir( + "generated/source/steamd/main/java/in/dragonbra/javasteam" + ) + ) + } @TaskAction fun generate() { + val pkg = getInputPkg().get() + val inputFile = getInputFile().get().asFile + val outputDir = getOutputDir().get().asFile + val buffer = IOUtils.toString(FileInputStream(inputFile), "utf-8") val tokens = LanguageParser.tokenizeString(buffer, inputFile.name) diff --git a/buildSrc/src/main/kotlin/in/dragonbra/generators/versions/VersionGenTask.kt b/buildSrc/src/main/kotlin/in/dragonbra/generators/versions/VersionGenTask.kt index ef6cdcae..ba0fa5ad 100644 --- a/buildSrc/src/main/kotlin/in/dragonbra/generators/versions/VersionGenTask.kt +++ b/buildSrc/src/main/kotlin/in/dragonbra/generators/versions/VersionGenTask.kt @@ -2,26 +2,45 @@ package `in`.dragonbra.generators.versions import `in`.dragonbra.generators.versions.generator.JavaGen import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction -import java.io.File +import javax.inject.Inject -open class VersionGenTask : DefaultTask() { +abstract class VersionGenTask : DefaultTask { private companion object { private const val CLASS_NAME = "Versions" private const val PACKAGE = "in.dragonbra.javasteam.util" } - private val outputDir = File( - project.layout.buildDirectory.get().asFile, - "generated/source/javasteam/main/java/in/dragonbra/javasteam/util" - ) + @Input + abstract fun getClassName(): Property + + @Input + abstract fun getPackage(): Property + + @OutputDirectory + abstract fun getOutputDir(): DirectoryProperty + + @Inject + constructor() { + getClassName().convention(CLASS_NAME) + getPackage().convention(PACKAGE) + getOutputDir().convention( + project.layout.buildDirectory.dir( + "generated/source/javasteam/main/java/in/dragonbra/javasteam/util" + ) + ) + } @TaskAction fun generate() { println("Generating version class") - JavaGen(PACKAGE, outputDir).run { - emit(CLASS_NAME, project.version.toString()) + JavaGen(getPackage().get(), getOutputDir().get().asFile).run { + emit(getClassName().get(), project.version.toString()) flush() close() }