diff --git a/build.gradle.kts b/build.gradle.kts index 28b01dc..def4bc8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,11 +7,20 @@ plugins { group = "pw.binom.agentik" -// 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") -} +// projectVersion определяется ниже как val, чтобы subprojects могли его +// прочитать через rootProject.extra["projectVersion"]. + +// Publication version: -Pversion= (CICD publishes by release tag) с +// fallback в gradle.properties ("version=0.1.0"). Без версии maven-publish падает +// с "Invalid publication 'kotlinMultiplatform': version cannot be empty" — +// это известный gotcha: subprojects читают rootProject.version ДО того, как +// if-блок ниже успевает его установить. Фикс: provider+orElse вычисляется +// eagerly, и subprojects получают готовую строку. +val projectVersion: String = providers.gradleProperty("version") + .map { it.trimStart('v', 'V') } // strip optional "v" prefix from tag + .getOrElse("0.1.0") +version = projectVersion +extra["projectVersion"] = projectVersion // Home Nexus URL/creds — передаются через -Pbinom.repo.* из CI/CD workflow // (.gitea/workflows/release.yml). Локально для дебага: @@ -23,7 +32,9 @@ val binomRepoPassword = (findProperty("binom.repo.password") as String? ?: "").t subprojects { group = rootProject.group - version = rootProject.version + // Передаём вычисленную projectVersion, а не rootProject.version (который + // в момент apply ещё может быть "unspecified" для subproject'ов). + version = rootProject.extra["projectVersion"] as String apply(plugin = "maven-publish")