refactor: リリースツールの差分を release_config.dart へ集約 - #34
Merged
Merged
Conversation
release_project.dart は6リポジトリに分岐したコピーが存在していた。実質的な差は 参照ファイルの一覧、1ファイルあたりの参照数、example/pubspec.lock の同期有無の 3点だけで、残りは dart format のバージョン差による折り返し位置の違いだった。 3点を ReleaseConfig として切り出し、release_project.dart と各エントリポイントを 6リポジトリでバイト単位で同一にした。設定は YAML ではなく Dart の const とし、 依存追加なしでアナライザの型検査が効くようにしている。 bumpVersion / verifyRelease は config を必須の名前付き引数で受け取る。 release_notes.dart は出力先を引数で受け取る形に統一した。 テストは共有実装用と設定用に分けた。release_project_test.dart は合成した プロジェクトに対して全設定パターン(空 / exactly(1) / exactly(2) / atLeastOne / exampleLockPath)と、書き込み前に失敗することの保証を検証する。 release_config_test.dart は実ファイルに対して自リポジトリの設定を検証するため、 参照ファイルの不整合がリリース時ではなく毎回の CI で落ちる。テストのみ package:test と package:flutter_test で import 1行が異なる。 挙動の差が1点ある。misskey_mfm_parser は参照ファイルを持たないため旧実装が pubspec.yaml の name を読んでいなかったが、共有実装は常に読む。name が欠落 または重複した pubspec.yaml の受理条件が変わる。 Flutter 3.38.7 と 3.47.1 の dart format が同じ出力を返すことを確認済み。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
6リポジトリに分岐していた
tool/src/release_project.dartのコピーを、バイト単位で同一にしました。背景
同一目的のリリースツールが6リポジトリにあり、5種類に分岐していました(
misskey_clientとmastodon_clientのみ同一)。差分を解析したところ、実質的な違いは3点だけで、残りはdart formatの SDK バージョン差による折り返し位置の違いでした。example/pubspec.lock同期変更
3点を
ReleaseConfigとしてtool/src/release_config.dartへ切り出しました。設定を YAML ではなく Dart の
constにしたのは、依存を増やさずにアナライザの型検査を効かせ、実行時のパースエラーをなくすためです。以下が6リポジトリでバイト単位で同一になります。
テスト
2系統に分けました。
test/tool/release_project_test.dart— 合成プロジェクトに対し、全設定パターン(空 /exactly(1)/exactly(2)/atLeastOne/exampleLockPath)と、不整合時に1ファイルも書き込まずに失敗することを検証test/tool/release_config_test.dart— 実ファイルに対して自リポジトリの設定を検証後者により、参照ファイルの不整合がリリース実行時ではなく毎回の CI で落ちます。
テストのみ
package:test(pure Dart)とpackage:flutter_test(Flutter)で import 1行が異なります。挙動の差
misskey_mfm_parserは参照ファイルを持たないため旧実装がpubspec.yamlのnameを読んでいませんでしたが、共有実装は常に読みます。nameが欠落または重複したpubspec.yamlの受理条件が変わります。正常なリポジトリでは影響しません。それ以外は等価です。エラーメッセージの文言、全入力を検証してから書き込む構造、SemVer 比較、CHANGELOG の昇格畳み込み、renderer のみの lock 同期は維持しています。
検証
analyzeクリーン、テスト全通過(parser 35件、他 33件)misskey_clientの実コピーに対するbump_versionスモークテストで12ファイルの参照更新とverify_release通過を確認dart formatは SDK で折り返し位置が変わります。misskey_authのみ Flutter 3.47.1、他5つは 3.38.7 のため、両方で--set-exit-if-changedが通ることを実測で確認しています。長いメソッドチェーンは中間変数へ分けました