Repository navigation
test(packaging): SqlClient のメジャー版を EF Core の宣言に追随させる - #179
Merged
Merged
Conversation
Microsoft.Data.SqlClient は Microsoft.EntityFrameworkCore.SqlServer の実体で、 プロバイダが動作保証するのは自身が宣言したメジャー版のドライバに対してだけ。 ところが名前に EntityFrameworkCore / EFCore を含まないため nuget-ef-core グループ には入らず、メジャー更新が単独 PR として現れる (PR #178 が 5.1.7 → 7.0.2 で出ていた)。 壊れ方は EF Core 本体とプロバイダの版ズレとまったく同じで、違うのは壊れる層が ドライバだという点だけ。テストは InMemory / SQLite しか触らないため、ここがずれても ビルドも全テストも緑のまま通り、SQL Server 配備でだけ実行時に壊れる。 - dependabot.yml: nuget エコシステムに ignore を追加し major だけを保留する (同じメジャー内の minor / patch は csproj の「床値」を上げる更新なので止めない) - EfCorePackageAlignmentTests: 解決版と EF Core 宣言版のメジャー一致 / 床値の後退 / 保留の消失 / 保留の効きすぎ の 4 つを検査する。期待値はテストに書かず packages.lock.json の dependencies から読むので EF Core の更新に自動追随する - ReadNuGetGroups から ReadNuGetEcosystemEntry を切り出す。以前はエントリを捨てて groups: だけを返していたため、ignore: へ辿るには同じ YAML の再解析が要った (§6) - csproj / CLAUDE.md: メジャーを合わせる理由と検出網の担当範囲を明記 検証: dotnet restore --locked-mode と dotnet test (460 件) が green。 検出網が効くことを 5 通りの破壊で確認済み (解決版を 7.0.2 に / 床値を 5.1.5 へ後退 / ignore の削除 / update-types の欠落 / 重複エントリ)。
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch had an error being deployed
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.
Context
コードレビューで開いていた Dependabot PR #178(
Microsoft.Data.SqlClient5.1.7 → 7.0.2)を見送り、代わりに同種の変更を機械的に止める検出網を入れる。何が問題だったか
Microsoft.Data.SqlClientはMicrosoft.EntityFrameworkCore.SqlServerが内部で使う ADO.NET ドライバの実体で、プロバイダが動作保証するのは自身が宣言したメジャー版に対してだけ(現在の宣言は 5.1.6)。#178 はこれを 2 メジャー先の 7.0.2 へ単独で上げるものだった。ところがこのドライバは名前に
EntityFrameworkCore/EFCoreを含まないため、dependabot.ymlのnuget-ef-coreグループ(EF Core 本体とプロバイダ実装を major も含めて 1 本の PR に束ねる設定)に入らない。結果、まさにそのグループが防いでいる版ズレが、ドライバの層でだけすり抜けていた。壊れ方も同じ — このリポジトリのテストは InMemory / SQLite しか触らないので、ドライバだけを別メジャーへ上げてもビルドも全テストも緑のまま通り、SQL Server 配備でだけ実行時に壊れる。
CLAUDE.mdが EF Core 系について「一部だけ上げてもビルドもテストも通るため、PostgreSQL 配備でだけ実行時に壊れる」と書いているのとまったく同じ無言の破壊で、違うのは壊れる層だけ。副次的な問題として #178 は実際に CI も赤だった(
tests/側のpackages.lock.jsonが更新されずdotnet restore --locked-modeがNU1004)。また解決されるSystem.Memoryが 4.5.4 → 4.5.3 と下がり、csproj のコメント(「EF Core 側の 5.1.6 要求とは互換で」)も事実と食い違う状態になっていた。変更内容
.github/dependabot.yml— nuget エコシステムにignoreを追加し、Microsoft.Data.SqlClientの major だけを保留。同じメジャー内の minor / patch は csproj が意図している「セキュリティ更新を後退させない床値」を上げる更新なので止めない(update-typesを省くと全更新の無視になり、その経路まで塞がる)。EfCorePackageAlignmentTests— 検査を 2 つ追加。SqlClientPin_StaysWithinEfCoreDeclaredMajor— 解決版と EF Core 宣言版のメジャー一致、および床値の後退(同メジャー内で下げる変更はメジャー検査を素通りするため別途固定)DependabotConfig_HoldsSqlClientMajorUpdates— 保留の消失と効きすぎ(update-typesの欠落 /versionsの追加 / 重複エントリ。Dependabot は同じ依存の複数エントリをすべて適用する)期待値はテストに書かず、
packages.lock.jsonのdependenciesから EF Core の宣言を読む。 書き写すと EF Core を上げたとき 2 か所を直す必要が生まれ、直し忘れた側が静かに古い前提を主張し続けるため(§6 の唯一の真実の源)。おかげで EF Core を上げれば検査が自動で追随する。ReadNuGetGroupsからReadNuGetEcosystemEntryを切り出し — 以前はエコシステムのエントリを捨ててgroups:だけを返していたため、同じエントリ直下のignore:へ辿るには同じ YAML をもう一度解析する必要があった(§6 DRY)。挙動は変えていない。csproj/CLAUDE.md— メジャーを合わせる理由と、この検出網の担当範囲を明記。ドライバのメジャーを上げたいときは、それを宣言する版の
Microsoft.EntityFrameworkCore.SqlServerへ同じ変更セットで上げる(ignoreは残したままでよい)。検証
dotnet restore --locked-mode(CI と同じ。chore(deps): Bump Microsoft.Data.SqlClient from 5.1.7 to 7.0.2 #178 が落ちていた当のコマンド)— cleandotnet test— 460 件すべて green(既存 458 + 新規 2)検出網が実際に効くことをミューテーションで確認済み。
7.0.2に(= PR #178 相当)5.1.5へ後退(宣言は 5.1.6)ignoreブロックの削除update-typesの欠落(全更新の無視)ignoreに重複エントリGenerated by Claude Code