Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ Label uniqueness within a hierarchy is enforced at compile time.
|---|---|
| Kotlin | 2.4.x, K2 only. The plugin version encodes the Kotlin minor it targets; applying it to another Kotlin minor produces a build warning |
| Version format | `<KotlinVersion>-<pluginVersion>`, e.g. `2.4.10-0.1.0` |
| Build environment | Gradle 9+ or Maven 3.9+ / JDK 17+ (verified with Gradle 9.6 and Maven 3.9) |
| Build environment | Gradle 9+ or Maven 3.9+ / JDK 17+ |
| runtime-api (JVM) | Java 8+ bytecode |
| runtime-api targets | `jvm`, `js`, `wasmJs`, `wasmWasi`, `linuxX64`, `mingwX64`, `macosX64`, `macosArm64`, `iosArm64`, `iosSimulatorArm64`, `iosX64` |

Expand Down
29 changes: 11 additions & 18 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ allprojects {

// 版は次の 2 段で単一情報源から導出する。上流ほど源に近く、下流は上流の値を写した生成物として扱う。
// 1. kotlin-maven-plugin の親 POM の <maven.version> → version catalog の maven 版(syncMavenVersion)
// 2. version catalog / enumizerVersion / wrapper properties → README / docs / .idea 中の現行版表記
// (syncVersionMentions)
// 2. version catalog / enumizerVersion → README / docs / .idea 中の現行版表記(syncVersionMentions)
// カタログの値は Gradle の構成時に読まれるため、1 の書き戻しを 2 へ反映するには起動を分ける必要がある。
// Dependabot 等の版更新はマニフェストしか書き換えず下流が置き去りになるため、
// check へ紐付けた checkMavenVersion / checkVersionMentions が乖離を検出し、同期タスクが書き換える
Expand All @@ -68,12 +67,6 @@ val enumizerDeclaredVersion = providers.gradleProperty("enumizerVersion").get()
val enumizerReleaseVersion = enumizerDeclaredVersion.removeSuffix("-SNAPSHOT")
// リリース版を宣言している状態か(開発中は -SNAPSHOT が付く)。配布物を説明する文書の同期対象を切り替える
val isReleaseVersion = enumizerDeclaredVersion == enumizerReleaseVersion
val gradleWrapperVersion =
providers
.fileContents(layout.projectDirectory.file("gradle/wrapper/gradle-wrapper.properties"))
.asText
.map { checkNotNull(Regex("""/gradle-(\d+(?:\.\d+)+)-""").find(it)).groupValues[1] }
.get()

// maven-core は kotlin-maven-plugin の realm 側が実行時に供給するため compileOnly で参照する。
// その版は kotlin-maven-plugin 自身が provided スコープで宣言する版が正だが、provided は Gradle の
Expand Down Expand Up @@ -153,10 +146,15 @@ val checkMavenVersion =
}
}

// 置換は「現行版を指す表記」に限る。サポート下限("Kotlin 2.4" / "Gradle 9+" / "Maven 3.9+")・
// 特定版に固定した実測エビデンス(設計00 の "Kotlin 2.4.0 実測")・別版での版形式の例示は
// 書き換えてはならないため、対象ファイルの許可リストと文脈付きパターンの両方で絞る。
// 3 成分(パッチ付き)と 2 成分(マイナーまで)の表記は、それぞれの粒度を保ったまま現行値へ置換する
// 追随の対象は配布物を左右する版、すなわち Kotlin 版と自版に限る。
// ビルドツール(Gradle / Maven)の版は配布物へ影響しないため、資料はサポート下限
// ("Gradle 9+" / "Maven 3.9+")のみを書き、具体的な版へは言及しない。言及した場合、
// 配布物と無関係なラッパー・ハーネスの更新が資料の追随を要求し、その更新 PR が CI で落ちる。
//
// 置換は「現行版を指す表記」に限る。サポート下限("Kotlin 2.4")・特定版に固定した実測エビデンス
// (設計00 の "Kotlin 2.4.0 実測")・別版での版形式の例示は書き換えてはならないため、
// 対象ファイルの許可リストと文脈付きパターンの両方で絞る。
// パッチまでの表記とマイナーまでの表記は、それぞれの粒度を保ったまま現行値へ置換する
val versionMentionRules: List<Pair<Regex, String>> =
listOf(
// 配布版のフル形式 <KotlinVersion>-<自版>(README のセットアップ例・版形式の現行例)
Expand All @@ -171,11 +169,6 @@ val versionMentionRules: List<Pair<Regex, String>> =
Regex("""(?<=Kotlin )\d+\.\d+\.\d+(?![\d.-])""") to kotlinCurrent,
// 対応マイナーの表記(README の互換表の "2.4.x")
Regex("""\d+\.\d+\.x""") to "${minorOf(kotlinCurrent)}.x",
// Gradle / Maven。下限表記("9+" / "3.9+")は後置の + により対象外となる
Regex("""(?<=Gradle )\d+\.\d+\.\d+(?![\d.+])""") to gradleWrapperVersion,
Regex("""(?<=Gradle )\d+\.\d+(?![\d.+])""") to minorOf(gradleWrapperVersion),
Regex("""(?<=Maven )\d+\.\d+\.\d+(?![\d.+])""") to mavenCurrent,
Regex("""(?<=Maven )\d+\.\d+(?![\d.+])""") to minorOf(mavenCurrent),
)

// 対象は文書の性質で 2 群に分ける。現行版への言及を持つ資料を増やした場合は該当する群へ追加する。
Expand All @@ -187,7 +180,7 @@ val versionMentionRules: List<Pair<Regex, String>> =
val releaseVersionMentionTargets = listOf("README.md", "docs/概要.md")

// 現在の開発・検証環境を記録する文書と、IDE が同期時に書き戻す設定。
// カタログやラッパーの更新へ即座に追随させる(追随しないと作業ツリーへ差分が残る)
// カタログの更新へ即座に追随させる(追随しないと作業ツリーへ差分が残る)
val environmentVersionMentionTargets =
listOf(
"docs/実装ノート.md",
Expand Down
3 changes: 2 additions & 1 deletion docs/test/テスト戦略.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
- 検証対象は CLI / Gradle / Maven ビルドの成否・診断・生成物・実行時挙動に限る。
IDE(K2) はサードパーティ FIR プラグインを既定でロードしない(KTIJ-29248)ため、
IDE / Analysis API 側は検証対象外とする(既定の IDE 体験は概要 §6・設計00 §11 が既知の制限として持つ)。
- 環境: Kotlin 2.4.10 / Gradle 9.6.1 / Maven 3.9.12 / JVM toolchain 17 / `group=io.github.projectmapk`。
- 環境: Kotlin 2.4.10 / JVM toolchain 17 / `group=io.github.projectmapk`。
ビルドツール(Gradle / Maven)の版はラッパーとカタログを正とし、本書では具体的な版を指定しない。
- 比較規約: 値の比較はなるべく観測用 data class を組み立て 1 回の `assertEquals` で行う。
kind の同一性は参照比較(`===`)で行う。

Expand Down
2 changes: 1 addition & 1 deletion docs/実装ノート.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
各事項の詳細と根拠は実装箇所のコメントを正とし、本書は所在と要点のみを示す。
本書は他資料への**補足**であり、参照は常に本書から他資料へ向かう(ソースコードおよび設計資料・概要・
テスト資料から本書を参照しない。それらが要する内容は各資料自身が持つ)。
実測環境: Kotlin 2.4.10(K2 / JVM)・Gradle 9.6.1
実測環境: Kotlin 2.4.10(K2 / JVM)。

## 1. モジュール構成

Expand Down