You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polaris.apache.org by sn...@apache.org on 2026/06/11 05:36:53 UTC

(polaris) branch main updated: Build: improve portability of cacheable tasks (#4685)

This is an automated email from the ASF dual-hosted git repository.

snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 901604890b Build: improve portability of cacheable tasks (#4685)
901604890b is described below

commit 901604890b31ad6ad2bbc963447f27860f4ec594
Author: Robert Stupp <sn...@snazy.de>
AuthorDate: Thu Jun 11 07:36:48 2026 +0200

    Build: improve portability of cacheable tasks (#4685)
    
    This change adds some missing path normalizations for task inputs.
---
 .../src/main/kotlin/polaris-java.gradle.kts        |  4 +++-
 extensions/auth/opa/impl/build.gradle.kts          | 25 +++++++++++++---------
 persistence/nosql/idgen/impl/build.gradle.kts      |  4 ++--
 .../nosql/persistence/impl/build.gradle.kts        |  4 ++--
 tools/config-docs/site/build.gradle.kts            | 17 ++++++++-------
 tools/version/build.gradle.kts                     |  8 ++++---
 6 files changed, 36 insertions(+), 26 deletions(-)

diff --git a/build-logic/src/main/kotlin/polaris-java.gradle.kts b/build-logic/src/main/kotlin/polaris-java.gradle.kts
index b6463b1226..1f77f272d7 100644
--- a/build-logic/src/main/kotlin/polaris-java.gradle.kts
+++ b/build-logic/src/main/kotlin/polaris-java.gradle.kts
@@ -247,7 +247,9 @@ tasks.withType<Javadoc>().configureEach {
 tasks.register("printRuntimeClasspath").configure {
   group = "help"
   description = "Print the classpath as a path string to be used when running tools like 'jol'"
-  inputs.files(configurations.named("runtimeClasspath"))
+  inputs
+    .files(configurations.named("runtimeClasspath"))
+    .withNormalizer(ClasspathNormalizer::class.java)
   doLast {
     val cp = configurations.getByName("runtimeClasspath")
     val def = configurations.getByName("runtimeElements")
diff --git a/extensions/auth/opa/impl/build.gradle.kts b/extensions/auth/opa/impl/build.gradle.kts
index 074b182b7a..165c19d9b7 100644
--- a/extensions/auth/opa/impl/build.gradle.kts
+++ b/extensions/auth/opa/impl/build.gradle.kts
@@ -80,12 +80,12 @@ tasks.register<JavaExec>("generateOpaSchema") {
 
   // Only execute generation if anything changed
   outputs.cacheIf { true }
-  outputs.file("${projectDir}/opa-input-schema.json")
-  inputs.files(jsonSchemaGenerator.runtimeClasspath)
+  outputs.file("./opa-input-schema.json")
+  inputs.files(jsonSchemaGenerator.runtimeClasspath).withNormalizer(ClasspathNormalizer::class.java)
 
   classpath = jsonSchemaGenerator.runtimeClasspath
   mainClass.set("org.apache.polaris.extension.auth.opa.model.OpaSchemaGenerator")
-  args("${projectDir}/opa-input-schema.json")
+  args("./opa-input-schema.json")
 }
 
 // Task to validate that the committed schema matches the generated schema
@@ -95,25 +95,30 @@ tasks.register<JavaExec>("validateOpaSchema") {
 
   dependsOn(tasks.compileJava, tasks.named("jandex"))
 
-  val tempSchemaFile = layout.buildDirectory.file("opa-schema/opa-input-schema-generated.json")
+  val tempSchemaFile =
+    layout.buildDirectory
+      .file("opa-schema/opa-input-schema-generated.json")
+      .get()
+      .asFile
+      .relativeTo(projectDir)
   val committedSchemaFile = file("${projectDir}/opa-input-schema.json")
   val logFile = layout.buildDirectory.file("opa-schema/generator.log")
 
   // Only execute validation if anything changed
   outputs.cacheIf { true }
   outputs.file(tempSchemaFile)
-  inputs.file(committedSchemaFile)
-  inputs.files(jsonSchemaGenerator.runtimeClasspath)
+  inputs.file(committedSchemaFile).withPathSensitivity(PathSensitivity.RELATIVE)
+  inputs.files(jsonSchemaGenerator.runtimeClasspath).withNormalizer(ClasspathNormalizer::class.java)
 
   classpath = jsonSchemaGenerator.runtimeClasspath
   mainClass.set("org.apache.polaris.extension.auth.opa.model.OpaSchemaGenerator")
-  args(tempSchemaFile.get().asFile.absolutePath)
+  args(tempSchemaFile)
   isIgnoreExitValue = true
 
   var outStream: OutputStream? = null
   doFirst {
     // Ensure temp directory exists
-    tempSchemaFile.get().asFile.parentFile.mkdirs()
+    tempSchemaFile.parentFile.mkdirs()
     outStream = logFile.get().asFile.outputStream()
     standardOutput = outStream
     errorOutput = outStream
@@ -133,7 +138,7 @@ tasks.register<JavaExec>("validateOpaSchema") {
       )
     }
 
-    val generatedContent = tempSchemaFile.get().asFile.readText().trim()
+    val generatedContent = projectDir.resolve(tempSchemaFile).readText().trim()
     val committedContent = committedSchemaFile.readText().trim()
 
     if (generatedContent != committedContent) {
@@ -150,7 +155,7 @@ tasks.register<JavaExec>("validateOpaSchema") {
         |Then commit the updated opa-input-schema.json file.
         |
         |Committed file: ${committedSchemaFile.absolutePath}
-        |Generated file: ${tempSchemaFile.get().asFile.absolutePath}
+        |Generated file: ${tempSchemaFile.absolutePath}
       """
           .trimMargin()
       )
diff --git a/persistence/nosql/idgen/impl/build.gradle.kts b/persistence/nosql/idgen/impl/build.gradle.kts
index b3b1a35c78..f685d7407b 100644
--- a/persistence/nosql/idgen/impl/build.gradle.kts
+++ b/persistence/nosql/idgen/impl/build.gradle.kts
@@ -91,8 +91,8 @@ tasks.named<JcstressTask>("jcstress") {
   inputs.property("availableProcessors", Runtime.getRuntime().availableProcessors())
   inputs.property("jcstressMode", jcstressMode.get())
   inputs.property("jcstressSplitPerActor", jcstressSplitPerActor.get())
-  inputs.files(jcstressRuntime)
-  inputs.files(configurations.runtimeClasspath)
+  inputs.files(jcstressRuntime).withNormalizer(ClasspathNormalizer::class.java)
+  inputs.files(configurations.runtimeClasspath).withNormalizer(ClasspathNormalizer::class.java)
   outputs.dir(layout.buildDirectory.dir("reports/jcstress"))
   outputs.cacheIf { true }
 
diff --git a/persistence/nosql/persistence/impl/build.gradle.kts b/persistence/nosql/persistence/impl/build.gradle.kts
index 6077553123..3375320d0f 100644
--- a/persistence/nosql/persistence/impl/build.gradle.kts
+++ b/persistence/nosql/persistence/impl/build.gradle.kts
@@ -125,8 +125,8 @@ tasks.named<JcstressTask>("jcstress") {
   inputs.property("availableProcessors", Runtime.getRuntime().availableProcessors())
   inputs.property("jcstressMode", jcstressMode.get())
   inputs.property("jcstressSplitPerActor", jcstressSplitPerActor.get())
-  inputs.files(jcstressRuntime)
-  inputs.files(configurations.runtimeClasspath)
+  inputs.files(jcstressRuntime).withNormalizer(ClasspathNormalizer::class.java)
+  inputs.files(configurations.runtimeClasspath).withNormalizer(ClasspathNormalizer::class.java)
   outputs.dir(layout.buildDirectory.dir("reports/jcstress"))
   outputs.cacheIf { true }
 
diff --git a/tools/config-docs/site/build.gradle.kts b/tools/config-docs/site/build.gradle.kts
index 905504f612..817c56820e 100644
--- a/tools/config-docs/site/build.gradle.kts
+++ b/tools/config-docs/site/build.gradle.kts
@@ -66,14 +66,15 @@ val generatedMarkdownDocs = tasks.register<JavaExec>("generatedMarkdownDocs") {
 
   mainClass = "org.apache.polaris.docs.generator.ReferenceConfigDocsGenerator"
 
+  val genMdDocsDir= generatedMarkdownDocsDir.map { it.asFile.relativeTo(projectDir) }
   outputs.cacheIf { true }
-  outputs.dir(generatedMarkdownDocsDir)
-  inputs.files(doclet)
-  inputs.files(genProjects)
-  inputs.files(genSources)
+  outputs.dir(genMdDocsDir)
+  inputs.files(doclet).withNormalizer(ClasspathNormalizer::class.java)
+  inputs.files(genProjects).withNormalizer(ClasspathNormalizer::class.java)
+  inputs.files(genSources).withNormalizer(ClasspathNormalizer::class.java)
 
   doFirst {
-    delete(generatedMarkdownDocsDir)
+    delete(genMdDocsDir)
   }
 
   argumentProviders.add(CommandLineArgumentProvider {
@@ -93,7 +94,7 @@ val generatedMarkdownDocs = tasks.register<JavaExec>("generatedMarkdownDocs") {
             ?: a.variant.attributes.getAttribute(categoryAttributeAsString)
         category != null && category.toString() == Category.LIBRARY
       }
-      .map { a -> a.file }
+      .map { a -> a.file.relativeTo(projectDir) }
 
     val sources = genSources.incoming.artifacts
       .filter { a ->
@@ -110,12 +111,12 @@ val generatedMarkdownDocs = tasks.register<JavaExec>("generatedMarkdownDocs") {
           verificationType.name == VerificationType.MAIN_SOURCES &&
           a.file.name != "resources"
       }
-      .map { a -> a.file }
+      .map { a -> a.file.relativeTo(projectDir) }
 
     listOf(
       "--classpath", classes.joinToString(":"),
       "--sourcepath", sources.joinToString(":"),
-      "--destination", generatedMarkdownDocsDir.get().toString()
+      "--destination", genMdDocsDir.get().toString()
     ) + (if (logger.isInfoEnabled) listOf("--verbose") else listOf())
   })
 
diff --git a/tools/version/build.gradle.kts b/tools/version/build.gradle.kts
index f7711e279e..9c337cf38a 100644
--- a/tools/version/build.gradle.kts
+++ b/tools/version/build.gradle.kts
@@ -32,9 +32,11 @@ description =
 val syncNoticeAndLicense by
   tasks.registering(Sync::class) {
     // Have to manually declare the inputs of this task here on top of the from/include below
-    inputs.files(
-      rootProject.fileTree(rootProject.rootDir) { include("NOTICE*", "LICENSE*", "version.txt") }
-    )
+    inputs
+      .files(
+        rootProject.fileTree(rootProject.rootDir) { include("NOTICE*", "LICENSE*", "version.txt") }
+      )
+      .withPathSensitivity(PathSensitivity.RELATIVE)
     inputs.property("version", project.version)
     destinationDir = project.layout.buildDirectory.dir("notice-licenses").get().asFile
     from(rootProject.rootDir) {