Use layout.buildDirectory (#326)

This switches Gradle scripts to use `layout.buildDirectory` instead
of hard-coded "build".
This commit is contained in:
Daniel Chao
2024-03-18 21:42:16 -07:00
committed by GitHub
parent 1f68cf0251
commit e4ccf517fa
11 changed files with 65 additions and 56 deletions

View File

@@ -41,7 +41,7 @@ idea {
} }
val clean by tasks.registering(Delete::class) { val clean by tasks.registering(Delete::class) {
delete("build") delete(layout.buildDirectory)
} }
val printVersion by tasks.registering { val printVersion by tasks.registering {

View File

@@ -105,7 +105,7 @@ tasks.check {
} }
val validateFatJar by tasks.registering { val validateFatJar by tasks.registering {
val outputFile = file("build/validateFatJar/result.txt") val outputFile = layout.buildDirectory.file("validateFatJar/result.txt")
inputs.files(tasks.shadowJar) inputs.files(tasks.shadowJar)
inputs.property("nonRelocations", nonRelocations) inputs.property("nonRelocations", nonRelocations)
outputs.file(outputFile) outputs.file(outputFile)
@@ -125,9 +125,9 @@ val validateFatJar by tasks.registering {
} }
} }
if (unshadowedFiles.isEmpty()) { if (unshadowedFiles.isEmpty()) {
outputFile.writeText("SUCCESS") outputFile.get().asFile.writeText("SUCCESS")
} else { } else {
outputFile.writeText("FAILURE") outputFile.get().asFile.writeText("FAILURE")
throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n")) throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n"))
} }
} }
@@ -138,7 +138,7 @@ tasks.check {
val resolveSourcesJars by tasks.registering(ResolveSourcesJars::class) { val resolveSourcesJars by tasks.registering(ResolveSourcesJars::class) {
configuration.set(configurations.runtimeClasspath) configuration.set(configurations.runtimeClasspath)
outputDir.set(project.file("build/resolveSourcesJars")) outputDir.set(layout.buildDirectory.dir("resolveSourcesJars"))
} }
val fatSourcesJar by tasks.registering(MergeSourcesJars::class) { val fatSourcesJar by tasks.registering(MergeSourcesJars::class) {

View File

@@ -33,7 +33,7 @@ dependencies {
} }
val validateHtml by tasks.registering(JavaExec::class) { val validateHtml by tasks.registering(JavaExec::class) {
val resultFile = file("build/validateHtml/result.txt") val resultFile = layout.buildDirectory.file("validateHtml/result.txt")
inputs.files(htmlValidator.sources) inputs.files(htmlValidator.sources)
outputs.file(resultFile) outputs.file(resultFile)
@@ -50,7 +50,7 @@ val validateHtml by tasks.registering(JavaExec::class) {
// write a basic result file s.t. gradle can consider task up-to-date // write a basic result file s.t. gradle can consider task up-to-date
// writing a result file in case validation fails is not easily possible with JavaExec, but also not strictly necessary // writing a result file in case validation fails is not easily possible with JavaExec, but also not strictly necessary
doFirst { project.delete(resultFile) } doFirst { project.delete(resultFile) }
doLast { resultFile.writeText("Success.") } doLast { resultFile.get().asFile.writeText("Success.") }
} }
tasks.check { tasks.check {

View File

@@ -55,7 +55,7 @@ val workAroundKotlinGradlePluginBug by tasks.registering {
// A problem was found with the configuration of task ':pkl-executor:compileJava' (type 'JavaCompile'). // A problem was found with the configuration of task ':pkl-executor:compileJava' (type 'JavaCompile').
// > Directory '[...]/pkl/pkl-executor/build/classes/kotlin/main' // > Directory '[...]/pkl/pkl-executor/build/classes/kotlin/main'
// specified for property 'compileKotlinOutputClasses' does not exist. // specified for property 'compileKotlinOutputClasses' does not exist.
file("build/classes/kotlin/main").mkdirs() layout.buildDirectory.dir("classes/kotlin/main").get().asFile.mkdirs()
} }
} }

View File

@@ -54,14 +54,14 @@ val validatePom by tasks.registering {
return@registering return@registering
} }
val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class) val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
val outputFile = file("build/validatePom") // dummy output to satisfy up-to-date check val outputFile = layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check
dependsOn(generatePomFileForLibraryPublication) dependsOn(generatePomFileForLibraryPublication)
inputs.file(generatePomFileForLibraryPublication.get().destination) inputs.file(generatePomFileForLibraryPublication.get().destination)
outputs.file(outputFile) outputs.file(outputFile)
doLast { doLast {
outputFile.delete() outputFile.get().asFile.delete()
val pomFile = generatePomFileForLibraryPublication.get().destination val pomFile = generatePomFileForLibraryPublication.get().destination
assert(pomFile.exists()) assert(pomFile.exists())
@@ -95,7 +95,7 @@ val validatePom by tasks.registering {
} }
} }
outputFile.writeText("OK") outputFile.get().asFile.writeText("OK")
} }
} }

View File

@@ -56,11 +56,13 @@ dependencies {
testImplementation(projects.pklCommonsTest) testImplementation(projects.pklCommonsTest)
stagedMacAmd64Executable(files("build/executable/pkl-macos-amd64")) fun executableDir(name: String) = files(layout.buildDirectory.dir("executable/$name"))
stagedMacAarch64Executable(files("build/executable/pkl-macos-aarch64")) stagedMacAmd64Executable(executableDir("pkl-macos-amd64"))
stagedLinuxAmd64Executable(files("build/executable/pkl-linux-amd64")) stagedMacAmd64Executable(executableDir("pkl-macos-amd64"))
stagedLinuxAarch64Executable(files("build/executable/pkl-linux-aarch64")) stagedMacAarch64Executable(executableDir("pkl-macos-aarch64"))
stagedAlpineLinuxAmd64Executable(files("build/executable/pkl-alpine-linux-amd64")) stagedLinuxAmd64Executable(executableDir("pkl-linux-amd64"))
stagedLinuxAarch64Executable(executableDir("pkl-linux-aarch64"))
stagedAlpineLinuxAmd64Executable(executableDir("pkl-alpine-linux-amd64"))
} }
tasks.jar { tasks.jar {
@@ -90,7 +92,7 @@ tasks.shadowJar {
val javaExecutable by tasks.registering(ExecutableJar::class) { val javaExecutable by tasks.registering(ExecutableJar::class) {
inJar.set(tasks.shadowJar.flatMap { it.archiveFile }) inJar.set(tasks.shadowJar.flatMap { it.archiveFile })
outJar.set(file("build/executable/jpkl")) outJar.set(layout.buildDirectory.file("executable/jpkl"))
// uncomment for debugging // uncomment for debugging
//jvmArgs.addAll("-ea", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") //jvmArgs.addAll("-ea", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
@@ -117,22 +119,22 @@ tasks.check {
// To catch this and similar problems, test that Java executable starts successfully. // To catch this and similar problems, test that Java executable starts successfully.
val testStartJavaExecutable by tasks.registering(Exec::class) { val testStartJavaExecutable by tasks.registering(Exec::class) {
dependsOn(javaExecutable) dependsOn(javaExecutable)
val outputFile = file("build/testStartJavaExecutable") // dummy output to satisfy up-to-date check val outputFile = layout.buildDirectory.file("testStartJavaExecutable") // dummy output to satisfy up-to-date check
outputs.file(outputFile) outputs.file(outputFile)
executable = javaExecutable.get().outputs.files.singleFile.toString() executable = javaExecutable.get().outputs.files.singleFile.toString()
args("--version") args("--version")
doFirst { outputFile.delete() } doFirst { outputFile.get().asFile.delete() }
doLast { outputFile.writeText("OK") } doLast { outputFile.get().asFile.writeText("OK") }
} }
tasks.check { tasks.check {
dependsOn(testStartJavaExecutable) dependsOn(testStartJavaExecutable)
} }
fun Exec.configureExecutable(isEnabled: Boolean, outputFile: File, extraArgs: List<String> = listOf()) { fun Exec.configureExecutable(isEnabled: Boolean, outputFile: Provider<RegularFile>, extraArgs: List<String> = listOf()) {
enabled = isEnabled enabled = isEnabled
dependsOn(":installGraalVm") dependsOn(":installGraalVm")
@@ -140,7 +142,7 @@ fun Exec.configureExecutable(isEnabled: Boolean, outputFile: File, extraArgs: Li
inputs.files(configurations.runtimeClasspath) inputs.files(configurations.runtimeClasspath)
outputs.file(outputFile) outputs.file(outputFile)
workingDir = outputFile.parentFile workingDir(outputFile.map { it.asFile.parentFile })
executable = "${buildInfo.graalVm.baseDir}/bin/native-image" executable = "${buildInfo.graalVm.baseDir}/bin/native-image"
// JARs to exclude from the class path for the native-image build. // JARs to exclude from the class path for the native-image build.
@@ -161,7 +163,7 @@ fun Exec.configureExecutable(isEnabled: Boolean, outputFile: File, extraArgs: Li
,"-H:IncludeResourceBundles=org.pkl.core.errorMessages" ,"-H:IncludeResourceBundles=org.pkl.core.errorMessages"
,"--macro:truffle" ,"--macro:truffle"
,"-H:Class=org.pkl.cli.Main" ,"-H:Class=org.pkl.cli.Main"
,"-H:Name=${outputFile.name}" ,"-H:Name=${outputFile.get().asFile.name}"
//,"--native-image-info" //,"--native-image-info"
//,"-Dpolyglot.image-build-time.PreinitializeContexts=pkl" //,"-Dpolyglot.image-build-time.PreinitializeContexts=pkl"
// the actual limit (currently) used by native-image is this number + 1400 (idea is to compensate for Truffle's own nodes) // the actual limit (currently) used by native-image is this number + 1400 (idea is to compensate for Truffle's own nodes)
@@ -209,7 +211,7 @@ fun Exec.configureExecutable(isEnabled: Boolean, outputFile: File, extraArgs: Li
* Builds the pkl CLI for macOS/amd64. * Builds the pkl CLI for macOS/amd64.
*/ */
val macExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) { val macExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) {
configureExecutable(buildInfo.os.isMacOsX && buildInfo.graalVm.isGraal22, file("build/executable/pkl-macos-amd64")) configureExecutable(buildInfo.os.isMacOsX && buildInfo.graalVm.isGraal22, layout.buildDirectory.file("executable/pkl-macos-amd64"))
} }
/** /**
@@ -221,7 +223,7 @@ val macExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) {
val macExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class) { val macExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class) {
configureExecutable( configureExecutable(
buildInfo.os.isMacOsX && !buildInfo.graalVm.isGraal22, buildInfo.os.isMacOsX && !buildInfo.graalVm.isGraal22,
file("build/executable/pkl-macos-aarch64"), layout.buildDirectory.file("executable/pkl-macos-aarch64"),
listOf( listOf(
"--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess", "--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess",
"-H:+AllowDeprecatedBuilderClassesOnImageClasspath" "-H:+AllowDeprecatedBuilderClassesOnImageClasspath"
@@ -233,7 +235,7 @@ val macExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class) {
* Builds the pkl CLI for linux/amd64. * Builds the pkl CLI for linux/amd64.
*/ */
val linuxExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) { val linuxExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) {
configureExecutable(buildInfo.os.isLinux && buildInfo.arch == "amd64", file("build/executable/pkl-linux-amd64")) configureExecutable(buildInfo.os.isLinux && buildInfo.arch == "amd64", layout.buildDirectory.file("executable/pkl-linux-amd64"))
} }
/** /**
@@ -243,7 +245,7 @@ val linuxExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) {
* ARM instances. * ARM instances.
*/ */
val linuxExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class) { val linuxExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class) {
configureExecutable(buildInfo.os.isLinux && buildInfo.arch == "aarch64", file("build/executable/pkl-linux-aarch64")) configureExecutable(buildInfo.os.isLinux && buildInfo.arch == "aarch64", layout.buildDirectory.file("executable/pkl-linux-aarch64"))
} }
/** /**
@@ -255,7 +257,7 @@ val linuxExecutableAarch64: TaskProvider<Exec> by tasks.registering(Exec::class)
val alpineExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) { val alpineExecutableAmd64: TaskProvider<Exec> by tasks.registering(Exec::class) {
configureExecutable( configureExecutable(
buildInfo.os.isLinux && buildInfo.arch == "amd64" && buildInfo.hasMuslToolchain, buildInfo.os.isLinux && buildInfo.arch == "amd64" && buildInfo.hasMuslToolchain,
file("build/executable/pkl-alpine-linux-amd64"), layout.buildDirectory.file("executable/pkl-alpine-linux-amd64"),
listOf( listOf(
"--static", "--static",
"--libc=musl", "--libc=musl",

View File

@@ -32,11 +32,11 @@ tasks.processResources {
for (packageDir in file("src/main/files/packages").listFiles()!!) { for (packageDir in file("src/main/files/packages").listFiles()!!) {
if (!packageDir.isDirectory) continue if (!packageDir.isDirectory) continue
val destinationDir = file("build/test-packages/${packageDir.name}") val destinationDir = layout.buildDirectory.dir("test-packages/${packageDir.name}")
val metadataJson = file("$packageDir/${packageDir.name}.json") val metadataJson = file("$packageDir/${packageDir.name}.json")
val packageContents = packageDir.resolve("package") val packageContents = packageDir.resolve("package")
val zipFileName = "${packageDir.name}.zip" val zipFileName = "${packageDir.name}.zip"
val archiveFile = destinationDir.resolve(zipFileName) val archiveFile = destinationDir.map { it.file(zipFileName) }
val zipTask = tasks.register("zip-${packageDir.name}", Zip::class) { val zipTask = tasks.register("zip-${packageDir.name}", Zip::class) {
destinationDirectory.set(destinationDir) destinationDirectory.set(destinationDir)
@@ -51,14 +51,14 @@ for (packageDir in file("src/main/files/packages").listFiles()!!) {
dependsOn(zipTask) dependsOn(zipTask)
from(metadataJson) from(metadataJson)
into(destinationDir) into(destinationDir)
val shasumFile = file("$destinationDir/${packageDir.name}.json.sha256") val shasumFile = destinationDir.map { it.file("${packageDir.name}.json.sha256") }
outputs.file(shasumFile) outputs.file(shasumFile)
filter { line -> filter { line ->
line.replaceFirst("\$computedChecksum", archiveFile.computeChecksum()) line.replaceFirst("\$computedChecksum", archiveFile.get().asFile.computeChecksum())
} }
doLast { doLast {
val outputFile = destinationDir.resolve("${packageDir.name}.json") val outputFile = destinationDir.get().asFile.resolve("${packageDir.name}.json")
shasumFile.writeText(outputFile.computeChecksum()) shasumFile.get().asFile.writeText(outputFile.computeChecksum())
} }
} }
@@ -67,13 +67,13 @@ for (packageDir in file("src/main/files/packages").listFiles()!!) {
} }
} }
val keystoreDir = file("build/keystore") val keystoreDir = layout.buildDirectory.dir("keystore")
val keystoreName = "localhost.p12" val keystoreName = "localhost.p12"
val keystoreFile = keystoreDir.map { it.file(keystoreName) }
val certsFileName = "localhost.pem" val certsFileName = "localhost.pem"
val generateKeys by tasks.registering(JavaExec::class) { val generateKeys by tasks.registering(JavaExec::class) {
val outputFile = file("$keystoreDir/$keystoreName") outputs.file(keystoreFile)
outputs.file(outputFile)
mainClass.set("sun.security.tools.keytool.Main") mainClass.set("sun.security.tools.keytool.Main")
args = listOf( args = listOf(
"-genkeypair", "-genkeypair",
@@ -83,17 +83,17 @@ val generateKeys by tasks.registering(JavaExec::class) {
"-storepass", "password", "-storepass", "password",
"-dname", "CN=localhost" "-dname", "CN=localhost"
) )
workingDir = keystoreDir workingDir(keystoreDir)
doFirst { doFirst {
workingDir.mkdirs() workingDir.mkdirs()
outputFile.delete() keystoreFile.get().asFile.delete()
} }
} }
val exportCerts by tasks.registering(JavaExec::class) { val exportCerts by tasks.registering(JavaExec::class) {
val outputFile = file("$keystoreDir/$certsFileName") val outputFile = keystoreDir.map { it.file(certsFileName) }
dependsOn(generateKeys) dependsOn(generateKeys)
inputs.file("$keystoreDir/$keystoreName") inputs.file(keystoreFile)
outputs.file(outputFile) outputs.file(outputFile)
mainClass.set("sun.security.tools.keytool.Main") mainClass.set("sun.security.tools.keytool.Main")
args = listOf( args = listOf(
@@ -104,10 +104,10 @@ val exportCerts by tasks.registering(JavaExec::class) {
"-rfc", "-rfc",
"-file", certsFileName "-file", certsFileName
) )
workingDir = keystoreDir workingDir(keystoreDir)
doFirst { doFirst {
workingDir.mkdirs() workingDir.mkdirs()
outputFile.delete() outputFile.get().asFile.delete()
} }
} }

View File

@@ -10,14 +10,18 @@ val pklCodegenJava: Configuration by configurations.creating
val firstPartySourcesJars by configurations.existing val firstPartySourcesJars by configurations.existing
val generateTestConfigClasses by tasks.registering(JavaExec::class) { val generateTestConfigClasses by tasks.registering(JavaExec::class) {
outputs.dir("build/testConfigClasses") val outputDir = layout.buildDirectory.dir("testConfigClasses")
outputs.dir(outputDir)
inputs.dir("src/test/resources/codegenPkl") inputs.dir("src/test/resources/codegenPkl")
classpath = pklCodegenJava classpath = pklCodegenJava
mainClass.set("org.pkl.codegen.java.Main") mainClass.set("org.pkl.codegen.java.Main")
args("--output-dir", "build/testConfigClasses") argumentProviders.add(CommandLineArgumentProvider {
args("--generate-javadoc") listOf(
args(fileTree("src/test/resources/codegenPkl")) "--output-dir", outputDir.get().asFile.path,
"--generate-javadoc"
) + fileTree("src/test/resources/codegenPkl").map { it.path }
})
} }
tasks.processTestResources { tasks.processTestResources {
@@ -56,8 +60,8 @@ val testFromJar by tasks.registering(Test::class) {
//} //}
sourceSets.getByName("test") { sourceSets.getByName("test") {
java.srcDir("build/testConfigClasses/java") java.srcDir(layout.buildDirectory.dir("testConfigClasses/java"))
resources.srcDir("build/testConfigClasses/resources") resources.srcDir(layout.buildDirectory.dir("testConfigClasses/resources"))
} }
dependencies { dependencies {

View File

@@ -28,18 +28,21 @@ dependencies {
} }
val generateTestConfigClasses by tasks.registering(JavaExec::class) { val generateTestConfigClasses by tasks.registering(JavaExec::class) {
outputs.dir("build/testConfigClasses") val outputDir = layout.buildDirectory.dir("testConfigClasses")
outputs.dir(outputDir)
inputs.dir("src/test/resources/codegenPkl") inputs.dir("src/test/resources/codegenPkl")
classpath = pklCodegenKotlin classpath = pklCodegenKotlin
mainClass.set("org.pkl.codegen.kotlin.Main") mainClass.set("org.pkl.codegen.kotlin.Main")
args("--output-dir", "build/testConfigClasses") argumentProviders.add(CommandLineArgumentProvider {
args(fileTree("src/test/resources/codegenPkl")) listOf("--output-dir", outputDir.get().asFile.absolutePath) +
fileTree("src/test/resources/codegenPkl").map { it.absolutePath }
})
} }
sourceSets.getByName("test") { sourceSets.getByName("test") {
java.srcDir("build/testConfigClasses/kotlin") java.srcDir(layout.buildDirectory.dir("testConfigClasses/kotlin"))
resources.srcDir("build/testConfigClasses/resources") resources.srcDir(layout.buildDirectory.dir("testConfigClasses/resources"))
} }
tasks.processTestResources { tasks.processTestResources {

View File

@@ -282,7 +282,7 @@ tasks.testNative {
tasks.clean { tasks.clean {
delete("generated/") delete("generated/")
delete("build/test-packages") delete(layout.buildDirectory.dir("test-packages"))
} }
spotless { spotless {

View File

@@ -10,7 +10,7 @@ plugins {
// create and publish a self-contained stdlib archive // create and publish a self-contained stdlib archive
// purpose is to provide non-jvm tools/projects with a versioned stdlib // purpose is to provide non-jvm tools/projects with a versioned stdlib
val stdlibZip by tasks.registering(Zip::class) { val stdlibZip by tasks.registering(Zip::class) {
destinationDirectory.set(file("build/libs")) destinationDirectory.set(layout.buildDirectory.dir("libs"))
archiveBaseName.set("pkl-stdlib") archiveBaseName.set("pkl-stdlib")
archiveVersion.set(project.version as String) archiveVersion.set(project.version as String)
into("org/pkl/stdlib") { into("org/pkl/stdlib") {