Change loading of external readers (#1394)

This introduces breaking changes for external readers are loaded:

1. In PklProject, relative paths are resolved relative to the enclosing
PklProject file (make behavior consistent with how other settings work)
2. Make CLI flags blow away any settings set on a PklProject
3. Introduce a new `workingDir` property, which defaults to the
PklProject dir

The overall goal is to make this behavior consistent with how other
settings work.
For example, relative paths for other evaluator settings are already
relative to the project directory.
Additionally, in every other case, CLI flags will overwrite any setting
set within PklProject.
This commit is contained in:
Daniel Chao
2026-06-02 11:02:52 -07:00
committed by GitHub
parent c9f3823952
commit 035ef0a789
51 changed files with 1880 additions and 92 deletions
+53 -1
View File
@@ -27,7 +27,17 @@ plugins {
idea
}
val generatorSourceSet = sourceSets.register("generator")
val generatorSourceSet: NamedDomainObjectProvider<SourceSet> = sourceSets.register("generator")
val externalReaderFixtureSourceSet: NamedDomainObjectProvider<SourceSet> =
sourceSets.register("externalReaderFixture") {
compileClasspath += sourceSets.test.get().output + sourceSets.test.get().compileClasspath
runtimeClasspath += sourceSets.test.get().output + sourceSets.test.get().runtimeClasspath
}
val externalReaderFixtureImplementation: Configuration by configurations.getting {
extendsFrom(configurations.testImplementation.get())
}
idea {
module {
@@ -126,8 +136,45 @@ tasks.withType<JavaCompile>().configureEach {
tasks.compileKotlin { enabled = false }
val externalReaderFixture by tasks.registering {
group = "build"
dependsOn(tasks.named("compileExternalReaderFixtureJava"))
inputs.files(externalReaderFixtureSourceSet.map { it.output })
val fileName = if (buildInfo.os.isWindows) "externalreader.bat" else "externalreader"
val outputFile = layout.buildDirectory.file("fixtures/$fileName")
outputs.file(outputFile)
doLast {
val classpath = externalReaderFixtureSourceSet.get().runtimeClasspath.asPath
val scriptContent =
if (buildInfo.os.isWindows) {
"""
@echo off
java -cp $classpath org.pkl.core.externalreaderfixture.Main
"""
.trimIndent()
} else {
"""
#!/usr/bin/env bash
java -cp $classpath org.pkl.core.externalreaderfixture.Main
"""
.trimIndent()
}
outputFile.get().asFile.writeText(scriptContent)
outputFile.get().asFile.setExecutable(true)
println("Created external reader ${outputFile.get().asFile.absolutePath}")
}
}
tasks.test {
configureTest()
dependsOn(externalReaderFixture)
environment(
"PATH",
listOf(System.getenv("PATH"), layout.buildDirectory.dir("fixtures/").get())
.joinToString(File.pathSeparator),
)
useJUnitPlatform {
excludeEngines("MacAmd64LanguageSnippetTestsEngine")
excludeEngines("MacAarch64LanguageSnippetTestsEngine")
@@ -139,6 +186,11 @@ tasks.test {
// testing very large lists requires more memory than the default 512m!
maxHeapSize = "1g"
systemProperty(
"org.pkl.core.testExternalReaderPath",
externalReaderFixture.map { it.outputs.files.singleFile.absolutePath },
)
}
val generateBaseModuleMembers by