You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
test(release): verify the published packages from a consumer's position (ADR D85)
The ask was a sample that installs the Pro packages instead of referencing the
projects. Pointing samples/15 at nuget.org was investigated and rejected: the
samples are the repo's compile-time canary. Break a public API in Core and
samples 14 and 15 stop building immediately; on a pinned PackageReference they
would keep building against the last release and the break would ship.
It could not have been done by halves either. samples/15 reaches the NeoReports
projects through AllSourcesShared, which sample 14 also uses, so converting only
the Pro references would put a package Core and a project Core in one build.
tools/consumer-smoke instead: outside NeoReports.sln, with a Directory.Build.props
that does not import the repo's and an empty Directory.Packages.props beside it to
stop the walk-up to Central Package Management. Everything resolves from nuget.org
at the versions a customer would type. It proves strictly more than a converted
sample would, because it exercises the artifact on the feed rather than a local
build of it.
Three levels: identity (versions, the 2.0.0+<commit> stamp, the embedded key is
the production one); enforcement (all three Pro packages refuse to work unlicensed
through both the static API and DI); and, with NEOREPORTS_LICENSE_KEY set, a real
sectioned-workbook run whose .xlsx is opened and checked for two worksheets.
Writing it surfaced three consumer-facing facts about 2.0.0 that no in-repo build
could have:
* Core requires Microsoft.Extensions.* 10.0.10 — a consumer on 9.x hits NU1605.
* Core resolves ILoggerFactory from DI but only depends on Logging.Abstractions,
so the consumer must bring a logging implementation.
* PowerShell's `>` writes UTF-16, so a key captured that way arrives with NULs
and is reported as "malformed" — wrong encoding wearing a bad-signature mask.
Two things the harness got wrong first, both recorded rather than quietly fixed.
An assertion that the assemblies "came from the package cache" can never pass: the
SDK copies package assemblies into bin/, so Assembly.Location is identical either
way. That guarantee is structural, and a single added ProjectReference would
defeat the harness with every check still green. And the enforcement checks failed
whenever a license WAS available, because ProLicenseGate falls back to the
environment variable by design — a broken test, not a broken product. The variable
is now cleared around those checks and restored after, so they stay meaningful in
the mode where a regression would cost the most.
Verified locally both ways: 10/10 without a license, 15/15 with one.
0 commit comments