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 6c16ad65..41e99f69 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.2.2") + because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") + } + if (requested.group == "org.graalvm.truffle") { + 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.2.2") + because("PKL 0.30.2 requires GraalVM 24.x components for native-image compatibility") + } + } +} + dependencies { annotationProcessor(libs.validator.processor) implementation(libs.validator) @@ -45,9 +62,17 @@ 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") - 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") + } + 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.2.2") + implementation("org.graalvm.truffle:truffle-api:24.2.2") testImplementation(libs.ktx.coroutines.test) testImplementation(kotlin("test")) } @@ -74,11 +99,20 @@ ktor { graalvmNative { binaries { named("main") { + fallback.set(false) verbose.set(true) 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") + buildArgs.add("--initialize-at-run-time=org.graalvm.polyglot") + buildArgs.add("--initialize-at-run-time=com.oracle.truffle") + + 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") 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" },