[Gradle] Limit max heap size for Kotlin daemon in integration tests
This change should further reduce memory pressure on running these tests on CI agents. Kapt4 tests require more Kotlin daemon memory than default 1g. It is a known issue and eventually should be addressed by the compiler team.
This commit is contained in:
committed by
Space Team
parent
425d5e808b
commit
ea49a9a292
+3
@@ -101,6 +101,7 @@ abstract class ExecutionStrategyIT : KGPDaemonsBaseTest() {
|
|||||||
projectName = "kotlinBuiltins",
|
projectName = "kotlinBuiltins",
|
||||||
gradleVersion = gradleVersion,
|
gradleVersion = gradleVersion,
|
||||||
addHeapDumpOptions = false,
|
addHeapDumpOptions = false,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = null,
|
||||||
buildOptions = defaultBuildOptions.copy(
|
buildOptions = defaultBuildOptions.copy(
|
||||||
useDaemonFallbackStrategy = false,
|
useDaemonFallbackStrategy = false,
|
||||||
compilerExecutionStrategy = KotlinCompilerExecutionStrategy.DAEMON,
|
compilerExecutionStrategy = KotlinCompilerExecutionStrategy.DAEMON,
|
||||||
@@ -123,6 +124,7 @@ abstract class ExecutionStrategyIT : KGPDaemonsBaseTest() {
|
|||||||
project(
|
project(
|
||||||
projectName = "kotlinBuiltins",
|
projectName = "kotlinBuiltins",
|
||||||
gradleVersion = gradleVersion,
|
gradleVersion = gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = null,
|
||||||
addHeapDumpOptions = false
|
addHeapDumpOptions = false
|
||||||
) {
|
) {
|
||||||
setupProject(this)
|
setupProject(this)
|
||||||
@@ -203,6 +205,7 @@ abstract class ExecutionStrategyIT : KGPDaemonsBaseTest() {
|
|||||||
projectName = "kotlinBuiltins",
|
projectName = "kotlinBuiltins",
|
||||||
gradleVersion = gradleVersion,
|
gradleVersion = gradleVersion,
|
||||||
addHeapDumpOptions = addHeapDumpOptions,
|
addHeapDumpOptions = addHeapDumpOptions,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = if (shouldConfigureStrategyViaGradleProperty) null else 1024,
|
||||||
buildOptions = defaultBuildOptions.copy(
|
buildOptions = defaultBuildOptions.copy(
|
||||||
useDaemonFallbackStrategy = testFallbackStrategy,
|
useDaemonFallbackStrategy = testFallbackStrategy,
|
||||||
compilerExecutionStrategy = if (shouldConfigureStrategyViaGradleProperty) {
|
compilerExecutionStrategy = if (shouldConfigureStrategyViaGradleProperty) {
|
||||||
|
|||||||
+17
-8
@@ -152,7 +152,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("Kapt is skipped when no annotation processors are added")
|
@DisplayName("Kapt is skipped when no annotation processors are added")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testKaptSkipped(gradleVersion: GradleVersion) {
|
fun testKaptSkipped(gradleVersion: GradleVersion) {
|
||||||
project("kaptSkipped".withPrefix, gradleVersion) {
|
project("kaptSkipped".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertTasksSkipped(":kaptGenerateStubsKotlin", ":kaptKotlin")
|
assertTasksSkipped(":kaptGenerateStubsKotlin", ":kaptKotlin")
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("Kapt is not skipped when all annotation processors are declared as indirect dependencies")
|
@DisplayName("Kapt is not skipped when all annotation processors are declared as indirect dependencies")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testKaptNotSkippedWithIndirectDependencies(gradleVersion: GradleVersion) {
|
fun testKaptNotSkippedWithIndirectDependencies(gradleVersion: GradleVersion) {
|
||||||
project("indirectDependencies".withPrefix, gradleVersion) {
|
project("indirectDependencies".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
build("assemble") {
|
build("assemble") {
|
||||||
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin")
|
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin")
|
||||||
}
|
}
|
||||||
@@ -179,6 +179,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
) {
|
) {
|
||||||
//language=Groovy
|
//language=Groovy
|
||||||
buildGradle.appendText(
|
buildGradle.appendText(
|
||||||
@@ -208,7 +209,8 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
) {
|
) {
|
||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048
|
||||||
) {
|
) {
|
||||||
//language=Groovy
|
//language=Groovy
|
||||||
buildGradle.appendText(
|
buildGradle.appendText(
|
||||||
@@ -337,7 +339,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("Kapt tasks is up-to-date on the second run")
|
@DisplayName("Kapt tasks is up-to-date on the second run")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testSimple(gradleVersion: GradleVersion) {
|
fun testSimple(gradleVersion: GradleVersion) {
|
||||||
project("simple".withPrefix, gradleVersion) {
|
project("simple".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
|
|
||||||
build("build") {
|
build("build") {
|
||||||
assertKaptSuccessful()
|
assertKaptSuccessful()
|
||||||
@@ -551,6 +553,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"incrementalRebuild".withPrefix,
|
"incrementalRebuild".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.copy(incremental = true)
|
buildOptions = defaultBuildOptions.copy(incremental = true)
|
||||||
) {
|
) {
|
||||||
val generatedSrc = "build/generated/source/kapt/main"
|
val generatedSrc = "build/generated/source/kapt/main"
|
||||||
@@ -586,6 +589,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.copy(incremental = true)
|
buildOptions = defaultBuildOptions.copy(incremental = true)
|
||||||
) {
|
) {
|
||||||
val internalDummyKt = javaSourcesDir().resolve("foo/InternalDummy.kt")
|
val internalDummyKt = javaSourcesDir().resolve("foo/InternalDummy.kt")
|
||||||
@@ -634,6 +638,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
||||||
) {
|
) {
|
||||||
val arg = "-Xsuppress-version-warnings"
|
val arg = "-Xsuppress-version-warnings"
|
||||||
@@ -658,7 +663,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("generates Kotlin code")
|
@DisplayName("generates Kotlin code")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testOutputKotlinCode(gradleVersion: GradleVersion) {
|
fun testOutputKotlinCode(gradleVersion: GradleVersion) {
|
||||||
project("kaptOutputKotlinCode".withPrefix, gradleVersion) {
|
project("kaptOutputKotlinCode".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
build("build") {
|
build("build") {
|
||||||
assertKaptSuccessful()
|
assertKaptSuccessful()
|
||||||
assertFileExists(projectPath.resolve("build/generated/source/kapt/main/example/TestClassCustomized.java"))
|
assertFileExists(projectPath.resolve("build/generated/source/kapt/main/example/TestClassCustomized.java"))
|
||||||
@@ -672,7 +677,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("location mapping is working as expected")
|
@DisplayName("location mapping is working as expected")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testLocationMapping(gradleVersion: GradleVersion) {
|
fun testLocationMapping(gradleVersion: GradleVersion) {
|
||||||
project("locationMapping".withPrefix, gradleVersion) {
|
project("locationMapping".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
val regex = "((Test\\.java)|(test\\.kt)):(\\d+): error: GenError element".toRegex()
|
val regex = "((Test\\.java)|(test\\.kt)):(\\d+): error: GenError element".toRegex()
|
||||||
|
|
||||||
fun BuildResult.getErrorMessages(): String =
|
fun BuildResult.getErrorMessages(): String =
|
||||||
@@ -804,7 +809,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("up-to-date checks are working")
|
@DisplayName("up-to-date checks are working")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testKaptAvoidance(gradleVersion: GradleVersion) {
|
fun testKaptAvoidance(gradleVersion: GradleVersion) {
|
||||||
project("kaptAvoidance".withPrefix, gradleVersion) {
|
project("kaptAvoidance".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
|
|
||||||
subProject("app").buildGradle.modify {
|
subProject("app").buildGradle.modify {
|
||||||
"$it\n\nkapt.includeCompileClasspath = true"
|
"$it\n\nkapt.includeCompileClasspath = true"
|
||||||
@@ -1059,6 +1064,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"jpms-module".withPrefix,
|
"jpms-module".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
) {
|
) {
|
||||||
build("assemble") {
|
build("assemble") {
|
||||||
assertTasksExecuted(":kaptKotlin", ":kaptGenerateStubsKotlin", ":compileKotlin", ":compileJava")
|
assertTasksExecuted(":kaptKotlin", ":kaptGenerateStubsKotlin", ":compileKotlin", ":compileJava")
|
||||||
@@ -1089,6 +1095,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"incrementalRebuild".withPrefix,
|
"incrementalRebuild".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.withConfigurationCache
|
buildOptions = defaultBuildOptions.withConfigurationCache
|
||||||
) {
|
) {
|
||||||
build("assemble")
|
build("assemble")
|
||||||
@@ -1158,7 +1165,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
@DisplayName("Generated sources attached to KotlinSourceSet are also used by generate stubs task")
|
@DisplayName("Generated sources attached to KotlinSourceSet are also used by generate stubs task")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testGeneratedSourcesUsedInGenerateStubsTask(gradleVersion: GradleVersion) {
|
fun testGeneratedSourcesUsedInGenerateStubsTask(gradleVersion: GradleVersion) {
|
||||||
project("generatedSources".withPrefix, gradleVersion) {
|
project("generatedSources".withPrefix, gradleVersion, enableKotlinDaemonMemoryLimitInMb = 2048) {
|
||||||
build("assemble")
|
build("assemble")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1191,6 +1198,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
||||||
) {
|
) {
|
||||||
buildGradle.appendText(
|
buildGradle.appendText(
|
||||||
@@ -1379,6 +1387,7 @@ open class Kapt3IT : Kapt3BaseIT() {
|
|||||||
project(
|
project(
|
||||||
"simple".withPrefix,
|
"simple".withPrefix,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = 2048,
|
||||||
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -23,7 +23,7 @@ import org.gradle.tooling.internal.consumer.ConnectorServices
|
|||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.compilerRunner.*
|
import org.jetbrains.kotlin.compilerRunner.*
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.Assumptions.assumeFalse
|
import org.junit.jupiter.api.Disabled
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
@@ -108,6 +108,7 @@ class KotlinDaemonIT : KGPDaemonsBaseTest() {
|
|||||||
project(
|
project(
|
||||||
"kotlinProject",
|
"kotlinProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = null,
|
||||||
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.INFO)
|
buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.INFO)
|
||||||
) {
|
) {
|
||||||
gradleProperties.append(
|
gradleProperties.append(
|
||||||
@@ -156,11 +157,11 @@ class KotlinDaemonIT : KGPDaemonsBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("KT-57154: Compiler should use specified toolchain regardless of Gradle Runtime JDK")
|
@DisplayName("KT-57154: Compiler should use specified toolchain regardless of Gradle Runtime JDK")
|
||||||
|
@Disabled("KT-58894: re-enable once fixed")
|
||||||
@JdkVersions(versions = [JavaVersion.VERSION_1_8, JavaVersion.VERSION_11, JavaVersion.VERSION_17])
|
@JdkVersions(versions = [JavaVersion.VERSION_1_8, JavaVersion.VERSION_11, JavaVersion.VERSION_17])
|
||||||
@GradleWithJdkTest
|
@GradleWithJdkTest
|
||||||
@GradleTestVersions(minVersion = TestVersions.Gradle.MAX_SUPPORTED)
|
@GradleTestVersions(minVersion = TestVersions.Gradle.MAX_SUPPORTED)
|
||||||
internal fun testCompilerRuntimeJdkToolchainIndependence(gradleVersion: GradleVersion, jdkVersion: JdkVersions.ProvidedJdk) {
|
internal fun testCompilerRuntimeJdkToolchainIndependence(gradleVersion: GradleVersion, jdkVersion: JdkVersions.ProvidedJdk) {
|
||||||
assumeFalse(defaultBuildOptions.isK2ByDefault, "KT-58894")
|
|
||||||
project(
|
project(
|
||||||
projectName = "kotlin-java-toolchain/onlyJdk11Compatible",
|
projectName = "kotlin-java-toolchain/onlyJdk11Compatible",
|
||||||
gradleVersion = gradleVersion,
|
gradleVersion = gradleVersion,
|
||||||
|
|||||||
+10
-8
@@ -9,6 +9,7 @@ import org.gradle.api.logging.LogLevel
|
|||||||
import org.gradle.util.GradleVersion
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
|
import kotlin.io.path.writeText
|
||||||
|
|
||||||
@DisplayName("Kotlin daemon JVM args")
|
@DisplayName("Kotlin daemon JVM args")
|
||||||
class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
||||||
@@ -18,7 +19,7 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
@GradleTest
|
@GradleTest
|
||||||
@DisplayName("Kotlin daemon by default should inherit Gradle daemon max jvm heap size")
|
@DisplayName("Kotlin daemon by default should inherit Gradle daemon max jvm heap size")
|
||||||
internal fun shouldInheritGradleDaemonArgsByDefault(gradleVersion: GradleVersion) {
|
internal fun shouldInheritGradleDaemonArgsByDefault(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion, enableKotlinDaemonMemoryLimitInMb = null) {
|
||||||
gradleProperties.append(
|
gradleProperties.append(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs = -Xmx758m
|
org.gradle.jvmargs = -Xmx758m
|
||||||
@@ -36,7 +37,7 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
@DisplayName("Kotlin daemon should allow to define own jvm options via gradle daemon jvm args system property")
|
@DisplayName("Kotlin daemon should allow to define own jvm options via gradle daemon jvm args system property")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
internal fun shouldAllowToRedefineViaDGradleOption(gradleVersion: GradleVersion) {
|
internal fun shouldAllowToRedefineViaDGradleOption(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion, enableKotlinDaemonMemoryLimitInMb = null) {
|
||||||
gradleProperties.append(
|
gradleProperties.append(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs =-Xmx758m -Dkotlin.daemon.jvm.options=Xmx1g,Xms128m
|
org.gradle.jvmargs =-Xmx758m -Dkotlin.daemon.jvm.options=Xmx1g,Xms128m
|
||||||
@@ -54,8 +55,8 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
@DisplayName("Jvm args defined in gradle.properties should override Gradle daemon jvm arguments inheritance")
|
@DisplayName("Jvm args defined in gradle.properties should override Gradle daemon jvm arguments inheritance")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
internal fun shouldUseArgumentsFromGradleProperties(gradleVersion: GradleVersion) {
|
internal fun shouldUseArgumentsFromGradleProperties(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion, enableKotlinDaemonMemoryLimitInMb = null) {
|
||||||
gradleProperties.append(
|
gradleProperties.writeText(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs =-Xmx758m -Xms128m
|
org.gradle.jvmargs =-Xmx758m -Xms128m
|
||||||
kotlin.daemon.jvmargs = -Xmx486m -Xms256m
|
kotlin.daemon.jvmargs = -Xmx486m -Xms256m
|
||||||
@@ -73,7 +74,7 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
@DisplayName("Should use arguments from extension DSL")
|
@DisplayName("Should use arguments from extension DSL")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
internal fun shouldUseDslArguments(gradleVersion: GradleVersion) {
|
internal fun shouldUseDslArguments(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion, enableKotlinDaemonMemoryLimitInMb = null) {
|
||||||
gradleProperties.append(
|
gradleProperties.append(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs =-Xmx758m -Xms128m
|
org.gradle.jvmargs =-Xmx758m -Xms128m
|
||||||
@@ -104,9 +105,10 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
internal fun allowOverrideArgsForSpecificTask(gradleVersion: GradleVersion) {
|
internal fun allowOverrideArgsForSpecificTask(gradleVersion: GradleVersion) {
|
||||||
project(
|
project(
|
||||||
projectName = "simpleProject",
|
projectName = "simpleProject",
|
||||||
gradleVersion = gradleVersion
|
gradleVersion = gradleVersion,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = null
|
||||||
) {
|
) {
|
||||||
gradleProperties.append(
|
gradleProperties.writeText(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs = -Xmx758m -Xms128m
|
org.gradle.jvmargs = -Xmx758m -Xms128m
|
||||||
kotlin.daemon.jvmargs = -Xmx486m -Xms256m
|
kotlin.daemon.jvmargs = -Xmx486m -Xms256m
|
||||||
@@ -143,7 +145,7 @@ class KotlinDaemonJvmArgsTest : KGPDaemonsBaseTest() {
|
|||||||
@DisplayName("Should inherit Gradle memory settings if it is not set in Kotlin daemon jvm args")
|
@DisplayName("Should inherit Gradle memory settings if it is not set in Kotlin daemon jvm args")
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun inheritGradleMemorySettingsIfKotlinArgsNotContain(gradleVersion: GradleVersion) {
|
fun inheritGradleMemorySettingsIfKotlinArgsNotContain(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion, enableKotlinDaemonMemoryLimitInMb = null) {
|
||||||
gradleProperties.append(
|
gradleProperties.append(
|
||||||
"""
|
"""
|
||||||
org.gradle.jvmargs =-Xmx758m -Xms128m
|
org.gradle.jvmargs =-Xmx758m -Xms128m
|
||||||
|
|||||||
+19
@@ -32,6 +32,8 @@ import kotlin.test.assertTrue
|
|||||||
* @param [projectName] test project name in `src/test/resources/testProject` directory.
|
* @param [projectName] test project name in `src/test/resources/testProject` directory.
|
||||||
* @param [buildOptions] common Gradle build options
|
* @param [buildOptions] common Gradle build options
|
||||||
* @param [buildJdk] path to JDK build should run with. *Note* Only append to 'gradle.properties'!
|
* @param [buildJdk] path to JDK build should run with. *Note* Only append to 'gradle.properties'!
|
||||||
|
* @param [enableKotlinDaemonMemoryLimitInMb] limit max heap size for Kotlin Daemon.
|
||||||
|
* `null` enables the default limit inherited from the Gradle process.
|
||||||
*/
|
*/
|
||||||
@OptIn(EnvironmentalVariablesOverride::class)
|
@OptIn(EnvironmentalVariablesOverride::class)
|
||||||
fun KGPBaseTest.project(
|
fun KGPBaseTest.project(
|
||||||
@@ -42,6 +44,7 @@ fun KGPBaseTest.project(
|
|||||||
enableBuildScan: Boolean = false,
|
enableBuildScan: Boolean = false,
|
||||||
addHeapDumpOptions: Boolean = true,
|
addHeapDumpOptions: Boolean = true,
|
||||||
enableGradleDebug: Boolean = false,
|
enableGradleDebug: Boolean = false,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb: Int? = 1024,
|
||||||
projectPathAdditionalSuffix: String = "",
|
projectPathAdditionalSuffix: String = "",
|
||||||
buildJdk: File? = null,
|
buildJdk: File? = null,
|
||||||
localRepoDir: Path? = null,
|
localRepoDir: Path? = null,
|
||||||
@@ -76,6 +79,7 @@ fun KGPBaseTest.project(
|
|||||||
forceOutput = forceOutput,
|
forceOutput = forceOutput,
|
||||||
enableBuildScan = enableBuildScan,
|
enableBuildScan = enableBuildScan,
|
||||||
enableGradleDebug = enableGradleDebug,
|
enableGradleDebug = enableGradleDebug,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = enableKotlinDaemonMemoryLimitInMb,
|
||||||
environmentVariables = environmentVariables
|
environmentVariables = environmentVariables
|
||||||
)
|
)
|
||||||
addHeapDumpOptions.ifTrue { testProject.addHeapDumpOptions() }
|
addHeapDumpOptions.ifTrue { testProject.addHeapDumpOptions() }
|
||||||
@@ -98,6 +102,8 @@ fun KGPBaseTest.project(
|
|||||||
* @param [projectName] test project name in 'src/test/resources/testProject` directory.
|
* @param [projectName] test project name in 'src/test/resources/testProject` directory.
|
||||||
* @param [buildOptions] common Gradle build options
|
* @param [buildOptions] common Gradle build options
|
||||||
* @param [buildJdk] path to JDK build should run with. *Note* Only append to 'gradle.properties'!
|
* @param [buildJdk] path to JDK build should run with. *Note* Only append to 'gradle.properties'!
|
||||||
|
* @param [enableKotlinDaemonMemoryLimitInMb] limit max heap size for Kotlin Daemon.
|
||||||
|
* `null` enables the default limit inherited from the Gradle process.
|
||||||
*/
|
*/
|
||||||
@OptIn(EnvironmentalVariablesOverride::class)
|
@OptIn(EnvironmentalVariablesOverride::class)
|
||||||
fun KGPBaseTest.nativeProject(
|
fun KGPBaseTest.nativeProject(
|
||||||
@@ -108,6 +114,7 @@ fun KGPBaseTest.nativeProject(
|
|||||||
enableBuildScan: Boolean = false,
|
enableBuildScan: Boolean = false,
|
||||||
addHeapDumpOptions: Boolean = true,
|
addHeapDumpOptions: Boolean = true,
|
||||||
enableGradleDebug: Boolean = false,
|
enableGradleDebug: Boolean = false,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb: Int? = 1024,
|
||||||
projectPathAdditionalSuffix: String = "",
|
projectPathAdditionalSuffix: String = "",
|
||||||
buildJdk: File? = null,
|
buildJdk: File? = null,
|
||||||
localRepoDir: Path? = null,
|
localRepoDir: Path? = null,
|
||||||
@@ -123,6 +130,7 @@ fun KGPBaseTest.nativeProject(
|
|||||||
enableBuildScan = enableBuildScan,
|
enableBuildScan = enableBuildScan,
|
||||||
addHeapDumpOptions = addHeapDumpOptions,
|
addHeapDumpOptions = addHeapDumpOptions,
|
||||||
enableGradleDebug = enableGradleDebug,
|
enableGradleDebug = enableGradleDebug,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb = enableKotlinDaemonMemoryLimitInMb,
|
||||||
projectPathAdditionalSuffix = projectPathAdditionalSuffix,
|
projectPathAdditionalSuffix = projectPathAdditionalSuffix,
|
||||||
buildJdk = buildJdk,
|
buildJdk = buildJdk,
|
||||||
localRepoDir = localRepoDir,
|
localRepoDir = localRepoDir,
|
||||||
@@ -143,6 +151,7 @@ fun TestProject.build(
|
|||||||
kotlinDaemonDebugPort: Int? = this.kotlinDaemonDebugPort,
|
kotlinDaemonDebugPort: Int? = this.kotlinDaemonDebugPort,
|
||||||
enableBuildCacheDebug: Boolean = false,
|
enableBuildCacheDebug: Boolean = false,
|
||||||
enableBuildScan: Boolean = this.enableBuildScan,
|
enableBuildScan: Boolean = this.enableBuildScan,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb: Int? = this.enableKotlinDaemonMemoryLimitInMb,
|
||||||
buildOptions: BuildOptions = this.buildOptions,
|
buildOptions: BuildOptions = this.buildOptions,
|
||||||
environmentVariables: EnvironmentalVariables = this.environmentVariables,
|
environmentVariables: EnvironmentalVariables = this.environmentVariables,
|
||||||
assertions: BuildResult.() -> Unit = {},
|
assertions: BuildResult.() -> Unit = {},
|
||||||
@@ -155,6 +164,7 @@ fun TestProject.build(
|
|||||||
buildOptions,
|
buildOptions,
|
||||||
enableBuildCacheDebug,
|
enableBuildCacheDebug,
|
||||||
enableBuildScan,
|
enableBuildScan,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
kotlinDaemonDebugPort
|
kotlinDaemonDebugPort
|
||||||
)
|
)
|
||||||
@@ -182,6 +192,7 @@ fun TestProject.buildAndFail(
|
|||||||
enableBuildCacheDebug: Boolean = false,
|
enableBuildCacheDebug: Boolean = false,
|
||||||
enableBuildScan: Boolean = this.enableBuildScan,
|
enableBuildScan: Boolean = this.enableBuildScan,
|
||||||
buildOptions: BuildOptions = this.buildOptions,
|
buildOptions: BuildOptions = this.buildOptions,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb: Int? = this.enableKotlinDaemonMemoryLimitInMb,
|
||||||
environmentVariables: EnvironmentalVariables = this.environmentVariables,
|
environmentVariables: EnvironmentalVariables = this.environmentVariables,
|
||||||
assertions: BuildResult.() -> Unit = {},
|
assertions: BuildResult.() -> Unit = {},
|
||||||
) {
|
) {
|
||||||
@@ -193,6 +204,7 @@ fun TestProject.buildAndFail(
|
|||||||
buildOptions,
|
buildOptions,
|
||||||
enableBuildCacheDebug,
|
enableBuildCacheDebug,
|
||||||
enableBuildScan,
|
enableBuildScan,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb,
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
kotlinDaemonDebugPort
|
kotlinDaemonDebugPort
|
||||||
)
|
)
|
||||||
@@ -233,6 +245,7 @@ internal inline fun <reified T> TestProject.getModels(
|
|||||||
buildOptions,
|
buildOptions,
|
||||||
false,
|
false,
|
||||||
enableBuildScan,
|
enableBuildScan,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb,
|
||||||
gradleVersion
|
gradleVersion
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -350,6 +363,7 @@ class TestProject(
|
|||||||
val gradleVersion: GradleVersion,
|
val gradleVersion: GradleVersion,
|
||||||
val forceOutput: Boolean,
|
val forceOutput: Boolean,
|
||||||
val enableBuildScan: Boolean,
|
val enableBuildScan: Boolean,
|
||||||
|
val enableKotlinDaemonMemoryLimitInMb: Int?,
|
||||||
/**
|
/**
|
||||||
* Whether the test and the Gradle build launched by the test should be executed in the same process so that we can use the same
|
* Whether the test and the Gradle build launched by the test should be executed in the same process so that we can use the same
|
||||||
* debugger for both (see https://docs.gradle.org/current/javadoc/org/gradle/testkit/runner/GradleRunner.html#isDebug--).
|
* debugger for both (see https://docs.gradle.org/current/javadoc/org/gradle/testkit/runner/GradleRunner.html#isDebug--).
|
||||||
@@ -413,6 +427,7 @@ private fun commonBuildSetup(
|
|||||||
buildOptions: BuildOptions,
|
buildOptions: BuildOptions,
|
||||||
enableBuildCacheDebug: Boolean,
|
enableBuildCacheDebug: Boolean,
|
||||||
enableBuildScan: Boolean,
|
enableBuildScan: Boolean,
|
||||||
|
enableKotlinDaemonMemoryLimitInMb: Int?,
|
||||||
gradleVersion: GradleVersion,
|
gradleVersion: GradleVersion,
|
||||||
kotlinDaemonDebugPort: Int? = null,
|
kotlinDaemonDebugPort: Int? = null,
|
||||||
): List<String> {
|
): List<String> {
|
||||||
@@ -429,6 +444,10 @@ private fun commonBuildSetup(
|
|||||||
// Decreasing Gradle daemon idle timeout to 1 min from default 3 hours.
|
// Decreasing Gradle daemon idle timeout to 1 min from default 3 hours.
|
||||||
// This should help with OOM on CI when agents do not have enough free memory available.
|
// This should help with OOM on CI when agents do not have enough free memory available.
|
||||||
"-Dorg.gradle.daemon.idletimeout=60000",
|
"-Dorg.gradle.daemon.idletimeout=60000",
|
||||||
|
if (enableKotlinDaemonMemoryLimitInMb != null) {
|
||||||
|
// Limiting Kotlin daemon heap size to reduce memory pressure on CI agents
|
||||||
|
"-Pkotlin.daemon.jvmargs=-Xmx${enableKotlinDaemonMemoryLimitInMb}m"
|
||||||
|
} else null,
|
||||||
if (enableBuildCacheDebug) "-Dorg.gradle.caching.debug=true" else null,
|
if (enableBuildCacheDebug) "-Dorg.gradle.caching.debug=true" else null,
|
||||||
if (enableBuildScan) "--scan" else null,
|
if (enableBuildScan) "--scan" else null,
|
||||||
kotlinDaemonDebugPort?.let {
|
kotlinDaemonDebugPort?.let {
|
||||||
|
|||||||
Reference in New Issue
Block a user