850ee99cb6
ci / JVM build + tests (push) Failing after 2m3s
- Добавил нативные таргеты с реальной реализацией (не stub-ы):
- linuxX64 kexe ~5 МБ — собран, запускается, проходит
smoke против 192.168.76.166 (--help, info, conv-ls,
conv-new, send со стримом response-events, AGENTIK_SERVER
env-переменная).
- mingwX64 .exe ~6 МБ — собирается через кросс-компиляцию с Linux.
- macosX64 / macosArm64 — на Linux-хосте не линкуются (нужен
macOS-раннер, Apple Mach-O), но target-объявления + entryPoint
валидны.
- entryPoint на K/N — FQN без 'Kt': pw.binom.agentik.cli.main
(на JVM по-прежнему AgentikCliKt через mainClass.set).
- platformEnv: expect/actual split. Native actual — getenv()
из platform.posix через kotlinx.cinterop, помеченный
@OptIn(ExperimentalForeignApi::class).
- linuxArm64 у :agentik-cli отсутствует — kotlinx.cli 0.3.6 не
публикует klib для linuxArm64. У :client linuxArm64 сохранён
(асимметрия допустима: :client нужен только :agentik-cli,
который на linuxArm64 не работает).
- README обновлён: target matrix, env-vars, native entry-point,
платформенные детали.
95 lines
3.4 KiB
Kotlin
95 lines
3.4 KiB
Kotlin
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
|
|
|
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
|
|
|
plugins {
|
|
alias(libs.plugins.kotlin.multiplatform)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.shadow)
|
|
}
|
|
|
|
kotlin {
|
|
jvmToolchain(21)
|
|
|
|
// Native-таргеты, которые покрывает kotlinx.cli 0.3.6 (см. его .module
|
|
// в Maven Central): linux_x64, macos_x64, macos_arm64, mingw_x64.
|
|
// linuxArm64 не входит — kotlinx.cli 0.3.6 для него не публикуется
|
|
// (последний релиз 2023-09, KMP-targets зафиксированы). clikt-multiplatform
|
|
// 5.x имеет linuxArm64, но ломается на duplicate symbol `selfAndAncestors`
|
|
// между clikt и clikt-mordant при линковке native (issue ajalt/clikt#598),
|
|
// поэтому clikt отвергнут.
|
|
//
|
|
// iOS не входит: :agentik-cli бессмыслен на iOS, а :client (единственный
|
|
// его потребитель) тоже без iOS.
|
|
jvm()
|
|
listOf(
|
|
linuxX64(),
|
|
macosX64(),
|
|
macosArm64(),
|
|
mingwX64(),
|
|
)
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
implementation(project(":proto"))
|
|
implementation(project(":client"))
|
|
|
|
// kotlinx.cli 0.3.6 — KMP subcommand-парсер от JetBrains.
|
|
// clikt 5.x имеет upstream-баг: `duplicate symbol selfAndAncestors`
|
|
// между `clikt` и `clikt-mordant` при линковке native. kotlinx.cli
|
|
// таких проблем нет.
|
|
implementation(libs.kotlinx.cli)
|
|
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
}
|
|
// :agentik-cli — commonMain-only (нет jvmMain/nativeMain разделения):
|
|
// весь код, включая platformEnv, лежит в commonMain.
|
|
}
|
|
|
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
|
jvm {
|
|
binaries {
|
|
executable {
|
|
mainClass.set("pw.binom.agentik.cli.AgentikCliKt")
|
|
}
|
|
}
|
|
}
|
|
|
|
// entryPoint на K/N — это FQN функции БЕЗ суффикса `Kt`
|
|
// (Java/Kotlin convention `MainKt.main` тут не работает, линкер K/N ищет
|
|
// функцию как `package.main`). На JVM суффикс `Kt` сохраняется через
|
|
// mainClass.set(...) выше.
|
|
listOf(
|
|
linuxX64(),
|
|
macosX64(),
|
|
macosArm64(),
|
|
mingwX64(),
|
|
).forEach {
|
|
it.binaries.executable {
|
|
entryPoint = "pw.binom.agentik.cli.main"
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fatjar — аналог :standalone.
|
|
val shadowJarTask = tasks.register<ShadowJar>("shadowJar") {
|
|
archiveBaseName.set("agentik-cli")
|
|
archiveClassifier.set("all")
|
|
description = "Self-contained fatjar with all runtime dependencies bundled."
|
|
group = "build"
|
|
|
|
from(tasks.named("jvmJar"))
|
|
from(project.configurations.getByName("jvmRuntimeClasspath"))
|
|
|
|
mergeServiceFiles()
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
|
|
manifest {
|
|
attributes["Main-Class"] = "pw.binom.agentik.cli.AgentikCliKt"
|
|
attributes["Implementation-Title"] = "agentik-cli"
|
|
attributes["Implementation-Version"] = project.version.toString()
|
|
}
|
|
|
|
includeEmptyDirs = false
|
|
}
|