diff --git a/build.gradle.kts b/build.gradle.kts index 6bdab34..7f6c228 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,6 @@ import com.ncorti.ktfmt.gradle.KtfmtPlugin +import org.gradle.api.publish.maven.tasks.PublishToMavenRepository +import org.gradle.plugins.signing.SigningExtension // ルートプロジェクトは集約のみを担う。各モジュールの構成は各自の build.gradle.kts が持つ。 // integration-test は独立した composite build であり、ここには含めない(docs/test/テスト戦略.md)。 @@ -32,6 +34,25 @@ allprojects { version = enumizerFullVersion } +// 署名を必須とする条件を、リモートリポジトリへ publish する場合に限る。 +// 公開プラグインの既定はリリース版であれば必須で、その判定はローカル公開にも及ぶ。 +// integration-test のフィクスチャは鍵の無い環境で publishToMavenLocal を使うため、そのままでは +// リリース版を宣言した時点でローカル公開が成立しなくなる(ローカル公開のタスクはリモートとは別型)。 +// 未署名のまま公開へ進むことは、公開先の検証が受け付けないことで防がれる。 +// 設定は各モジュールのスクリプト評価中に書かれるため、上書きは評価後に行う +allprojects { + plugins.withId("signing") { + afterEvaluate { + extensions.configure { + setRequired { + !version.toString().endsWith("-SNAPSHOT") && + gradle.taskGraph.allTasks.any { it is PublishToMavenRepository } + } + } + } + } +} + // 版は次の 2 段で単一情報源から導出する。上流ほど源に近く、下流は上流の値を写した生成物として扱う。 // 1. kotlin-maven-plugin の親 POM の → version catalog の maven 版(syncMavenVersion) // 2. version catalog / enumizerVersion / wrapper properties → README / docs / .idea 中の現行版表記 diff --git a/gradle.properties b/gradle.properties index 2dd34fb..c435046 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ kotlin.code.style=official # 配布版の自版。フル版は -<自版> 形式で、前半の Kotlin 版は gradle/libs.versions.toml が正 # (ルートの build.gradle.kts が結合して全モジュールへ配る) -enumizerVersion=0.1.0-SNAPSHOT +enumizerVersion=0.1.0 # コンパイラプラグイン ID の単一情報源。compiler-plugin の EnumizeCommandLineProcessor.PLUGIN_ID と # 一致していなければならない。gradle-plugin / maven-plugin はビルド時生成の Coordinates 経由で参照し、