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"
|
||||
|
||||
// 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")
|
||||
}
|
||||
// projectVersion определяется ниже как val, чтобы subprojects могли его
|
||||
// прочитать через rootProject.extra["projectVersion"].
|
||||
|
||||
// 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
|
||||
// (.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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user