ci: maven-publish всех модулей + Gitea release workflow
- build.gradle.kts (root): настроен maven-publish для всех сабпроектов; репо 'caffeine' (Nexus) с setAllowInsecureProtocol=true, POM-метаданные (Apache-2.0, subochev as developer, scm). Version берётся из -Pversion=<tag> с fallback 0.1.0. - gradle.properties: дефолтная version=0.1.0 для локальных билдов. - .gitea/workflows/release.yml: триггер на release.published; две job'ы — publish-libraries (subochev/devops/publish action с BINOM_REPO_* env-vars) и build-standalone (собирает :standalone shadowJar, прикрепляет standalone-<version>-all.jar и sources.jar к release assets через softprops/action-gh-release + GITEA_TOKEN). - В пяти KMP-модулях (skills, storage-core, agent-toolsets, server, client) добавлен api(libs.kotlinx.serialization.core) — раньше commonMain компилировался только на JVM, и эта зависимость была пропущена; теперь commonMain корректно публикуется как Gradle Module Metadata. Локальная проверка: ./gradlew publishToMavenLocal — все 11 модулей × 9-10 таргетов ./gradlew jvmTest — все тесты зелёные ./gradlew :standalone:shadowJar — 240MB fatjar, Main-Class загружается
This commit is contained in:
@@ -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-<version>-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 }}
|
||||||
@@ -28,6 +28,7 @@ kotlin {
|
|||||||
api(libs.litert.api)
|
api(libs.litert.api)
|
||||||
|
|
||||||
api(libs.kotlinx.coroutines.core)
|
api(libs.kotlinx.coroutines.core)
|
||||||
|
api(libs.kotlinx.serialization.core)
|
||||||
api(libs.kotlinx.serialization.json)
|
api(libs.kotlinx.serialization.json)
|
||||||
}
|
}
|
||||||
jvmMain.dependencies {
|
jvmMain.dependencies {
|
||||||
|
|||||||
+68
-1
@@ -2,7 +2,74 @@ plugins {
|
|||||||
alias(libs.plugins.kotlin.multiplatform) apply false
|
alias(libs.plugins.kotlin.multiplatform) apply false
|
||||||
alias(libs.plugins.kotlin.jvm) apply false
|
alias(libs.plugins.kotlin.jvm) apply false
|
||||||
alias(libs.plugins.kotlin.serialization) apply false
|
alias(libs.plugins.kotlin.serialization) apply false
|
||||||
|
// maven-publish — стандартный плагин Gradle, объявлен apply'ем в subprojects ниже.
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "pw.binom.agentik"
|
group = "pw.binom.agentik"
|
||||||
version = "0.1.0"
|
|
||||||
|
// Publication version: -Pversion=<tag> (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<PublishingExtension>("publishing") {
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = "caffeine"
|
||||||
|
url = uri(binomRepoUrl)
|
||||||
|
isAllowInsecureProtocol = true
|
||||||
|
credentials {
|
||||||
|
username = binomRepoUser
|
||||||
|
password = binomRepoPassword
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Per-subproject POM-метаданные (name, scm, licenses, developers).
|
||||||
|
publications.withType<MavenPublication>().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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ dependencies {
|
|||||||
implementation(libs.ktor.serialization.kotlinx.json)
|
implementation(libs.ktor.serialization.kotlinx.json)
|
||||||
|
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
|
implementation(libs.kotlinx.serialization.core)
|
||||||
implementation(libs.kotlinx.serialization.json)
|
implementation(libs.kotlinx.serialization.json)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Default version for local builds; overridden by `-Pversion=<tag>` 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
|
||||||
@@ -31,6 +31,7 @@ kotlin {
|
|||||||
|
|
||||||
// Commons
|
// Commons
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
|
implementation(libs.kotlinx.serialization.core)
|
||||||
implementation(libs.kotlinx.serialization.json)
|
implementation(libs.kotlinx.serialization.json)
|
||||||
}
|
}
|
||||||
commonTest.dependencies {
|
commonTest.dependencies {
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ kotlin {
|
|||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain.dependencies {
|
commonMain.dependencies {
|
||||||
// YAML-парсинг с интеграцией в @Serializable.
|
api(libs.kotlinx.coroutines.core)
|
||||||
|
api(libs.kotlinx.serialization.core)
|
||||||
|
api(libs.kotlinx.serialization.json)
|
||||||
implementation(libs.kaml)
|
implementation(libs.kaml)
|
||||||
}
|
}
|
||||||
commonTest.dependencies {
|
commonTest.dependencies {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ kotlin {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain.dependencies {
|
commonMain.dependencies {
|
||||||
api(libs.kotlinx.coroutines.core)
|
api(libs.kotlinx.coroutines.core)
|
||||||
|
api(libs.kotlinx.serialization.core)
|
||||||
api(libs.kotlinx.serialization.json)
|
api(libs.kotlinx.serialization.json)
|
||||||
}
|
}
|
||||||
commonTest.dependencies {
|
commonTest.dependencies {
|
||||||
|
|||||||
Reference in New Issue
Block a user