From 088ef2e200a81c9e53dd5bc263e67adbe306e3d7 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 00:12:35 -0300 Subject: [PATCH 01/10] fix(native-build): exclude pkl-config-java fatJar transitive dependency --- server/build.gradle.kts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 6c16ad65..52948cc9 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -46,8 +46,12 @@ dependencies { implementation(libs.h2) implementation(libs.lettuce) implementation("org.pkl-lang:pkl-codegen-kotlin:0.30.2") - implementation("org.pkl-lang:pkl-config-kotlin:0.30.2") - implementation("org.pkl-lang:pkl-config-java:0.30.2") + implementation("org.pkl-lang:pkl-config-kotlin:0.30.2") { + exclude(group = "org.pkl-lang", module = "pkl-config-java-all") + } + implementation("org.pkl-lang:pkl-config-java:0.30.2") { + exclude(group = "org.pkl-lang", module = "pkl-config-java-all") + } testImplementation(libs.ktx.coroutines.test) testImplementation(kotlin("test")) } From d7169bd48312b06b2b7ec2a76dd5de42f5c0d912 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 00:41:51 -0300 Subject: [PATCH 02/10] fix: add graalvm build-time parameters --- server/Dockerfile | 2 +- server/build.gradle.kts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/server/Dockerfile b/server/Dockerfile index e8ec7b07..efe93c43 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -17,7 +17,7 @@ RUN --mount=type=secret,id=github_actor \ --mount=type=secret,id=github_token \ GITHUB_ACTOR=$(cat /run/secrets/github_actor) \ GITHUB_TOKEN=$(cat /run/secrets/github_token) \ - ./gradlew buildOpenApi nativeCompile --no-daemon + ./gradlew nativeCompile --no-daemon FROM debian:bookworm-slim diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 52948cc9..1ecd6b8d 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -82,6 +82,10 @@ graalvmNative { verbose.set(true) buildArgs.add("--initialize-at-build-time=kotlin") + buildArgs.add("--initialize-at-build-time=org.pkl.core.runtime") + buildArgs.add("--initialize-at-build-time=com.oracle.truffle") + buildArgs.add("--initialize-at-build-time=org.graalvm.polyglot") + buildArgs.add("--initialize-at-run-time=kotlin.uuid.SecureRandomHolder") buildArgs.add("--initialize-at-run-time=org.bouncycastle") From 1d2a4ff893eada047610fed7dfff470e05de7ab7 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 00:45:41 -0300 Subject: [PATCH 03/10] fix: add graalvm build-time parameters --- server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 1ecd6b8d..31a54e11 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -82,7 +82,7 @@ graalvmNative { verbose.set(true) buildArgs.add("--initialize-at-build-time=kotlin") - buildArgs.add("--initialize-at-build-time=org.pkl.core.runtime") + buildArgs.add("--initialize-at-build-time=org.pkl.core") buildArgs.add("--initialize-at-build-time=com.oracle.truffle") buildArgs.add("--initialize-at-build-time=org.graalvm.polyglot") From 6e33667c524ff6c5df8f7573f1104380bfbfd37c Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 00:55:42 -0300 Subject: [PATCH 04/10] fix: Updating reachability-metadata.json --- .../native-image/reachability-metadata.json | 240 +++++++++--------- 1 file changed, 123 insertions(+), 117 deletions(-) diff --git a/server/src/main/resources/META-INF/native-image/reachability-metadata.json b/server/src/main/resources/META-INF/native-image/reachability-metadata.json index cdf93285..28aa941a 100644 --- a/server/src/main/resources/META-INF/native-image/reachability-metadata.json +++ b/server/src/main/resources/META-INF/native-image/reachability-metadata.json @@ -24,9 +24,6 @@ { "type": "[Lorg.apache.logging.log4j.core.config.Property;" }, - { - "type": "android.os.Build" - }, { "type": "com.fasterxml.jackson.core.JsonParser" }, @@ -202,7 +199,7 @@ "type": "io.ktor.client.engine.HttpClientEngineConfig" }, { - "type": "io.ktor.client.engine.okhttp.OkHttpEngineContainer" + "type": "io.ktor.client.engine.cio.CIOEngineContainer" }, { "type": "io.ktor.client.plugins.DefaultRequest" @@ -225,17 +222,6 @@ { "type": "io.ktor.client.plugins.api.ClientPluginInstance" }, - { - "type": "io.ktor.client.plugins.logging.HttpClientCallLogger", - "fields": [ - { - "name": "requestLogged" - }, - { - "name": "responseLogged" - } - ] - }, { "type": "io.ktor.client.request.HttpRequest" }, @@ -298,23 +284,12 @@ } ] }, - { - "type": "io.ktor.network.sockets.ServerSocketImpl$acceptSuspend$1", - "fields": [ - { - "name": "label" - } - ] - }, { "type": "io.ktor.resources.Resources" }, { "type": "io.ktor.serialization.kotlinx.json.KotlinxSerializationJsonExtensionProvider" }, - { - "type": "io.ktor.server.application.ApplicationCall" - }, { "type": "io.ktor.server.application.PluginInstance" }, @@ -324,14 +299,6 @@ { "type": "io.ktor.server.auth.Authentication" }, - { - "type": "io.ktor.server.cio.backend.HttpServerKt$httpServer$acceptJob$1", - "fields": [ - { - "name": "label" - } - ] - }, { "type": "io.ktor.server.engine.BaseApplicationResponse" }, @@ -389,34 +356,18 @@ { "type": "io.ktor.utils.io.ByteReadChannel" }, - { - "type": "io.ktor.utils.io.pool.DefaultPool", - "fields": [ - { - "name": "top" - } - ] - }, { "type": "io.ktor.websocket.WebSocketExtension" }, { "type": "jakarta.servlet.Servlet" }, - { - "type": "java.io.IOException", - "allDeclaredFields": true - }, { "type": "java.lang.Boolean" }, { "type": "java.lang.Class", "methods": [ - { - "name": "getModule", - "parameterTypes": [] - }, { "name": "isSealed", "parameterTypes": [] @@ -424,11 +375,15 @@ ] }, { - "type": "java.lang.ClassValue" + "type": "java.lang.ClassLoader", + "fields": [ + { + "name": "classLoaderValueMap" + } + ] }, { - "type": "java.lang.Exception", - "allDeclaredFields": true + "type": "java.lang.ClassValue" }, { "type": "java.lang.Integer" @@ -436,15 +391,6 @@ { "type": "java.lang.Long" }, - { - "type": "java.lang.Module", - "methods": [ - { - "name": "getDescriptor", - "parameterTypes": [] - } - ] - }, { "type": "java.lang.Object", "allDeclaredFields": true @@ -470,8 +416,7 @@ ] }, { - "type": "java.lang.Throwable", - "allDeclaredFields": true + "type": "java.lang.Throwable" }, { "type": "java.lang.management.ManagementFactory", @@ -491,22 +436,9 @@ } ] }, - { - "type": "java.lang.module.ModuleDescriptor" - }, { "type": "java.net.StandardSocketOptions" }, - { - "type": "java.nio.channels.ClosedChannelException", - "allDeclaredFields": true, - "methods": [ - { - "name": "", - "parameterTypes": [] - } - ] - }, { "type": "java.security.AccessController", "methods": [ @@ -542,6 +474,12 @@ { "type": "javax.servlet.Servlet" }, + { + "type": "jdk.internal.jrtfs.JrtFileSystemProvider" + }, + { + "type": "jdk.internal.misc.Unsafe" + }, { "type": "kotlin.Any" }, @@ -551,9 +489,6 @@ { "type": "kotlin.ByteArray" }, - { - "type": "kotlin.Function1" - }, { "type": "kotlin.Function2" }, @@ -629,12 +564,6 @@ { "type": "kotlin.collections.MutableMap" }, - { - "type": "kotlin.coroutines.jvm.internal.BaseContinuationImpl" - }, - { - "type": "kotlin.jvm.functions.Function1" - }, { "type": "kotlin.jvm.internal.DefaultConstructorMarker" }, @@ -660,9 +589,6 @@ "type": "kotlin.reflect.jvm.internal.impl.resolve.scopes.DescriptorKindFilter", "allPublicFields": true }, - { - "type": "kotlin.uuid.Uuid" - }, { "type": "kotlinx.atomicfu.AtomicBoolean", "fields": [ @@ -679,22 +605,6 @@ } ] }, - { - "type": "kotlinx.coroutines.AwaitAll", - "fields": [ - { - "name": "notCompletedCount$volatile" - } - ] - }, - { - "type": "kotlinx.coroutines.AwaitAll$AwaitAllNode", - "fields": [ - { - "name": "_disposer$volatile" - } - ] - }, { "type": "kotlinx.coroutines.CancellableContinuationImpl", "fields": [ @@ -780,6 +690,17 @@ } ] }, + { + "type": "kotlinx.coroutines.internal.ConcurrentLinkedListNode", + "fields": [ + { + "name": "_next$volatile" + }, + { + "name": "_prev$volatile" + } + ] + }, { "type": "kotlinx.coroutines.internal.DispatchedContinuation", "fields": [ @@ -830,7 +751,12 @@ ] }, { - "type": "kotlinx.coroutines.internal.StackTraceRecoveryKt" + "type": "kotlinx.coroutines.internal.Segment", + "fields": [ + { + "name": "cleanedAndPointers$volatile" + } + ] }, { "type": "kotlinx.coroutines.internal.ThreadSafeHeap", @@ -879,6 +805,26 @@ } ] }, + { + "type": "kotlinx.coroutines.sync.SemaphoreAndMutexImpl", + "fields": [ + { + "name": "_availablePermits$volatile" + }, + { + "name": "deqIdx$volatile" + }, + { + "name": "enqIdx$volatile" + }, + { + "name": "head$volatile" + }, + { + "name": "tail$volatile" + } + ] + }, { "type": "okhttp3.internal.connection.RealConnectionPool", "fields": [ @@ -1197,17 +1143,7 @@ "type": "org.apache.logging.log4j.core.config.HttpWatcher" }, { - "type": "org.apache.logging.log4j.core.config.LoggerConfig", - "methods": [ - { - "name": "newBuilder", - "parameterTypes": [] - } - ] - }, - { - "type": "org.apache.logging.log4j.core.config.LoggerConfig$Builder", - "allDeclaredFields": true + "type": "org.apache.logging.log4j.core.config.LoggerConfig" }, { "type": "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger", @@ -2119,6 +2055,25 @@ { "type": "org.apache.logging.slf4j.SLF4JServiceProvider" }, + { + "type": "org.graalvm.home.impl.DefaultHomeFinder" + }, + { + "type": "org.graalvm.polyglot.io.IOHelper", + "fields": [ + { + "name": "ACCESS" + } + ] + }, + { + "type": "org.graalvm.polyglot.management.Management", + "fields": [ + { + "name": "ACCESS" + } + ] + }, { "type": "org.jetbrains.exposed.v1.core.ColumnType", "methods": [ @@ -2170,6 +2125,9 @@ { "type": "org.osgi.framework.FrameworkUtil" }, + { + "type": "org.pkl.core.runtime.VmLanguageProvider" + }, { "type": "org.postgresql.Driver", "methods": [ @@ -2433,12 +2391,39 @@ } ], "resources": [ + { + "glob": "META-INF/graalvm/org.graalvm.polyglot/version" + }, + { + "glob": "META-INF/graalvm/org.graalvm.truffle/version" + }, { "glob": "META-INF/log4j-provider.properties" }, { "glob": "META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat" }, + { + "glob": "META-INF/resources/engine/libtruffleattach/windows/amd64/sha256" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.TruffleRuntimeAccess" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.impl.TruffleLocator" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.instrumentation.provider.TruffleInstrumentProvider" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.library.provider.DefaultExportProvider" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.provider.InternalResourceProvider" + }, + { + "glob": "META-INF/services/com.oracle.truffle.api.provider.TruffleLanguageProvider" + }, { "glob": "META-INF/services/io.ktor.client.HttpClientEngineContainer" }, @@ -2457,6 +2442,9 @@ { "glob": "META-INF/services/java.nio.channels.spi.SelectorProvider" }, + { + "glob": "META-INF/services/java.nio.file.spi.FileSystemProvider" + }, { "glob": "META-INF/services/java.sql.Driver" }, @@ -2484,12 +2472,27 @@ { "glob": "META-INF/services/org.apache.logging.log4j.util.PropertySource" }, + { + "glob": "META-INF/services/org.graalvm.home.HomeFinder" + }, + { + "glob": "META-INF/services/org.graalvm.polyglot.impl.AbstractPolyglotImpl" + }, { "glob": "META-INF/services/org.jetbrains.exposed.v1.core.statements.GlobalStatementInterceptor" }, { "glob": "META-INF/services/org.jetbrains.exposed.v1.jdbc.DatabaseConnectionAutoRegistration" }, + { + "glob": "META-INF/services/org.pkl.core.StackFrameTransformer" + }, + { + "glob": "META-INF/services/org.pkl.core.module.ModuleKeyFactory" + }, + { + "glob": "META-INF/services/org.pkl.core.resource.ResourceReader" + }, { "glob": "META-INF/services/org.slf4j.spi.SLF4JServiceProvider" }, @@ -2583,6 +2586,9 @@ { "glob": "log4j2c387f44.yml" }, + { + "glob": "org/pkl/core/Release.properties" + }, { "glob": "org/postgresql/driverconfig.properties" }, From 7be0fe5976f3cbaa87a85212add7ff62dc8efd17 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 01:04:02 -0300 Subject: [PATCH 05/10] fix: add graalvm build-time parameters --- server/build.gradle.kts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 31a54e11..c99e4f4e 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -78,15 +78,21 @@ ktor { graalvmNative { binaries { named("main") { + fallback.set(false) verbose.set(true) buildArgs.add("--initialize-at-build-time=kotlin") - buildArgs.add("--initialize-at-build-time=org.pkl.core") - buildArgs.add("--initialize-at-build-time=com.oracle.truffle") - buildArgs.add("--initialize-at-build-time=org.graalvm.polyglot") + + buildArgs.add("--initialize-at-run-time=org.pkl") + buildArgs.add("--initialize-at-run-time=org.pkl.core") + buildArgs.add("--initialize-at-run-time=org.pkl.config") + buildArgs.add("--initialize-at-run-time=org.graalvm.polyglot") + buildArgs.add("--initialize-at-run-time=com.oracle.truffle") buildArgs.add("--initialize-at-run-time=kotlin.uuid.SecureRandomHolder") + buildArgs.add("--initialize-at-run-time=kotlinx.coroutines") + buildArgs.add("--initialize-at-run-time=io.netty") buildArgs.add("--initialize-at-run-time=org.bouncycastle") buildArgs.add("--initialize-at-run-time=io.netty.channel.epoll.Epoll") From 72c7aacf4ac807ef89b18d28a2fdc5c08a50830a Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 01:10:48 -0300 Subject: [PATCH 06/10] fix: remove pkl-codegen-kotlin --- server/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index c99e4f4e..86db6704 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -45,7 +45,6 @@ dependencies { implementation(libs.postgresql) implementation(libs.h2) implementation(libs.lettuce) - implementation("org.pkl-lang:pkl-codegen-kotlin:0.30.2") implementation("org.pkl-lang:pkl-config-kotlin:0.30.2") { exclude(group = "org.pkl-lang", module = "pkl-config-java-all") } From 7df6b9f20fc5089daf97b613a77010d2be0ca350 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 20:03:05 -0300 Subject: [PATCH 07/10] fix: force graalvm-polyglot version --- server/build.gradle.kts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 86db6704..3cf3c29d 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -25,6 +25,23 @@ application { mainClass.set("gg.kuken.LauncherKt") } +configurations.all { + resolutionStrategy.eachDependency { + if (requested.group == "org.graalvm.polyglot") { + useVersion("24.1.2") + because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") + } + if (requested.group == "org.graalvm.truffle") { + useVersion("24.1.2") + because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") + } + if (requested.group == "org.graalvm.sdk") { + useVersion("24.1.2") + because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") + } + } +} + dependencies { annotationProcessor(libs.validator.processor) implementation(libs.validator) @@ -51,6 +68,12 @@ dependencies { implementation("org.pkl-lang:pkl-config-java:0.30.2") { exclude(group = "org.pkl-lang", module = "pkl-config-java-all") } + implementation("org.pkl-lang:pkl-core:0.30.2") { + exclude(group = "org.pkl-lang", module = "pkl-config-java-all") + } + implementation("org.graalvm.polyglot:polyglot:24.1.2") + implementation("org.graalvm.truffle:truffle-api:24.1.2") + implementation("org.graalvm.polyglot:js-community:24.1.2") testImplementation(libs.ktx.coroutines.test) testImplementation(kotlin("test")) } From ece3afdc721a4846c64aa9d804cbcde7ff196b80 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 20:05:27 -0300 Subject: [PATCH 08/10] fix: remove polyglot community --- server/build.gradle.kts | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 3cf3c29d..c8750aa9 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -73,7 +73,6 @@ dependencies { } implementation("org.graalvm.polyglot:polyglot:24.1.2") implementation("org.graalvm.truffle:truffle-api:24.1.2") - implementation("org.graalvm.polyglot:js-community:24.1.2") testImplementation(libs.ktx.coroutines.test) testImplementation(kotlin("test")) } @@ -112,8 +111,6 @@ graalvmNative { buildArgs.add("--initialize-at-run-time=org.graalvm.polyglot") buildArgs.add("--initialize-at-run-time=com.oracle.truffle") - buildArgs.add("--initialize-at-run-time=kotlin.uuid.SecureRandomHolder") - buildArgs.add("--initialize-at-run-time=kotlinx.coroutines") buildArgs.add("--initialize-at-run-time=io.netty") buildArgs.add("--initialize-at-run-time=org.bouncycastle") From 2a10ee1e6ba1ec255f6951e1503fed2d2e8d49b8 Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 20:09:13 -0300 Subject: [PATCH 09/10] fix: updating graalvm to 24.2.2 --- server/build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index c8750aa9..7daeb181 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -28,15 +28,15 @@ application { configurations.all { resolutionStrategy.eachDependency { if (requested.group == "org.graalvm.polyglot") { - useVersion("24.1.2") + useVersion("24.2.2") because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") } if (requested.group == "org.graalvm.truffle") { - useVersion("24.1.2") + useVersion("24.2.2") because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") } if (requested.group == "org.graalvm.sdk") { - useVersion("24.1.2") + useVersion("24.2.2") because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") } } @@ -71,8 +71,8 @@ dependencies { implementation("org.pkl-lang:pkl-core:0.30.2") { exclude(group = "org.pkl-lang", module = "pkl-config-java-all") } - implementation("org.graalvm.polyglot:polyglot:24.1.2") - implementation("org.graalvm.truffle:truffle-api:24.1.2") + implementation("org.graalvm.polyglot:polyglot:24.2.2") + implementation("org.graalvm.truffle:truffle-api:24.2.2") testImplementation(libs.ktx.coroutines.test) testImplementation(kotlin("test")) } From 915150a569e40c55ebf9d67ca933e64e6cac73dc Mon Sep 17 00:00:00 2001 From: Rafael Rain Date: Fri, 16 Jan 2026 20:13:08 -0300 Subject: [PATCH 10/10] fix: initialize kotlin uuid in runtime --- server/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 7daeb181..41e99f69 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -105,6 +105,7 @@ graalvmNative { buildArgs.add("--initialize-at-build-time=kotlin") + buildArgs.add("--initialize-at-run-time=kotlin.uuid.SecureRandomHolder") buildArgs.add("--initialize-at-run-time=org.pkl") buildArgs.add("--initialize-at-run-time=org.pkl.core") buildArgs.add("--initialize-at-run-time=org.pkl.config")