build: projectVersion прокидывается в subprojects через rootProject.extra
Gitea Actions workflow упал с 'Invalid publication kotlinMultiplatform:
version cannot be empty' для :memory-vector и :storage-sqlite. Root cause:
if (version == 'unspecified') { version = providers.gradleProperty('version')... }
subprojects { version = rootProject.version } // <-- lazy: rootProject.version
// ещё 'unspecified' в этот момент
Фикс: вычисляем projectVersion eagerly через Provider.map().getOrElse(),
кладём в rootProject.extra, subprojects читают из extra (а не через
rootProject.version, которое ещё не выставлено). Также strip 'v' prefix
из tag-имени (CI передаёт -Pversion=v0.1.0 через GITEA_REF_NAME).
This commit is contained in:
+17
-6
@@ -7,11 +7,20 @@ plugins {
|
|||||||
|
|
||||||
group = "pw.binom.agentik"
|
group = "pw.binom.agentik"
|
||||||
|
|
||||||
// Publication version: -Pversion=<tag> (CICD publishes by release tag).
|
// projectVersion определяется ниже как val, чтобы subprojects могли его
|
||||||
// Без явного -Pversion берётся fallback из gradle.properties или "0.1.0".
|
// прочитать через rootProject.extra["projectVersion"].
|
||||||
if (version == "unspecified") {
|
|
||||||
version = providers.gradleProperty("version").getOrElse("0.1.0")
|
// Publication version: -Pversion=<tag> (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
|
// Home Nexus URL/creds — передаются через -Pbinom.repo.* из CI/CD workflow
|
||||||
// (.gitea/workflows/release.yml). Локально для дебага:
|
// (.gitea/workflows/release.yml). Локально для дебага:
|
||||||
@@ -23,7 +32,9 @@ val binomRepoPassword = (findProperty("binom.repo.password") as String? ?: "").t
|
|||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
group = rootProject.group
|
group = rootProject.group
|
||||||
version = rootProject.version
|
// Передаём вычисленную projectVersion, а не rootProject.version (который
|
||||||
|
// в момент apply ещё может быть "unspecified" для subproject'ов).
|
||||||
|
version = rootProject.extra["projectVersion"] as String
|
||||||
|
|
||||||
apply(plugin = "maven-publish")
|
apply(plugin = "maven-publish")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user