From a356ecc1236d5a56924cd6eadd0ad7ba0add83fc Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 29 Aug 2026 17:25:55 +0900 Subject: [PATCH] =?UTF-8?q?build:=20=E7=89=88=E6=95=B4=E5=90=88=E3=81=AE?= =?UTF-8?q?=E6=A4=9C=E6=9F=BB=E3=81=A8=E5=90=8C=E6=9C=9F=E3=82=92=E3=82=AB?= =?UTF-8?q?=E3=82=BF=E3=83=AD=E3=82=B0=E3=81=AE=E5=AE=A3=E8=A8=80=E3=81=AB?= =?UTF-8?q?=E5=9F=BA=E3=81=A5=E3=81=8B=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit マイナー横断ビルド(kotlin-prerelease)は -PkotlinVersionOverride で カタログの Kotlin 版の解決値を差し替える。checkVersionMentions と checkMavenVersion がその解決値を源としていたため、宣言と一致した資料を 乖離と見なして必ず失敗し、プレリリースの検証はルートビルドの最初の段で 止まっていた(過去 3 回の定期実行がすべて同じ失敗)。 検査・同期が読む版を gradle/libs.versions.toml のテキストから取り、 一時的な差し替えの影響を受けないようにする。上流 POM の導出座標も 宣言版へ揃え、プレリリースの POM から maven 版を導かないようにする。 Co-Authored-By: Claude Opus 5 --- build.gradle.kts | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 77d3eb4..a3518b5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,8 +61,24 @@ allprojects { // check へ紐付けた checkMavenVersion / checkVersionMentions が乖離を検出し、同期タスクが書き換える fun minorOf(version: String) = version.split(".").take(2).joinToString(".") -val kotlinCurrent = libs.versions.kotlin.get() -val mavenCurrent = libs.versions.maven.get() +val versionCatalogFile = layout.projectDirectory.file("gradle/libs.versions.toml").asFile + +val kotlinVersionEntry = Regex("""^kotlin = "([^"]*)"$""", RegexOption.MULTILINE) + +val mavenVersionEntry = Regex("""^maven = "([^"]*)"$""", RegexOption.MULTILINE) + +// 整合の機構が源とするのはカタログの宣言そのものであり、解決後の値ではない。 +// マイナー横断ビルドが与える -PkotlinVersionOverride は解決値だけを差し替えるもので、 +// カタログの宣言も、それを写した資料も変わらない。解決値を源にすると、宣言と一致した資料を +// 乖離と見なして検査が落ち、同期タスクは宣言に無い版を資料や上流 POM の導出へ持ち込む +fun declaredVersion(entry: Regex): String = + checkNotNull(entry.find(versionCatalogFile.readText())) { + "gradle/libs.versions.toml に版の宣言がありません: $entry" + } + .groupValues[1] + +val kotlinDeclaredVersion = declaredVersion(kotlinVersionEntry) +val mavenDeclaredVersion = declaredVersion(mavenVersionEntry) val enumizerDeclaredVersion = providers.gradleProperty("enumizerVersion").get() val enumizerReleaseVersion = enumizerDeclaredVersion.removeSuffix("-SNAPSHOT") // リリース版を宣言している状態か(開発中は -SNAPSHOT が付く)。配布物を説明する文書の同期対象を切り替える @@ -87,8 +103,8 @@ fun pomOf(notation: String): FileCollection = // POM の解決を伴うため、値の取り出しは構成時ではなく実行時に行う val upstreamMavenVersion: Provider = run { - val childPom = pomOf("org.jetbrains.kotlin:kotlin-maven-plugin:$kotlinCurrent@pom") - val parentPom = pomOf("org.jetbrains.kotlin:kotlin-project:$kotlinCurrent@pom") + val childPom = pomOf("org.jetbrains.kotlin:kotlin-maven-plugin:$kotlinDeclaredVersion@pom") + val parentPom = pomOf("org.jetbrains.kotlin:kotlin-project:$kotlinDeclaredVersion@pom") providers.provider { val child = childPom.singleFile.readText() val parentBlock = @@ -116,10 +132,6 @@ val upstreamMavenVersion: Provider = run { } } -val versionCatalogFile = layout.projectDirectory.file("gradle/libs.versions.toml").asFile - -val mavenVersionEntry = Regex("""^maven = "[^"]*"$""", RegexOption.MULTILINE) - tasks.register("syncMavenVersion") { val upstream = upstreamMavenVersion val file = versionCatalogFile @@ -134,7 +146,7 @@ tasks.register("syncMavenVersion") { val checkMavenVersion = tasks.register("checkMavenVersion") { val upstream = upstreamMavenVersion - val declared = mavenCurrent + val declared = mavenDeclaredVersion doLast { val expected = upstream.get() if (declared != expected) { @@ -159,16 +171,16 @@ val versionMentionRules: List> = listOf( // 配布版のフル形式 -<自版>(README のセットアップ例・版形式の現行例) Regex("""(?