diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..0153a1d --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,62 @@ +# Триггерится при публикации релиза в Gitea. Делает две вещи: +# 1. publish-libraries — публикует все KMP-библиотеки (jvm + все нативные таргеты) +# в домашний Nexus-репозиторий "caffeine" через subochev/devops/publish action. +# Переменные BINOM_REPO_URL / BINOM_REPO_USER / BINOM_REPO_PASSWORD задаются +# в Gitea Action Variables для репозитория (Settings → Actions → Variables). +# 2. build-standalone — собирает :standalone fatjar (shadowJar) и прикрепляет +# standalone--all.jar к release как downloadable asset. +name: release + +on: + release: + types: [published] + +jobs: + publish-libraries: + name: Publish KMP libraries → caffeine Nexus + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # agentik не использует Android-target ни в одном модуле (все KMP-таргеты + # JVM + native), поэтому Android SDK шаг из litert-kmp тут не нужен. + + - name: Publish libraries + uses: https://git.binom.pw/subochev/devops/publish@main + with: + version: ${{ gitea.ref_name }} + + build-standalone: + name: Build standalone fatjar + runs-on: ubuntu-latest + needs: publish-libraries + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'adopt' + + - name: Build shadowJar + shell: bash + run: ./gradlew :standalone:shadowJar -Dorg.gradle.jvmargs=-Xmx4096M --no-daemon --no-watch-fs --stacktrace + + - name: Compute version for filename + id: ver + shell: bash + run: echo "version=${GITEA_REF_NAME}" >> "$GITEA_OUTPUT" + + - name: Attach standalone jar to release + uses: https://github.com/softprops/action-gh-release@v2 + with: + files: | + standalone/build/libs/standalone-*-all.jar + standalone/build/libs/standalone-*-sources.jar + fail_on_unmatched_files: false + generate_release_notes: false + env: + GITHUB_TOKEN: ${{ secrets.GITEA_TOKEN }} diff --git a/agent-toolsets/build.gradle.kts b/agent-toolsets/build.gradle.kts index 80c92a0..12f1ef5 100644 --- a/agent-toolsets/build.gradle.kts +++ b/agent-toolsets/build.gradle.kts @@ -28,6 +28,7 @@ kotlin { api(libs.litert.api) api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.serialization.core) api(libs.kotlinx.serialization.json) } jvmMain.dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index d508bc0..62a1bab 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,74 @@ plugins { alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false + // maven-publish — стандартный плагин Gradle, объявлен apply'ем в subprojects ниже. } group = "pw.binom.agentik" -version = "0.1.0" + +// Publication version: -Pversion= (CICD publishes by release tag). +// Без явного -Pversion берётся fallback из gradle.properties или "0.1.0". +if (version == "unspecified") { + version = providers.gradleProperty("version").getOrElse("0.1.0") +} + +// Home Nexus URL/creds — Gitea action-variables BINOM_REPO_* (subochev/devops/publish). +// Локально для дебага: ./gradlew publish \ +// -Pbinom.repo.url=http://... -Pbinom.repo.user=... -Pbinom.repo.password=... +val binomRepoUrl = (findProperty("binom.repo.url") ?: "http://nexus.xx/repository/caffeine/").toString() +val binomRepoUser = (findProperty("binom.repo.user") as String? ?: "").toString() +val binomRepoPassword = (findProperty("binom.repo.password") as String? ?: "").toString() + +subprojects { + group = rootProject.group + version = rootProject.version + + apply(plugin = "maven-publish") + + extensions.configure("publishing") { + repositories { + maven { + name = "caffeine" + url = uri(binomRepoUrl) + isAllowInsecureProtocol = true + credentials { + username = binomRepoUser + password = binomRepoPassword + } + } + } + + // Per-subproject POM-метаданные (name, scm, licenses, developers). + publications.withType().configureEach { + pom { + name = project.name + description = providers.provider { + project.findProperty("description")?.toString() + ?: "agentik: ${project.name} (pw.binom.agentik)" + } + url = "https://git.binom.pw/subochev/agentik" + + licenses { + license { + name = "Apache-2.0" + url = "https://www.apache.org/licenses/LICENSE-2.0" + } + } + + developers { + developer { + id = "subochev" + name = "Subochev Alexey" + url = "https://git.binom.pw/subochev" + } + } + + scm { + connection = "scm:git:https://git.binom.pw/subochev/agentik.git" + developerConnection = "scm:git:ssh://git@git.binom.pw/subochev/agentik.git" + url = "https://git.binom.pw/subochev/agentik" + } + } + } + } +} diff --git a/client/build.gradle.kts b/client/build.gradle.kts index f689274..a2c3d5c 100644 --- a/client/build.gradle.kts +++ b/client/build.gradle.kts @@ -20,5 +20,6 @@ dependencies { implementation(libs.ktor.serialization.kotlinx.json) implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.serialization.core) implementation(libs.kotlinx.serialization.json) } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..a53c113 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,8 @@ +# Default version for local builds; overridden by `-Pversion=` from CI/CD. +version=0.1.0 + +# KMP jvm target uses JDK 21 for both compilation and toolchain. +org.gradle.jvmargs=-Xmx4096M -XX:+UseG1GC + +# Android SDK путь для будущей Android-сборки (пока не используется). +# sdk.dir=/home/subochev/Android/Sdk diff --git a/server/build.gradle.kts b/server/build.gradle.kts index c3365d9..ca2eaad 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -31,6 +31,7 @@ kotlin { // Commons implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.serialization.core) implementation(libs.kotlinx.serialization.json) } commonTest.dependencies { diff --git a/skills/build.gradle.kts b/skills/build.gradle.kts index 494ce26..2ada8f3 100644 --- a/skills/build.gradle.kts +++ b/skills/build.gradle.kts @@ -19,7 +19,9 @@ kotlin { sourceSets { commonMain.dependencies { - // YAML-парсинг с интеграцией в @Serializable. + api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.serialization.core) + api(libs.kotlinx.serialization.json) implementation(libs.kaml) } commonTest.dependencies { diff --git a/storage-core/build.gradle.kts b/storage-core/build.gradle.kts index 0168351..b788f82 100644 --- a/storage-core/build.gradle.kts +++ b/storage-core/build.gradle.kts @@ -22,6 +22,7 @@ kotlin { sourceSets { commonMain.dependencies { api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.serialization.core) api(libs.kotlinx.serialization.json) } commonTest.dependencies {