From 30a2104fa53db499fdb94d57f5a1c2511284020f Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 26 May 2026 03:44:56 -0400 Subject: [PATCH] feat(scaffold): introduce 8 v2 component projects Adds the empty project skeletons that subsequent v2 tasks fill in: src/Core/ZB.MOM.WW.OtOpcUa.Commons (types, interfaces, message contracts) src/Core/ZB.MOM.WW.OtOpcUa.Cluster (Akka.Hosting + cluster wiring) src/Server/ZB.MOM.WW.OtOpcUa.Security (cookie+JWT auth, LDAP) src/Server/ZB.MOM.WW.OtOpcUa.ControlPlane (admin-role cluster singletons) src/Server/ZB.MOM.WW.OtOpcUa.Runtime (per-node driver actors) src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer (OPC UA SDK application host) src/Server/ZB.MOM.WW.OtOpcUa.AdminUI (Razor class library) src/Server/ZB.MOM.WW.OtOpcUa.Host (single fused web binary) Each project sets TreatWarningsAsErrors=true in its own csproj (per the Directory.Build.props deviation note in the previous commit). NuGetAuditSuppress entries cover transitive vulnerability advisories the new strictness surfaces: - GHSA-g94r-2vxg-569j (OpenTelemetry.Api 1.9.0 via Akka.Cluster.Hosting/Tools) - GHSA-h958-fxgg-g7w3 (Opc.Ua.Core 1.5.374.126 via OpcUaServer) - GHSA-37gx-xxp4-5rgx + GHSA-w3x6-4m5h-cxqf (legacy advisories already accepted) OpcUaServer pins OPCFoundation.NetStandard.Opc.Ua.Configuration to 1.5.374.126 via VersionOverride to match Opc.Ua.Server's transitive Opc.Ua.Core (same constraint as the legacy Server project). Runtime does NOT project-reference any concrete Driver.* assemblies; drivers load reflectively at runtime (Phase 6). Runtime gets the IDriver contract through Core.Abstractions instead. Host's Microsoft.Extensions.Hosting.WindowsServices is conditional on the Windows OS so the project builds on macOS dev machines. Build verification: dotnet build -> 438 warnings (all pre-existing xUnit1051 in legacy Server.Tests/Admin.Tests), 0 errors. Closes Task 9 (build green smoke check, no separate commit). --- ZB.MOM.WW.OtOpcUa.slnx | 8 +++++ .../ZB.MOM.WW.OtOpcUa.Cluster.csproj | 28 +++++++++++++++ .../Interfaces/.gitkeep | 0 .../Messages/.gitkeep | 0 .../ZB.MOM.WW.OtOpcUa.Commons/Types/.gitkeep | 0 .../ZB.MOM.WW.OtOpcUa.Commons.csproj | 12 +++++++ .../ZB.MOM.WW.OtOpcUa.AdminUI.csproj | 25 +++++++++++++ .../ZB.MOM.WW.OtOpcUa.ControlPlane.csproj | 29 +++++++++++++++ src/Server/ZB.MOM.WW.OtOpcUa.Host/Program.cs | 4 +++ .../Properties/launchSettings.json | 13 +++++++ .../ZB.MOM.WW.OtOpcUa.Host.csproj | 33 +++++++++++++++++ .../ZB.MOM.WW.OtOpcUa.Host/appsettings.json | 1 + .../ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj | 29 +++++++++++++++ .../ZB.MOM.WW.OtOpcUa.Runtime.csproj | 36 +++++++++++++++++++ .../ZB.MOM.WW.OtOpcUa.Security.csproj | 24 +++++++++++++ 15 files changed, 242 insertions(+) create mode 100644 src/Core/ZB.MOM.WW.OtOpcUa.Cluster/ZB.MOM.WW.OtOpcUa.Cluster.csproj create mode 100644 src/Core/ZB.MOM.WW.OtOpcUa.Commons/Interfaces/.gitkeep create mode 100644 src/Core/ZB.MOM.WW.OtOpcUa.Commons/Messages/.gitkeep create mode 100644 src/Core/ZB.MOM.WW.OtOpcUa.Commons/Types/.gitkeep create mode 100644 src/Core/ZB.MOM.WW.OtOpcUa.Commons/ZB.MOM.WW.OtOpcUa.Commons.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/ZB.MOM.WW.OtOpcUa.AdminUI.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.ControlPlane/ZB.MOM.WW.OtOpcUa.ControlPlane.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Host/Program.cs create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Host/Properties/launchSettings.json create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Host/ZB.MOM.WW.OtOpcUa.Host.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Host/appsettings.json create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Runtime/ZB.MOM.WW.OtOpcUa.Runtime.csproj create mode 100644 src/Server/ZB.MOM.WW.OtOpcUa.Security/ZB.MOM.WW.OtOpcUa.Security.csproj diff --git a/ZB.MOM.WW.OtOpcUa.slnx b/ZB.MOM.WW.OtOpcUa.slnx index 49a09fd..d43c521 100644 --- a/ZB.MOM.WW.OtOpcUa.slnx +++ b/ZB.MOM.WW.OtOpcUa.slnx @@ -2,6 +2,8 @@ + + @@ -10,6 +12,12 @@ + + + + + + diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Cluster/ZB.MOM.WW.OtOpcUa.Cluster.csproj b/src/Core/ZB.MOM.WW.OtOpcUa.Cluster/ZB.MOM.WW.OtOpcUa.Cluster.csproj new file mode 100644 index 0000000..942f1bd --- /dev/null +++ b/src/Core/ZB.MOM.WW.OtOpcUa.Cluster/ZB.MOM.WW.OtOpcUa.Cluster.csproj @@ -0,0 +1,28 @@ + + + + ZB.MOM.WW.OtOpcUa.Cluster + true + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Interfaces/.gitkeep b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Interfaces/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Messages/.gitkeep b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Messages/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Types/.gitkeep b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/Types/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Core/ZB.MOM.WW.OtOpcUa.Commons/ZB.MOM.WW.OtOpcUa.Commons.csproj b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/ZB.MOM.WW.OtOpcUa.Commons.csproj new file mode 100644 index 0000000..e92789a --- /dev/null +++ b/src/Core/ZB.MOM.WW.OtOpcUa.Commons/ZB.MOM.WW.OtOpcUa.Commons.csproj @@ -0,0 +1,12 @@ + + + + ZB.MOM.WW.OtOpcUa.Commons + true + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/ZB.MOM.WW.OtOpcUa.AdminUI.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/ZB.MOM.WW.OtOpcUa.AdminUI.csproj new file mode 100644 index 0000000..d2d8acf --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/ZB.MOM.WW.OtOpcUa.AdminUI.csproj @@ -0,0 +1,25 @@ + + + + ZB.MOM.WW.OtOpcUa.AdminUI + true + true + + + + + + + + + + + + + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.ControlPlane/ZB.MOM.WW.OtOpcUa.ControlPlane.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.ControlPlane/ZB.MOM.WW.OtOpcUa.ControlPlane.csproj new file mode 100644 index 0000000..2ec6399 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.ControlPlane/ZB.MOM.WW.OtOpcUa.ControlPlane.csproj @@ -0,0 +1,29 @@ + + + + ZB.MOM.WW.OtOpcUa.ControlPlane + true + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Host/Program.cs b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Program.cs new file mode 100644 index 0000000..404d207 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Program.cs @@ -0,0 +1,4 @@ +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); +app.MapGet("/", () => "OtOpcUa.Host scaffold"); +await app.RunAsync(); diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Host/Properties/launchSettings.json b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Properties/launchSettings.json new file mode 100644 index 0000000..0af0ed7 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Host/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "OtOpcUa.Host": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:9000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Host/ZB.MOM.WW.OtOpcUa.Host.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.Host/ZB.MOM.WW.OtOpcUa.Host.csproj new file mode 100644 index 0000000..f251e81 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Host/ZB.MOM.WW.OtOpcUa.Host.csproj @@ -0,0 +1,33 @@ + + + + ZB.MOM.WW.OtOpcUa.Host + OtOpcUa.Host + zb-mom-ww-otopcua-host + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Host/appsettings.json b/src/Server/ZB.MOM.WW.OtOpcUa.Host/appsettings.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Host/appsettings.json @@ -0,0 +1 @@ +{} diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj new file mode 100644 index 0000000..bece604 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer/ZB.MOM.WW.OtOpcUa.OpcUaServer.csproj @@ -0,0 +1,29 @@ + + + + ZB.MOM.WW.OtOpcUa.OpcUaServer + true + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/ZB.MOM.WW.OtOpcUa.Runtime.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/ZB.MOM.WW.OtOpcUa.Runtime.csproj new file mode 100644 index 0000000..2e4ca60 --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Runtime/ZB.MOM.WW.OtOpcUa.Runtime.csproj @@ -0,0 +1,36 @@ + + + + ZB.MOM.WW.OtOpcUa.Runtime + true + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.Security/ZB.MOM.WW.OtOpcUa.Security.csproj b/src/Server/ZB.MOM.WW.OtOpcUa.Security/ZB.MOM.WW.OtOpcUa.Security.csproj new file mode 100644 index 0000000..184e71b --- /dev/null +++ b/src/Server/ZB.MOM.WW.OtOpcUa.Security/ZB.MOM.WW.OtOpcUa.Security.csproj @@ -0,0 +1,24 @@ + + + + ZB.MOM.WW.OtOpcUa.Security + true + + + + + + + + + + + + + + + + + + +