support for testing offline via gradle-side reflection hacks and firejail
ci/woodpecker/push/woodpecker Pipeline failed Details
ci/woodpecker/push/docs Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2023-07-15 00:00:27 +02:00
parent ec67a80389
commit cbba1ab70a
Signed by: Johannes
GPG Key ID: E76429612C2929F4
2 changed files with 21 additions and 0 deletions

2
buildSrc/java-offline Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
firejail --net=none "$G_ORIGINAL_EXECUTABLE" "$@"

View File

@ -36,4 +36,23 @@ publishing {
}
}
}
}
afterEvaluate {
if (hasProperty("offline")) {
tasks.withType(JavaExec::class) {
environment("G_ORIGINAL_EXECUTABLE", executable ?: "java")
//TODO once we are not using a toolchain, just do executable(rootDir.resolve("buildSrc/java-offline"))
val originalMetadata = javaLauncher.get().metadata
val field = org.gradle.api.internal.provider.AbstractProperty::class.java.getDeclaredField("value")
field.isAccessible = true
val customLauncher = object: JavaLauncher {
override fun getMetadata(): JavaInstallationMetadata = originalMetadata
override fun getExecutablePath(): RegularFile = rootProject.layout.projectDirectory
.dir("buildSrc")
.file("java-offline")
}
field.set(javaLauncher, org.gradle.api.internal.provider.Providers.of(customLauncher))
}
}
}