From dc91a4e0d2b39a7b32759236b4bdb21166a09a61 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 26 Aug 2026 11:49:44 +0000 Subject: [PATCH 1/2] Declare web executable binaries for :shared so Compose UI tests bundle Compose Multiplatform 1.12.0 registers a new checkComposeUiTestConfigurationFor task for every Kotlin/JS-IR target. It fails the build when the target's test compile classpath pulls in Compose UI (and with it Skiko) while the target declares no executable binary: the test output is then not bundled with webpack, so the Skiko runtime cannot be loaded and the browser tests may fail. :shared has Compose UI in commonMain, so its js and wasmJs test compilations depend on Skiko even though the tests themselves are plain kotlin.test. Neither target declared an executable binary, so :shared:allTests failed at :shared:checkComposeUiTestConfigurationForJs before any test ran. Add binaries.executable() to both web targets, as the compose*App modules already do. See https://youtrack.jetbrains.com/issue/CMP-4906 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01T69oYMwratF7AAA9ECZwpF --- shared/build.gradle.kts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 60e6eb9d..f765029a 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -43,13 +43,22 @@ kotlin { jvm() + // `binaries.executable()` is not about shipping :shared as a web app — the compose*App + // modules do that. Compose Multiplatform 1.12.0 added checkComposeUiTestConfigurationFor, + // which fails the build when a K/JS-IR target has Compose UI (and therefore Skiko) on its + // test compile classpath but declares no executable binary: without one the test bundle is + // not run through webpack, so the Skiko runtime cannot be loaded and the browser tests may + // fail. Compose UI comes in via commonMain here, so both web targets need the binary even + // though the module only has plain kotlin.test tests. See CMP-4906. js { browser() + binaries.executable() } - + @OptIn(ExperimentalWasmDsl::class) wasmJs { browser() + binaries.executable() } sourceSets { From fd855aa932fbcda911dbe52e6b8a33e279369977 Mon Sep 17 00:00:00 2001 From: Patrick Lang <72232737+patrickunterwegs@users.noreply.github.com> Date: Wed, 26 Aug 2026 15:02:28 +0200 Subject: [PATCH 2/2] replaced long comment with a reference to github --- shared/build.gradle.kts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index f765029a..ef1c7c1a 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -42,23 +42,16 @@ kotlin { iosSimulatorArm64() jvm() - - // `binaries.executable()` is not about shipping :shared as a web app — the compose*App - // modules do that. Compose Multiplatform 1.12.0 added checkComposeUiTestConfigurationFor, - // which fails the build when a K/JS-IR target has Compose UI (and therefore Skiko) on its - // test compile classpath but declares no executable binary: without one the test bundle is - // not run through webpack, so the Skiko runtime cannot be loaded and the browser tests may - // fail. Compose UI comes in via commonMain here, so both web targets need the binary even - // though the module only has plain kotlin.test tests. See CMP-4906. + js { browser() - binaries.executable() + binaries.executable() // see https://github.com/TechbeeAT/spectacled/pull/115 } @OptIn(ExperimentalWasmDsl::class) wasmJs { browser() - binaries.executable() + binaries.executable() // see https://github.com/TechbeeAT/spectacled/pull/115 } sourceSets {