Files
UA-.NETStandard/preview-version.props
T
Roman Ettlinger 6812621abd Exempt unremovable preview.g<commit> versions from the preview ordering gate
Two master NuGet Publish runs on 2026-10-06 (37461428995, 37462705289)
pushed 2.0.0-preview.gfd360271d9 and 2.0.0-preview.ge78c648295 to GitHub
Packages while master briefly carried the stable root version 2.0.0.
SemVer 2 ranks the alphanumeric "g<commit>" identifier above every numeric
one, so no PreviewPackageBuildNumber can outrank them and the stable 2.0.0
candidate on release/2.0 fails validate-preview-package-ordering.ps1.

Add an explicit PreviewPackageOrderingExemptions list to
preview-version.props that the gate skips by exact (case-insensitive)
match; everything else still fails closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 06:42:07 +02:00

57 lines
3.2 KiB
XML

<Project>
<!--
Numbers the "-preview.N" suffix that version.targets appends to the
preview-only package families (see ApplyPreviewPackageVersion) whenever
the root package version is an exact stable release, such as "2.0.0" on
release/2.0 at the moment the release is cut. That root version carries
no prerelease tag of its own at that point, so there is no git-height
placeholder available to derive a number from; this property supplies an
explicit, auditable one instead.
This is a manually curated release value, not a computed one:
* It MUST sort strictly above every already-published "-preview.N" (or
legacy "-preview.YYYYMMDD") identifier for the same "OPCFoundation.
NetStandard.Opc.Ua.*" package IDs on both nuget.org and the GitHub
Packages feed, including every ".Debug" package variant. Note that
ordinary development keeps publishing "<base>-preview.{height}"
packages with a monotonically growing height, so a value that was
correct when it was picked goes stale on its own.
.azurepipelines/validate-preview-package-ordering.ps1 proves this
invariant against both feeds and fails the stable candidate build and
the release promotion when it no longer holds; the value below is a
headroom estimate, and that check - not this comment - is what
guarantees correctness.
* It is reset/re-picked independently for every new stable base version
(2.0.0, 2.0.1, 2.1.0, ...); do not carry a prior release's value
forward without checking published versions again.
* See docs/ReleaseProcess.md ("Common preflight" and the per-release
procedures) for the exact commands used to look up the currently
published preview numbers before changing this value.
While the root version itself is still a prerelease (for example
"2.0.0-preview.{height}" during ordinary development, or
"2.0.1-preview.{height}" while release/2.0 is stabilizing the next
patch), version.targets reuses that prerelease tag directly and this
property has no effect.
-->
<PropertyGroup>
<PreviewPackageBuildNumber Condition="'$(PreviewPackageBuildNumber)' == ''">200</PreviewPackageBuildNumber>
<!--
Exact, already-published versions that the preview ordering gate
(.azurepipelines/validate-preview-package-ordering.ps1) must not treat
as blocking, separated by ";". Only for versions that no
PreviewPackageBuildNumber can ever outrank and that cannot be removed
from the feed: SemVer 2 ranks an alphanumeric identifier such as
"g<commit>" above every numeric one, so "<base>-preview.g<commit>"
sorts above every "<base>-preview.N".
2.0.0-preview.gfd360271d9 and 2.0.0-preview.ge78c648295 were pushed to
GitHub Packages (never nuget.org) by master CI runs 37461428995 and
37462705289 on 2026-10-06, while master briefly carried the stable
root version 2.0.0 and Nerdbank.GitVersioning appended the commit id.
They stay above the released 2.0.0-preview.N on that feed only.
-->
<PreviewPackageOrderingExemptions>2.0.0-preview.gfd360271d9;2.0.0-preview.ge78c648295</PreviewPackageOrderingExemptions>
</PropertyGroup>
</Project>