From 0926322a6b882f4773939d361e35be3c194ec710 Mon Sep 17 00:00:00 2001 From: Florian Dreier Date: Thu, 30 Apr 2026 09:32:16 +0200 Subject: [PATCH 1/2] Cache Gradle dependencies and validate Gradle wrapper --- .github/workflows/actions.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 7fd941163..1586044f2 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -17,6 +17,7 @@ jobs: with: distribution: 'temurin' java-version: '21' + - uses: gradle/actions/setup-gradle@v6 - name: Build with Gradle run: ./gradlew build - name: Upload Release Assets @@ -77,6 +78,7 @@ jobs: with: distribution: 'temurin' java-version: '21' + - uses: gradle/actions/setup-gradle@v6 - name: Build with Gradle run: ./gradlew build - name: Upload coverage to Teamscale From 606ac7e8256c81465eab12a57cf1f757314cd3ec Mon Sep 17 00:00:00 2001 From: Florian Dreier Date: Thu, 30 Apr 2026 10:15:17 +0200 Subject: [PATCH 2/2] Stabilize flaky :teamscale-gradle-plugin:test on Windows CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Windows job intermittently failed with "Connection reset by peer" and exit value 100 from the Gradle test executor — symptoms of an out-of-memory crash in the test JVM under TestKit + parallel workers on RAM-constrained Windows runners. - Cap test executor heap to 1g on Windows so an over-budget run throws a clean OOMError instead of crashing the JVM natively. - Limit --max-workers=2 on the Windows job to reduce concurrent test JVMs and TestKit child daemons. - Add the org.gradle.test-retry plugin and enable 2 retries when CI=true to absorb residual TestKit/file-locking flakes; local runs unaffected. - Scope the JVM 11 Kotlin target override to compileKotlin only, silencing the "Inconsistent JVM-target compatibility" warning between compileTestJava (21) and compileTestKotlin (11). Production bytecode is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/actions.yml | 2 +- buildSrc/build.gradle.kts | 1 + .../kotlin/com.teamscale.java-convention.gradle.kts | 12 ++++++++++++ gradle/libs.versions.toml | 1 + teamscale-gradle-plugin/build.gradle.kts | 3 +-- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 1586044f2..689f9bf76 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -80,7 +80,7 @@ jobs: java-version: '21' - uses: gradle/actions/setup-gradle@v6 - name: Build with Gradle - run: ./gradlew build + run: ./gradlew build --max-workers=2 - name: Upload coverage to Teamscale if: always() && github.event_name == 'push' uses: cqse/teamscale-upload-action@v9.2.1 diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index cbaa792a0..3a91ed04d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -9,6 +9,7 @@ repositories { dependencies { implementation(plugin(libs.plugins.shadow)) implementation(plugin(libs.plugins.kotlinJvm)) + implementation(plugin(libs.plugins.testRetry)) implementation(libs.asm.core) implementation(libs.asm.commons) diff --git a/buildSrc/src/main/kotlin/com.teamscale.java-convention.gradle.kts b/buildSrc/src/main/kotlin/com.teamscale.java-convention.gradle.kts index 9d0d0ebfc..022c1c387 100644 --- a/buildSrc/src/main/kotlin/com.teamscale.java-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/com.teamscale.java-convention.gradle.kts @@ -1,7 +1,9 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.internal.os.OperatingSystem plugins { java + id("org.gradle.test-retry") } group = "com.teamscale" @@ -26,6 +28,16 @@ tasks.test { excludeEngines("teamscale-test-impacted") } testLogging.exceptionFormat = TestExceptionFormat.FULL + if (OperatingSystem.current().isWindows) { + maxHeapSize = "1g" + } + if (System.getenv("CI") == "true") { + retry { + maxRetries = 2 + maxFailures = 5 + failOnPassedAfterRetry = false + } + } } // Workaround until https://github.com/gradle/gradle/issues/15383 is fixed diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1deda1a14..0385440a6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -91,3 +91,4 @@ shadow = { id = "com.gradleup.shadow", version = "9.4.1" } oci = { id = "io.github.sgtsilvio.gradle.oci", version = "0.27.0" } kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version = "2.3.21" } jlink = { id = "org.beryx.jlink", version = "4.0.0" } +testRetry = { id = "org.gradle.test-retry", version = "1.6.2" } diff --git a/teamscale-gradle-plugin/build.gradle.kts b/teamscale-gradle-plugin/build.gradle.kts index 4246781a3..08ac021c3 100644 --- a/teamscale-gradle-plugin/build.gradle.kts +++ b/teamscale-gradle-plugin/build.gradle.kts @@ -1,7 +1,6 @@ import org.gradle.plugin.compatibility.compatibility import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-gradle-plugin` @@ -16,7 +15,7 @@ tasks.compileJava { options.release = 11 } -tasks.withType { +tasks.compileKotlin { compilerOptions { jvmTarget = JvmTarget.JVM_11 // Needed to support older Gradle versions