Skip to content

ci: マイナー横断ビルドが 1 回の実行で全ての不適合を出すようにする - #97

Merged
k163377 merged 2 commits into
mainfrom
ci/prerelease-detection-signal
Oct 24, 2026
Merged

k163377 merged 2 commits into
mainfrom
ci/prerelease-detection-signal

Conversation

@k163377

@k163377 k163377 commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

週次のマイナー横断ビルド(kotlin-prerelease.yml)が、1 回の実行で 1 件しか不適合を明かさない状態を直す。

背景

直近 5 回の実行はいずれも失敗しており、原因は 2 つに分かれていた。

実行日 Kotlin 停止したステップ 原因
09-25 / 10-02 / 10-09 2.5.0-Beta1 kotlinUpgradeYarnLock macosX64() の非推奨が ERROR へ昇格(f5c31bf で解消済み)
10-16 2.5.0-Beta1 :gradle-integration:test ProbeGateTest#annotationNotationBehaviorIsPinned
10-23 2.5.0-Beta2 :gradle-integration:test 同上

後者 2 回はジョブがそこで止まるため :maven-integration:test が走らず、2.5 系での maven 側は一度も検証されていない(最後の完走は 2.4.20-RC3)。
また失敗の出力は org.opentest4j.AssertionFailedError at ProbeGateTest.kt:28 だけで、アサーションが組み立てた診断一覧が落ちており、原因の特定にローカル再現が必要だった。

変更

  • kotlin-prerelease.yml: 重いテスト 2 件を continue-on-error で独立させ、最後のステップでまとめて判定する。ci.yml は両者を別ジョブに分けており、判定の単位はそちらと揃う
  • integration-test/{gradle,maven}-integration/build.gradle.kts: testLogging.exceptionFormat を FULL にして失敗理由を全文出す

プローブが落ちている件そのものは本 PR の対象外。実挙動固定プローブは上流の挙動が変わったら落ちる前提のものであり、Kotlin 2.5 では import 別名の @Enumize が述語に載って生成へ到達するようになった(typealias 表記は従来どおりエラー)。仕様・テストの移行は 2.5 採用時に行う。

検証

  • 4 ワークフローすべての YAML パース
  • 判定ステップの run をファイルから取り出し、bash -e で 4 通りを空撃ち(success/success のみ exit 0、他は exit 1)
  • exceptionFormat は単離した小プロジェクトで既定と FULL を比較し、既定では複数行のアサーションメッセージが落ち FULL では出ることを実測
  • ./gradlew ktfmtFormat 後に差分なし、両テストタスクの --dry-run が通る

配布物は変わらないため CHANGELOG のエントリは無し(Changelog: none)。

🤖 Generated with Claude Code

k163377 and others added 2 commits October 25, 2026 02:46
週 1 回しか回らない検出ビルドで先に落ちた 1 件がジョブを止めると、残りの検出が隠れて
1 回の実行から 1 件しか分からない。実際に 2.5.0-Beta1 / Beta2 の 2 回は
:gradle-integration:test の失敗で停止し、:maven-integration:test は 2.5 系で
一度も走っていない(最後の完走は 2.4.20-RC3)。
2 つのテストは互いに依存しないため両方を走らせ、最後にまとめて判定する。

ci.yml は両者を別ジョブに分けており、判定の単位はそちらと揃う。

Changelog: none
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
testLogging の exceptionFormat は既定が SHORT で、例外の型と位置だけを出して
メッセージを落とす。診断アサーションは期待した断片と実際の診断行一覧を
メッセージへ組み立てており、これが出ないと CI の失敗からは
「どのアサーションが落ちたか」しか分からず、原因の切り分けにローカル再現が要る。
CI の失敗はログだけが手掛かりであるため全文を出す。

Changelog: none
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@k163377
k163377 marked this pull request as ready for review October 24, 2026 17:50
@k163377
k163377 merged commit c825834 into main Oct 24, 2026
13 checks passed
@k163377
k163377 deleted the ci/prerelease-detection-signal branch October 24, 2026 18:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant