From fa06c66dbbf58fc2af6f2136c89b1d4dad980a2f Mon Sep 17 00:00:00 2001 From: romanett Date: Tue, 6 Oct 2026 21:37:20 +0200 Subject: [PATCH] Stop versioning DI and ISA95 packages as preview (#4686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Removes the **DI** (`Opc.Ua.Di*`) and **ISA95** (`Opc.Ua.ISA95*`) package families from the preview-only set, so they ship with the stable root version (e.g. `2.0.1` instead of `2.0.1-preview.N`). - `version.targets`: drop the two `_IsPreviewPackage` conditions. - `.azurepipelines/package-version-policy.ps1`: drop `ISA95|Di` from `Test-PreviewPackageId`. It must match `version.targets`, because the package-set validator fails if the two disagree. - `PackageVersionPolicyTests`: ISA95/Di IDs are now expected to be non-preview, they are removed from the classifier-agreement token list, and the "already-preview base version" case now uses Robotics. - Docs (`DeveloperGuide.md`, `ReleaseProcess.md`, `docs/README.md`): the preview-family list no longer includes DI or ISA95, and the "preview package" label is removed from the DI, Software Update (part of the DI packages), and ISA-95 entries. ## Test `dotnet test tests/Opc.Ua.Tools.Tests --filter PackageVersionPolicy` (net10.0): 87/87 passed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 --- .azurepipelines/package-version-policy.ps1 | 2 +- docs/DeveloperGuide.md | 2 +- docs/README.md | 6 +++--- docs/ReleaseProcess.md | 4 ++-- tests/Opc.Ua.Tools.Tests/PackageVersionPolicyTests.cs | 8 +++----- version.targets | 2 -- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/.azurepipelines/package-version-policy.ps1 b/.azurepipelines/package-version-policy.ps1 index 600a19e3ae..03008c87f4 100644 --- a/.azurepipelines/package-version-policy.ps1 +++ b/.azurepipelines/package-version-policy.ps1 @@ -2,7 +2,7 @@ function Test-PreviewPackageId { param([Parameter(Mandatory)][string]$PackageId) $baseId = $PackageId -replace '\.Debug$', '' - return $baseId -match '^OPCFoundation\.NetStandard\.Opc\.Ua\.(XRegistry|WotCon|Vision|Robotics|Redundancy|Positioning|OpenUsd|ISA95|AI|Di)(\.|$)' -or + return $baseId -match '^OPCFoundation\.NetStandard\.Opc\.Ua\.(XRegistry|WotCon|Vision|Robotics|Redundancy|Positioning|OpenUsd|AI)(\.|$)' -or $baseId -in @( 'OPCFoundation.NetStandard.Opc.Ua.Mcp.Robotics', 'OPCFoundation.NetStandard.Opc.Ua.Mcp.Vision', diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9bcdea588e..4191e12864 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -380,7 +380,7 @@ From **2.0** onward, package versions are produced by [Nerdbank.GitVersioning](h Stable (public-release) versions are produced **only** from a canonical `release/.` branch (e.g. `release/2.0`, `release/2.1`) — never from `master`, a tag, or any other branch — and only at the exact commit whose `version.json` carries the plain `..` version with no prerelease label (e.g. `2.0.0`). Patch numbers increase by exactly one per release on their line (`2.0.0` → `2.0.1` → `2.0.2`); a new minor line resets the patch to zero (`2.1.0`). See **[Release process](ReleaseProcess.md)** for the full branch/version model and the step-by-step procedure for cutting a release, shipping a patch or minor version, backporting a fix, and promoting a stable candidate. The XRegistry, WoT Connectivity, Vision, Robotics, Redundancy, Positioning, -OpenUSD, ISA95, AI, and DI package families remain preview packages even when +OpenUSD, and AI package families remain preview packages even when the root version is stable. Their numeric version follows the root version: for example, a stable `2.0.0` root produces `2.0.0-preview.N` for these families (`N` a committed, manually curated number in `preview-version.props` diff --git a/docs/README.md b/docs/README.md index ca4d048286..5f9c4aef53 100644 --- a/docs/README.md +++ b/docs/README.md @@ -165,16 +165,16 @@ explains how they relate to the base model. These libraries assume the server path and, for typed client access, the client path. The packages load the models that each model depends on. -- [Device Integration](DeviceIntegration.md) (OPC 10000-100; preview package) — +- [Device Integration](DeviceIntegration.md) (OPC 10000-100) — devices, topology, and locking. - [Asset Management Basics](AMB.md) (OPC 10000-110; preview package) — make devices, machines, pumps or scales manageable assets: discovery, identification, health alarms, maintenance, documentation links and locations. Read Device Integration first. -- [Software update](SoftwareUpdate.md) (OPC 10000-100; preview package) — +- [Software update](SoftwareUpdate.md) (OPC 10000-100) — software package storage, installation, and confirmation. Read Device Integration first. -- [ISA-95](ISA95.md) (OPC 10030 and OPC 10031-4; preview package) — the common +- [ISA-95](ISA95.md) (OPC 10030 and OPC 10031-4) — the common model and job control. - [Positioning](Positioning.md) (OPC 10000-210 and OPC 10000-211; preview package) — relative frames and geographic positions. diff --git a/docs/ReleaseProcess.md b/docs/ReleaseProcess.md index f98aa3d90f..25ea3df645 100644 --- a/docs/ReleaseProcess.md +++ b/docs/ReleaseProcess.md @@ -37,7 +37,7 @@ without any other context. [Versioning](DeveloperGuide.md#versioning)). Every package in the solution shares the same root version except the **preview-only families**. - **Preview-only families** - the XRegistry, WoT Connectivity, Vision, - Robotics, Redundancy, Positioning, OpenUSD, ISA95, AI, and DI package + Robotics, Redundancy, Positioning, OpenUSD, and AI package families, the Robotics/Vision MCP extensions, and the OpenUSD connector tools. `version.targets` keeps these on a `-preview.N` suffix even when the root version is an exact stable release. The full, single source of truth @@ -116,7 +116,7 @@ Every procedure below starts here. ConvertFrom-Json | ForEach-Object name ``` Repeat for a representative sample of the preview-only families (at - minimum XRegistry, DI, and one MCP/connector package); they are versioned + minimum XRegistry, Robotics, and one MCP/connector package); they are versioned together but published independently, so check more than one. If any published number is greater than or equal to the committed `PreviewPackageBuildNumber`, raise it (in the same PR that changes the diff --git a/tests/Opc.Ua.Tools.Tests/PackageVersionPolicyTests.cs b/tests/Opc.Ua.Tools.Tests/PackageVersionPolicyTests.cs index 43791e5134..6ac20d5c91 100644 --- a/tests/Opc.Ua.Tools.Tests/PackageVersionPolicyTests.cs +++ b/tests/Opc.Ua.Tools.Tests/PackageVersionPolicyTests.cs @@ -71,9 +71,9 @@ namespace Opc.Ua.Tools.Tests ("OPCFoundation.NetStandard.Opc.Ua.Redundancy.Kubernetes", true), ("OPCFoundation.NetStandard.Opc.Ua.Positioning.Client", true), ("OPCFoundation.NetStandard.Opc.Ua.OpenUsd.Server", true), - ("OPCFoundation.NetStandard.Opc.Ua.ISA95.Client", true), + ("OPCFoundation.NetStandard.Opc.Ua.ISA95.Client", false), ("OPCFoundation.NetStandard.Opc.Ua.AI.Inference", true), - ("OPCFoundation.NetStandard.Opc.Ua.Di.Server", true), + ("OPCFoundation.NetStandard.Opc.Ua.Di.Server", false), ("OPCFoundation.NetStandard.Opc.Ua.Mcp.Robotics", true), ("OPCFoundation.NetStandard.Opc.Ua.Mcp.Vision", true), ("OPCFoundation.NetStandard.Opc.Ua.OpenUsd.Connector", true), @@ -180,7 +180,7 @@ namespace Opc.Ua.Tools.Tests @{ preview = (Get-ExpectedPackageVersion -PackageId 'OPCFoundation.NetStandard.Opc.Ua.XRegistry' -BaseVersion '2.0.0') core = (Get-ExpectedPackageVersion -PackageId 'OPCFoundation.NetStandard.Opc.Ua.Core' -BaseVersion '2.0.0') - previewDev = (Get-ExpectedPackageVersion -PackageId 'OPCFoundation.NetStandard.Opc.Ua.Di' -BaseVersion '2.0.0-preview.9') + previewDev = (Get-ExpectedPackageVersion -PackageId 'OPCFoundation.NetStandard.Opc.Ua.Robotics' -BaseVersion '2.0.0-preview.9') coreDev = (Get-ExpectedPackageVersion -PackageId 'OPCFoundation.NetStandard.Opc.Ua.Core' -BaseVersion '2.0.0-preview.9') } | ConvertTo-Json """).ConfigureAwait(false); @@ -465,9 +465,7 @@ namespace Opc.Ua.Tools.Tests "Opc.Ua.Redundancy", "Opc.Ua.Positioning", "Opc.Ua.OpenUsd", - "Opc.Ua.ISA95", "Opc.Ua.AI", - "Opc.Ua.Di", "Opc.Ua.Mcp.Robotics", "Opc.Ua.Mcp.Vision", "Opc.Ua.OpenUsd.Connector", diff --git a/version.targets b/version.targets index 6a4a1430fc..992f34bfb1 100644 --- a/version.targets +++ b/version.targets @@ -17,9 +17,7 @@ <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.Redundancy' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.Redundancy.'))">true <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.Positioning' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.Positioning.'))">true <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.OpenUsd' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.OpenUsd.'))">true - <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.ISA95' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.ISA95.'))">true <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.AI' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.AI.'))">true - <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.Di' OR $([System.String]::Copy('$(_PreviewPackageBaseId)').StartsWith('$(PackagePrefix).Opc.Ua.Di.'))">true <_IsPreviewPackage Condition="'$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.Mcp.Robotics' OR '$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.Mcp.Vision' OR '$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.OpenUsd.Connector' OR '$(_PreviewPackageBaseId)' == '$(PackagePrefix).Opc.Ua.OpenUsd.Connector.Viewer'">true