From 43bc2bd1e784a57d547f55626772166f4131a15a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gro=C3=9F?= Date: Sat, 14 Nov 2026 17:27:28 +0100 Subject: [PATCH] test: the consumer smoke test runs on an EF Core the packages were not built with SMOKE_EF_VERSION makes every consumer reference Microsoft.EntityFrameworkCore.Relational at that version directly; the design package, the host and dotnet-ef follow it, and a row checks that the consumer resolved it. With 11.0.0, over Npgsql EF rc.3's exact pin (NU1608), every row passed on PostgreSQL 18.4. Closes #143 Co-Authored-By: Claude Fable 5.2 --- CLAUDE.md | 7 +++++++ test/ConsumerSmokeTest/run.sh | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index defc03d..17863c9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,6 +61,9 @@ dotnet test test/SchemaKit.ApiProbes/SchemaKit.ApiProbes.csproj # The consumer smoke test, on the server SCHEMAKIT_TEST_PG names; a folder of .nupkg as the argument tests those SCHEMAKIT_TEST_PG="Host=localhost;Username=postgres;Password=…;Database=postgres" test/ConsumerSmokeTest/run.sh +# The same with the consumer on another EF Core than the packages reference (NU1608 where a package pins it) +SMOKE_EF_VERSION=11.0.0 SCHEMAKIT_TEST_PG="…" test/ConsumerSmokeTest/run.sh + # Spike B, the first version of the consumer smoke test; SPIKE_PG turns on the PostgreSQL paths spikes/B.DesignTime/run.sh @@ -533,6 +536,10 @@ Npgsql EF `11.0.0-rc.3` depends on EF Core `[11.0.0-rc.3.26522.148]`, exactly. E in the repository stays on rc.3 until Npgsql ships 11.0.0, although EF Core 11.0.0 is out. A stable package cannot depend on a prerelease, so SchemaKit ships previews until then. +A consumer that references EF Core 11.0.0 directly gets NU1608 for Npgsql's pin and a build. The +smoke test passed every row that way on 2026-11-14 (`SMOKE_EF_VERSION=11.0.0`, PostgreSQL 18.4, +#143): it says such a consumer works, not that the pins may move. + The probes drive Roslyn `5.12.0-1.26504.105` from the dotnet-tools feed (`test/SchemaKit.ApiProbes/nuget.config` says why). diff --git a/test/ConsumerSmokeTest/run.sh b/test/ConsumerSmokeTest/run.sh index c873855..488391d 100755 --- a/test/ConsumerSmokeTest/run.sh +++ b/test/ConsumerSmokeTest/run.sh @@ -192,6 +192,19 @@ npgsql_ef_version=$(dependency "$pg_package" Npgsql.EntityFrameworkCore.PostgreS [[ -n $ef_version && -n $npgsql_ef_version ]] || { log=; fail "the packages" "cannot read EF Core's and Npgsql EF's versions from the nuspecs"; } echo " EF Core $ef_version, Npgsql EF $npgsql_ef_version" +# SMOKE_EF_VERSION: the consumer on another EF Core than the packages were built with, as one is +# that references EF Core directly. Every consumer then references +# Microsoft.EntityFrameworkCore.Relational at that version, and the design package, the host and +# dotnet-ef follow it. Where a package pins EF Core exactly, as a prerelease of Npgsql EF does, +# NuGet answers with NU1608 and builds: the run then says what such a consumer gets, not that the +# packages may reference that version. +ef_direct= +if [[ -n ${SMOKE_EF_VERSION:-} && $SMOKE_EF_VERSION != "$ef_version" ]]; then + echo " the consumer references EF Core $SMOKE_EF_VERSION directly, over the packages' $ef_version" + ef_version=$SMOKE_EF_VERSION + ef_direct="" +fi + # From here on, nothing restores into the machine's package folder. export NUGET_PACKAGES=$work/packages @@ -224,6 +237,7 @@ write_props() { # Npgsql's version, once the consumer has restored it $npgsql_ef_version $1 + $ef_direct EOF } @@ -242,6 +256,14 @@ else fail "restore" "the consumer did not restore $version from $feed (found: ${restored:-nothing})" fi +if [[ -n $ef_direct ]]; then + if has "$work/App/obj/project.assets.json" "\"Microsoft.EntityFrameworkCore.Relational/$ef_version\"" "\"Microsoft.EntityFrameworkCore/$ef_version\""; then + ok "EF Core $ef_version" "the consumer resolved it, over the version the packages reference" + else + fail "EF Core $ef_version" "the consumer did not resolve EF Core $ef_version" + fi +fi + # The judge takes the Npgsql the consumer took. npgsql_version=$(find "$NUGET_PACKAGES/npgsql" -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | sort -V | tail -n 1) write_props "$npgsql_version"