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) {