Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.

This commit is contained in:
StellaOps Bot
2025-12-26 21:54:17 +02:00
parent 335ff7da16
commit c2b9cd8d1f
3717 changed files with 264714 additions and 48202 deletions

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" ?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\StellaOps.TaskRunner.Storage.Postgres\StellaOps.TaskRunner.Storage.Postgres.csproj" />
<ProjectReference Include="..\StellaOps.TaskRunner\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
<ProjectReference Include="..\..\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj" />
<ProjectReference Include="../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,12 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>StellaOps.TaskRunner.Storage.Postgres</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../StellaOps.TaskRunner/StellaOps.TaskRunner.Core/StellaOps.TaskRunner.Core.csproj" />
<ProjectReference Include="../../__Libraries/StellaOps.Infrastructure.Postgres/StellaOps.Infrastructure.Postgres.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,99 +1,245 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner", "StellaOps.TaskRunner", "{ACACD739-950B-C891-6A12-926A82053571}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Core", "StellaOps.TaskRunner\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj", "{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Infrastructure", "StellaOps.TaskRunner\StellaOps.TaskRunner.Infrastructure\StellaOps.TaskRunner.Infrastructure.csproj", "{4952F6C0-33B4-41A7-8E9D-3235227C8C57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Tests", "StellaOps.TaskRunner\StellaOps.TaskRunner.Tests\StellaOps.TaskRunner.Tests.csproj", "{F12428B3-E106-4021-AE80-BD058C72254B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.WebService", "StellaOps.TaskRunner\StellaOps.TaskRunner.WebService\StellaOps.TaskRunner.WebService.csproj", "{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Worker", "StellaOps.TaskRunner\StellaOps.TaskRunner.Worker\StellaOps.TaskRunner.Worker.csproj", "{2A68B840-7D42-4F0F-839C-96BEB46417D6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|x64.ActiveCfg = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|x64.Build.0 = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Debug|x86.Build.0 = Debug|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|Any CPU.Build.0 = Release|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|x64.ActiveCfg = Release|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|x64.Build.0 = Release|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|x86.ActiveCfg = Release|Any CPU
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5}.Release|x86.Build.0 = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|x64.ActiveCfg = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|x64.Build.0 = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|x86.ActiveCfg = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Debug|x86.Build.0 = Debug|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|Any CPU.Build.0 = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|x64.ActiveCfg = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|x64.Build.0 = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|x86.ActiveCfg = Release|Any CPU
{4952F6C0-33B4-41A7-8E9D-3235227C8C57}.Release|x86.Build.0 = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|x64.ActiveCfg = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|x64.Build.0 = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|x86.ActiveCfg = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Debug|x86.Build.0 = Debug|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|Any CPU.Build.0 = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|x64.ActiveCfg = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|x64.Build.0 = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|x86.ActiveCfg = Release|Any CPU
{F12428B3-E106-4021-AE80-BD058C72254B}.Release|x86.Build.0 = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|x64.ActiveCfg = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|x64.Build.0 = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|x86.ActiveCfg = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Debug|x86.Build.0 = Debug|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|Any CPU.Build.0 = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|x64.ActiveCfg = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|x64.Build.0 = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|x86.ActiveCfg = Release|Any CPU
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC}.Release|x86.Build.0 = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|x64.Build.0 = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Debug|x86.Build.0 = Debug|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|Any CPU.Build.0 = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|x64.ActiveCfg = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|x64.Build.0 = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|x86.ActiveCfg = Release|Any CPU
{2A68B840-7D42-4F0F-839C-96BEB46417D6}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{C2A829A6-4563-4E00-A4FA-A42AD564D5D5} = {ACACD739-950B-C891-6A12-926A82053571}
{4952F6C0-33B4-41A7-8E9D-3235227C8C57} = {ACACD739-950B-C891-6A12-926A82053571}
{F12428B3-E106-4021-AE80-BD058C72254B} = {ACACD739-950B-C891-6A12-926A82053571}
{4F5327F5-FDDE-41BB-91C8-A3426DF012CC} = {ACACD739-950B-C891-6A12-926A82053571}
{2A68B840-7D42-4F0F-839C-96BEB46417D6} = {ACACD739-950B-C891-6A12-926A82053571}
EndGlobalSection
EndGlobal
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner", "StellaOps.TaskRunner", "{2423A263-9B5F-1503-499B-7A9878650B46}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Client", "StellaOps.TaskRunner.Client", "{6A46DD4D-9BBF-3A55-C84F-CF0C9DC6774A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Core", "StellaOps.TaskRunner.Core", "{4C0ACC1C-0EDA-0000-B7BA-B923FEC21B53}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Infrastructure", "StellaOps.TaskRunner.Infrastructure", "{EC56C2AE-B1BF-CE5F-A835-01E8D9C7C0C4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Tests", "StellaOps.TaskRunner.Tests", "{72A1ED58-B394-FDAE-693D-B2B9B0849A17}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.WebService", "StellaOps.TaskRunner.WebService", "{4C670CDC-F310-C940-A048-6311CA9C4B21}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Worker", "StellaOps.TaskRunner.Worker", "{3C20D4AA-1D70-9348-5DD5-9F0A997B1D63}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__External", "__External", "{5B52EF8A-3661-DCFF-797D-BC4D6AC60BDA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AirGap", "AirGap", "{F310596E-88BB-9E54-885E-21C61971917E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.AirGap.Policy", "StellaOps.AirGap.Policy", "{D9492ED1-A812-924B-65E4-F518592B49BB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.AirGap.Policy", "StellaOps.AirGap.Policy", "{3823DE1E-2ACE-C956-99E1-00DB786D9E1D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Router", "Router", "{FC018E5B-1E2F-DE19-1E97-0C845058C469}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{1BE5B76C-B486-560B-6CB2-44C6537249AA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Microservice", "StellaOps.Microservice", "{3DE1DCDC-C845-4AC7-7B66-34B0A9E8626B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Microservice.AspNetCore", "StellaOps.Microservice.AspNetCore", "{6FA01E92-606B-0CB8-8583-6F693A903CFC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Router.AspNet", "StellaOps.Router.AspNet", "{A5994E92-7E0E-89FE-5628-DE1A0176B8BA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Router.Common", "StellaOps.Router.Common", "{54C11B29-4C54-7255-AB44-BEB63AF9BD1F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Telemetry", "Telemetry", "{E9A667F9-9627-4297-EF5E-0333593FDA14}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Telemetry.Core", "StellaOps.Telemetry.Core", "{B81E0B20-6C85-AC09-1DB6-5BD6CBB8AA62}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Telemetry.Core", "StellaOps.Telemetry.Core", "{74C64C1F-14F4-7B75-C354-9F252494A758}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{1345DD29-BB3A-FB5F-4B3D-E29F6045A27A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Canonical.Json", "StellaOps.Canonical.Json", "{79E122F4-2325-3E92-438E-5825A307B594}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.EfCore", "StellaOps.Infrastructure.EfCore", "{FCD529E0-DD17-6587-B29C-12D425C0AD0C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.Postgres", "StellaOps.Infrastructure.Postgres", "{61B23570-4F2D-B060-BE1F-37995682E494}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TestKit", "StellaOps.TestKit", "{8380A20C-A5B8-EE91-1A58-270323688CB9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{90659617-4DF7-809A-4E5B-29BB5A98E8E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{AB8B269C-5A2A-A4B8-0488-B5F81E55B4D9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.Postgres.Testing", "StellaOps.Infrastructure.Postgres.Testing", "{CEDC2447-F717-3C95-7E08-F214D575A7B7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{A5C98087-E847-D2C4-2143-20869479839D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Persistence", "StellaOps.TaskRunner.Persistence", "{828E67E9-CACC-0446-1C7F-BC87FB23428D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{BB76B5A5-14BA-E317-828D-110B711D71F5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TaskRunner.Persistence.Tests", "StellaOps.TaskRunner.Persistence.Tests", "{856283E2-ADD2-2497-7109-363FB58E022B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.AirGap.Policy", "E:\dev\git.stella-ops.org\src\AirGap\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy.csproj", "{AD31623A-BC43-52C2-D906-AC1D8784A541}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Canonical.Json", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Canonical.Json\StellaOps.Canonical.Json.csproj", "{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.EfCore", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Infrastructure.EfCore\StellaOps.Infrastructure.EfCore.csproj", "{A63897D9-9531-989B-7309-E384BCFC2BB9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.Postgres", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Infrastructure.Postgres\StellaOps.Infrastructure.Postgres.csproj", "{8C594D82-3463-3367-4F06-900AC707753D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.Postgres.Testing", "E:\dev\git.stella-ops.org\src\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj", "{52F400CD-D473-7A1F-7986-89011CD2A887}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Microservice", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Microservice\StellaOps.Microservice.csproj", "{BAD08D96-A80A-D27F-5D9C-656AEEB3D568}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Microservice.AspNetCore", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Microservice.AspNetCore\StellaOps.Microservice.AspNetCore.csproj", "{F63694F1-B56D-6E72-3F5D-5D38B1541F0F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Router.AspNet", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj", "{79104479-B087-E5D0-5523-F1803282A246}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Router.Common", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Router.Common\StellaOps.Router.Common.csproj", "{F17A6F0B-3120-2BA9-84D8-5F8BA0B9705D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Client", "StellaOps.TaskRunner\StellaOps.TaskRunner.Client\StellaOps.TaskRunner.Client.csproj", "{354964EE-A866-C110-B5F7-A75EF69E0F9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Core", "StellaOps.TaskRunner\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj", "{33D54B61-15BD-DE57-D0A6-3D21BD838893}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Infrastructure", "StellaOps.TaskRunner\StellaOps.TaskRunner.Infrastructure\StellaOps.TaskRunner.Infrastructure.csproj", "{6FC9CED3-E386-2677-703F-D14FB9A986A6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Persistence", "__Libraries\StellaOps.TaskRunner.Persistence\StellaOps.TaskRunner.Persistence.csproj", "{3FEA0432-5B0B-94CC-A61B-D691CC525087}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Persistence.Tests", "__Tests\StellaOps.TaskRunner.Persistence.Tests\StellaOps.TaskRunner.Persistence.Tests.csproj", "{CB7BA5B1-C704-EC7B-F299-B7BA9C74AE08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Tests", "StellaOps.TaskRunner\StellaOps.TaskRunner.Tests\StellaOps.TaskRunner.Tests.csproj", "{8A278B7C-E423-981F-AA27-283AF2E17698}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.WebService", "StellaOps.TaskRunner\StellaOps.TaskRunner.WebService\StellaOps.TaskRunner.WebService.csproj", "{9D21040D-1B36-F047-A8D9-49686E6454B7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Worker", "StellaOps.TaskRunner\StellaOps.TaskRunner.Worker\StellaOps.TaskRunner.Worker.csproj", "{01815E3E-DBA9-1B8E-CC8D-2C88939EE1E9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Telemetry.Core", "E:\dev\git.stella-ops.org\src\Telemetry\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core.csproj", "{8CD19568-1638-B8F6-8447-82CFD4F17ADF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TestKit", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.TestKit\StellaOps.TestKit.csproj", "{AF043113-CCE3-59C1-DF71-9804155F26A8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AD31623A-BC43-52C2-D906-AC1D8784A541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AD31623A-BC43-52C2-D906-AC1D8784A541}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AD31623A-BC43-52C2-D906-AC1D8784A541}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AD31623A-BC43-52C2-D906-AC1D8784A541}.Release|Any CPU.Build.0 = Release|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Release|Any CPU.Build.0 = Release|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Release|Any CPU.Build.0 = Release|Any CPU

View File

@@ -9,8 +9,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" />
<PackageReference Include="Microsoft.Extensions.Options" />
</ItemGroup>
</Project>

View File

@@ -6,11 +6,11 @@ public static class TaskRunnerTelemetry
{
public const string MeterName = "stellaops.taskrunner";
internal static readonly Meter Meter = new(MeterName);
internal static readonly Histogram<double> StepDurationMs =
public static readonly Meter Meter = new(MeterName);
public static readonly Histogram<double> StepDurationMs =
Meter.CreateHistogram<double>("taskrunner.step.duration.ms", unit: "ms");
internal static readonly Counter<long> StepRetryCount =
public static readonly Counter<long> StepRetryCount =
Meter.CreateCounter<long>("taskrunner.step.retry.count");
internal static readonly UpDownCounter<long> RunningSteps =
public static readonly UpDownCounter<long> RunningSteps =
Meter.CreateUpDownCounter<long>("taskrunner.steps.running");
}

View File

@@ -16,8 +16,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
<PackageReference Include="YamlDotNet" Version="13.7.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<PackageReference Include="YamlDotNet" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<ProjectReference Include="..\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
</ItemGroup>

View File

@@ -71,7 +71,7 @@ public sealed class ApiDeprecationTests
NullLogger<LoggingDeprecationNotificationService>.Instance,
optionsMonitor);
var upcoming = await service.GetUpcomingDeprecationsAsync(90, TestContext.Current.CancellationToken);
var upcoming = await service.GetUpcomingDeprecationsAsync(90, CancellationToken.None);
Assert.Single(upcoming);
Assert.Equal("/v1/soon/*", upcoming[0].EndpointPath);
@@ -97,7 +97,7 @@ public sealed class ApiDeprecationTests
NullLogger<LoggingDeprecationNotificationService>.Instance,
optionsMonitor);
var upcoming = await service.GetUpcomingDeprecationsAsync(90, TestContext.Current.CancellationToken);
var upcoming = await service.GetUpcomingDeprecationsAsync(90, CancellationToken.None);
Assert.Equal(3, upcoming.Count);
Assert.Equal("/v1/first/*", upcoming[0].EndpointPath);

View File

@@ -92,7 +92,7 @@ public sealed class BundleImportEvidenceTests
var evidence = CreateTestEvidence();
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
var result = await service.CaptureAsync(evidence, CancellationToken.None);
Assert.True(result.Success);
Assert.NotNull(result.Snapshot);
@@ -111,7 +111,7 @@ public sealed class BundleImportEvidenceTests
var evidence = CreateTestEvidence();
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
var result = await service.CaptureAsync(evidence, CancellationToken.None);
Assert.True(result.Success);
var snapshot = result.Snapshot!;
@@ -136,7 +136,7 @@ public sealed class BundleImportEvidenceTests
var evidence = CreateTestEvidence();
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
var result = await service.CaptureAsync(evidence, CancellationToken.None);
Assert.True(result.Success);
var snapshot = result.Snapshot!;
@@ -164,7 +164,7 @@ public sealed class BundleImportEvidenceTests
var evidence = CreateTestEvidence();
var result = await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
var result = await service.CaptureAsync(evidence, CancellationToken.None);
Assert.True(result.Success);
Assert.Equal(1, timelineSink.Count);
@@ -182,9 +182,9 @@ public sealed class BundleImportEvidenceTests
NullLogger<BundleImportEvidenceService>.Instance);
var evidence = CreateTestEvidence();
await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
await service.CaptureAsync(evidence, CancellationToken.None);
var retrieved = await service.GetAsync(evidence.JobId, TestContext.Current.CancellationToken);
var retrieved = await service.GetAsync(evidence.JobId, CancellationToken.None);
Assert.NotNull(retrieved);
Assert.Equal(evidence.JobId, retrieved.JobId);
@@ -200,7 +200,7 @@ public sealed class BundleImportEvidenceTests
store,
NullLogger<BundleImportEvidenceService>.Instance);
var retrieved = await service.GetAsync("non-existent-job", TestContext.Current.CancellationToken);
var retrieved = await service.GetAsync("non-existent-job", CancellationToken.None);
Assert.Null(retrieved);
}
@@ -215,7 +215,7 @@ public sealed class BundleImportEvidenceTests
NullLogger<BundleImportEvidenceService>.Instance);
var evidence = CreateTestEvidence();
await service.CaptureAsync(evidence, TestContext.Current.CancellationToken);
await service.CaptureAsync(evidence, CancellationToken.None);
var outputPath = Path.Combine(Path.GetTempPath(), $"evidence-{Guid.NewGuid():N}.json");
try
@@ -223,7 +223,7 @@ public sealed class BundleImportEvidenceTests
var result = await service.ExportToPortableBundleAsync(
evidence.JobId,
outputPath,
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.True(result.Success);
Assert.Equal(outputPath, result.OutputPath);
@@ -254,7 +254,7 @@ public sealed class BundleImportEvidenceTests
var result = await service.ExportToPortableBundleAsync(
"non-existent-job",
outputPath,
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(result.Success);
Assert.Contains("No evidence found", result.Error);

View File

@@ -1,4 +1,4 @@
using System.Text.Json.Nodes;
using System.Text.Json.Nodes;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using StellaOps.TaskRunner.Core.Configuration;
@@ -18,7 +18,7 @@ public sealed class BundleIngestionStepExecutorTests
{
using var temp = new TempDirectory();
var source = Path.Combine(temp.Path, "bundle.tgz");
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
await File.WriteAllTextAsync(source, "bundle-data", ct);
var checksum = "b9c72134b48cdc15e7a47f2476a41612d2084b763bea0575f5600b22041db7dc"; // sha256 of "bundle-data"
@@ -50,7 +50,7 @@ public sealed class BundleIngestionStepExecutorTests
{
using var temp = new TempDirectory();
var source = Path.Combine(temp.Path, "bundle.tgz");
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
await File.WriteAllTextAsync(source, "bundle-data", ct);
var options = Options.Create(new PackRunWorkerOptions { ArtifactsPath = temp.Path });
@@ -73,9 +73,8 @@ public sealed class BundleIngestionStepExecutorTests
public async Task ExecuteAsync_MissingChecksum_Fails()
{
using var temp = new TempDirectory();
using StellaOps.TestKit;
var source = Path.Combine(temp.Path, "bundle.tgz");
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
await File.WriteAllTextAsync(source, "bundle-data", ct);
var options = Options.Create(new PackRunWorkerOptions { ArtifactsPath = temp.Path });
@@ -96,7 +95,7 @@ using StellaOps.TestKit;
[Fact]
public async Task ExecuteAsync_UnknownUses_NoOpSuccess()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var executor = new BundleIngestionStepExecutor(
Options.Create(new PackRunWorkerOptions { ArtifactsPath = Path.GetTempPath() }),
NullLogger<BundleIngestionStepExecutor>.Instance);

View File

@@ -1,4 +1,4 @@
using System.Text.Json;
using System.Text.Json;
using StellaOps.TaskRunner.Infrastructure.Execution;
@@ -12,7 +12,7 @@ public sealed class FilesystemPackRunArtifactReaderTests
public async Task ListAsync_ReturnsEmpty_WhenManifestMissing()
{
using var temp = new TempDir();
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var reader = new FilesystemPackRunArtifactReader(temp.Path);
var results = await reader.ListAsync("run-absent", ct);
@@ -25,11 +25,10 @@ public sealed class FilesystemPackRunArtifactReaderTests
public async Task ListAsync_ParsesManifestAndSortsByName()
{
using var temp = new TempDir();
using StellaOps.TestKit;
var runId = "run-1";
var manifestPath = Path.Combine(temp.Path, "run-1", "artifact-manifest.json");
Directory.CreateDirectory(Path.GetDirectoryName(manifestPath)!);
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var manifest = new
{

View File

@@ -23,21 +23,21 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
public async Task CopiesFileOutputs()
{
var sourceFile = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():n}.txt");
await File.WriteAllTextAsync(sourceFile, "artifact-content", TestContext.Current.CancellationToken);
await File.WriteAllTextAsync(sourceFile, "artifact-content", CancellationToken.None);
var uploader = CreateUploader();
var output = CreateFileOutput("bundle", sourceFile);
var context = CreateContext();
var state = CreateState(context);
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
var runPath = Path.Combine(artifactsRoot, context.RunId);
var filesDirectory = Path.Combine(runPath, "files");
var copiedFiles = Directory.GetFiles(filesDirectory);
Assert.Single(copiedFiles);
Assert.Equal("bundle.txt", Path.GetFileName(copiedFiles[0]));
Assert.Equal("artifact-content", await File.ReadAllTextAsync(copiedFiles[0], TestContext.Current.CancellationToken));
Assert.Equal("artifact-content", await File.ReadAllTextAsync(copiedFiles[0], CancellationToken.None));
var manifest = await ReadManifestAsync(runPath);
Assert.Single(manifest.Outputs);
@@ -54,7 +54,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
var context = CreateContext();
var state = CreateState(context);
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
var manifest = await ReadManifestAsync(Path.Combine(artifactsRoot, context.RunId));
Assert.Equal("missing", manifest.Outputs[0].Status);
@@ -69,7 +69,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
var context = CreateContext();
var state = CreateState(context);
await uploader.UploadAsync(context, state, new[] { output }, TestContext.Current.CancellationToken);
await uploader.UploadAsync(context, state, new[] { output }, CancellationToken.None);
var expressionPath = Path.Combine(artifactsRoot, context.RunId, "expressions", "metadata.json");
Assert.True(File.Exists(expressionPath));
@@ -124,7 +124,7 @@ public sealed class FilesystemPackRunArtifactUploaderTests : IDisposable
private static async Task<ArtifactManifestModel> ReadManifestAsync(string runPath)
{
var json = await File.ReadAllTextAsync(Path.Combine(runPath, "artifact-manifest.json"), TestContext.Current.CancellationToken);
var json = await File.ReadAllTextAsync(Path.Combine(runPath, "artifact-manifest.json"), CancellationToken.None);
return JsonSerializer.Deserialize<ArtifactManifestModel>(json, new JsonSerializerOptions(JsonSerializerDefaults.Web))!;
}

View File

@@ -14,7 +14,7 @@ public sealed class FilesystemPackRunDispatcherTests
var root = Path.Combine(Path.GetTempPath(), "StellaOps_TaskRunnerTests", Guid.NewGuid().ToString("n"));
Directory.CreateDirectory(root);
var cancellationToken = TestContext.Current.CancellationToken;
var cancellationToken = CancellationToken.None;
var queuePath = Path.Combine(root, "queue");
var archivePath = Path.Combine(root, "archive");

View File

@@ -38,7 +38,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var result = await service.GenerateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.NotNull(result.Attestation);
@@ -74,7 +74,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var result = await service.GenerateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.NotNull(result.Attestation);
@@ -112,7 +112,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
await service.GenerateAsync(request, TestContext.Current.CancellationToken);
await service.GenerateAsync(request, CancellationToken.None);
Assert.Equal(1, timelineSink.Count);
var evt = timelineSink.GetEvents()[0];
@@ -148,7 +148,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var genResult = await service.GenerateAsync(request, CancellationToken.None);
Assert.NotNull(genResult.Attestation);
var verifyResult = await service.VerifyAsync(
@@ -158,7 +158,7 @@ public sealed class PackRunAttestationTests
VerifySignature: true,
VerifySubjects: true,
CheckRevocation: true),
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.True(verifyResult.Valid);
Assert.Equal(PackRunSignatureVerificationStatus.Valid, verifyResult.SignatureStatus);
@@ -195,7 +195,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var genResult = await service.GenerateAsync(request, CancellationToken.None);
Assert.NotNull(genResult.Attestation);
// Verify with different expected subjects
@@ -211,7 +211,7 @@ public sealed class PackRunAttestationTests
VerifySignature: false,
VerifySubjects: true,
CheckRevocation: false),
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(verifyResult.Valid);
Assert.Equal(PackRunSubjectVerificationStatus.Missing, verifyResult.SubjectStatus);
@@ -248,7 +248,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var genResult = await service.GenerateAsync(request, CancellationToken.None);
Assert.NotNull(genResult.Attestation);
// Revoke the attestation
@@ -256,7 +256,7 @@ public sealed class PackRunAttestationTests
genResult.Attestation.AttestationId,
PackRunAttestationStatus.Revoked,
"Compromised key",
TestContext.Current.CancellationToken);
CancellationToken.None);
var verifyResult = await service.VerifyAsync(
new PackRunAttestationVerificationRequest(
@@ -265,7 +265,7 @@ public sealed class PackRunAttestationTests
VerifySignature: false,
VerifySubjects: false,
CheckRevocation: true),
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(verifyResult.Valid);
Assert.Equal(PackRunRevocationStatus.Revoked, verifyResult.RevocationStatus);
@@ -287,7 +287,7 @@ public sealed class PackRunAttestationTests
VerifySignature: false,
VerifySubjects: false,
CheckRevocation: false),
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(verifyResult.Valid);
Assert.NotNull(verifyResult.Errors);
@@ -321,10 +321,10 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
await service.GenerateAsync(request, TestContext.Current.CancellationToken);
await service.GenerateAsync(request, CancellationToken.None);
}
var attestations = await service.ListByRunAsync("tenant-1", "run-007", TestContext.Current.CancellationToken);
var attestations = await service.ListByRunAsync("tenant-1", "run-007", CancellationToken.None);
Assert.Equal(2, attestations.Count);
Assert.All(attestations, a => Assert.Equal("run-007", a.RunId));
@@ -354,10 +354,10 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var genResult = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var genResult = await service.GenerateAsync(request, CancellationToken.None);
Assert.NotNull(genResult.Attestation);
var envelope = await service.GetEnvelopeAsync(genResult.Attestation.AttestationId, TestContext.Current.CancellationToken);
var envelope = await service.GetEnvelopeAsync(genResult.Attestation.AttestationId, CancellationToken.None);
Assert.NotNull(envelope);
Assert.Equal(PackRunDsseEnvelope.InTotoPayloadType, envelope.PayloadType);
@@ -457,7 +457,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: null,
Metadata: null);
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var result = await service.GenerateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.NotNull(result.Attestation);
@@ -496,7 +496,7 @@ public sealed class PackRunAttestationTests
ResolvedDependencies: dependencies,
Metadata: null);
var result = await service.GenerateAsync(request, TestContext.Current.CancellationToken);
var result = await service.GenerateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.NotNull(result.Attestation);

View File

@@ -251,8 +251,8 @@ public sealed class PackRunEvidenceSnapshotTests
new List<PackRunEvidenceMaterial>());
// Act
await store.StoreAsync(snapshot, TestContext.Current.CancellationToken);
var retrieved = await store.GetAsync(snapshot.SnapshotId, TestContext.Current.CancellationToken);
await store.StoreAsync(snapshot, CancellationToken.None);
var retrieved = await store.GetAsync(snapshot.SnapshotId, CancellationToken.None);
// Assert
Assert.NotNull(retrieved);
@@ -268,7 +268,7 @@ public sealed class PackRunEvidenceSnapshotTests
var store = new InMemoryPackRunEvidenceStore();
// Act
var result = await store.GetAsync(Guid.NewGuid(), TestContext.Current.CancellationToken);
var result = await store.GetAsync(Guid.NewGuid(), CancellationToken.None);
// Assert
Assert.Null(result);
@@ -293,12 +293,12 @@ public sealed class PackRunEvidenceSnapshotTests
PackRunEvidenceSnapshotKind.StepExecution,
new List<PackRunEvidenceMaterial>());
await store.StoreAsync(snapshot1, TestContext.Current.CancellationToken);
await store.StoreAsync(snapshot2, TestContext.Current.CancellationToken);
await store.StoreAsync(otherRunSnapshot, TestContext.Current.CancellationToken);
await store.StoreAsync(snapshot1, CancellationToken.None);
await store.StoreAsync(snapshot2, CancellationToken.None);
await store.StoreAsync(otherRunSnapshot, CancellationToken.None);
// Act
var results = await store.ListByRunAsync(TestTenantId, TestRunId, TestContext.Current.CancellationToken);
var results = await store.ListByRunAsync(TestTenantId, TestRunId, CancellationToken.None);
// Assert
Assert.Equal(2, results.Count);
@@ -324,15 +324,15 @@ public sealed class PackRunEvidenceSnapshotTests
PackRunEvidenceSnapshotKind.ApprovalDecision,
new List<PackRunEvidenceMaterial>());
await store.StoreAsync(stepSnapshot1, TestContext.Current.CancellationToken);
await store.StoreAsync(stepSnapshot2, TestContext.Current.CancellationToken);
await store.StoreAsync(approvalSnapshot, TestContext.Current.CancellationToken);
await store.StoreAsync(stepSnapshot1, CancellationToken.None);
await store.StoreAsync(stepSnapshot2, CancellationToken.None);
await store.StoreAsync(approvalSnapshot, CancellationToken.None);
// Act
var results = await store.ListByKindAsync(
TestTenantId, TestRunId,
PackRunEvidenceSnapshotKind.StepExecution,
TestContext.Current.CancellationToken);
CancellationToken.None);
// Assert
Assert.Equal(2, results.Count);
@@ -353,10 +353,10 @@ public sealed class PackRunEvidenceSnapshotTests
TestTenantId, TestRunId, TestPlanHash,
PackRunEvidenceSnapshotKind.RunCompletion, materials);
await store.StoreAsync(snapshot, TestContext.Current.CancellationToken);
await store.StoreAsync(snapshot, CancellationToken.None);
// Act
var result = await store.VerifyAsync(snapshot.SnapshotId, TestContext.Current.CancellationToken);
var result = await store.VerifyAsync(snapshot.SnapshotId, CancellationToken.None);
// Assert
Assert.True(result.Valid);
@@ -373,7 +373,7 @@ public sealed class PackRunEvidenceSnapshotTests
var store = new InMemoryPackRunEvidenceStore();
// Act
var result = await store.VerifyAsync(Guid.NewGuid(), TestContext.Current.CancellationToken);
var result = await store.VerifyAsync(Guid.NewGuid(), CancellationToken.None);
// Assert
Assert.False(result.Valid);
@@ -559,7 +559,7 @@ public sealed class PackRunEvidenceSnapshotTests
// Act
var result = await service.CaptureRunCompletionAsync(
TestTenantId, TestRunId, TestPlanHash, state,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -591,7 +591,7 @@ public sealed class PackRunEvidenceSnapshotTests
var result = await service.CaptureRunCompletionAsync(
TestTenantId, TestRunId, TestPlanHash, state,
transcripts: transcripts,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -618,7 +618,7 @@ public sealed class PackRunEvidenceSnapshotTests
// Act
var result = await service.CaptureStepExecutionAsync(
TestTenantId, TestRunId, TestPlanHash, transcript,
TestContext.Current.CancellationToken);
CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -649,7 +649,7 @@ public sealed class PackRunEvidenceSnapshotTests
// Act
var result = await service.CaptureApprovalDecisionAsync(
TestTenantId, TestRunId, TestPlanHash, approval,
TestContext.Current.CancellationToken);
CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -680,7 +680,7 @@ public sealed class PackRunEvidenceSnapshotTests
// Act
var result = await service.CapturePolicyEvaluationAsync(
TestTenantId, TestRunId, TestPlanHash, evaluation,
TestContext.Current.CancellationToken);
CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -708,7 +708,7 @@ public sealed class PackRunEvidenceSnapshotTests
// Act
await service.CaptureRunCompletionAsync(
TestTenantId, TestRunId, TestPlanHash, state,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
var events = sink.GetEvents();

View File

@@ -26,7 +26,7 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: 60,
RequestedBy: "admin@example.com");
var result = await service.ActivateAsync(request, TestContext.Current.CancellationToken);
var result = await service.ActivateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.True(result.Status.Active);
@@ -54,7 +54,7 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: null,
RequestedBy: null);
var result = await service.ActivateAsync(request, TestContext.Current.CancellationToken);
var result = await service.ActivateAsync(request, CancellationToken.None);
Assert.True(result.Success);
Assert.Null(result.Status.ExpiresAt);
@@ -85,7 +85,7 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: 30,
RequestedBy: null);
await service.ActivateAsync(request, TestContext.Current.CancellationToken);
await service.ActivateAsync(request, CancellationToken.None);
Assert.Equal(1, timelineSink.Count);
var evt = timelineSink.GetEvents()[0];
@@ -111,15 +111,15 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: null,
RequestedBy: null);
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
await service.ActivateAsync(activateRequest, CancellationToken.None);
// Then deactivate
var result = await service.DeactivateAsync("run-004", "Issue resolved", TestContext.Current.CancellationToken);
var result = await service.DeactivateAsync("run-004", "Issue resolved", CancellationToken.None);
Assert.True(result.Success);
Assert.False(result.Status.Active);
var status = await service.GetStatusAsync("run-004", TestContext.Current.CancellationToken);
var status = await service.GetStatusAsync("run-004", CancellationToken.None);
Assert.False(status.Active);
}
@@ -132,7 +132,7 @@ public sealed class PackRunIncidentModeTests
store,
NullLogger<PackRunIncidentModeService>.Instance);
var status = await service.GetStatusAsync("unknown-run", TestContext.Current.CancellationToken);
var status = await service.GetStatusAsync("unknown-run", CancellationToken.None);
Assert.False(status.Active);
Assert.Equal(IncidentEscalationLevel.None, status.Level);
@@ -158,12 +158,12 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: 30,
RequestedBy: null);
await service.ActivateAsync(request, TestContext.Current.CancellationToken);
await service.ActivateAsync(request, CancellationToken.None);
// Advance time past expiration
fakeTime.Advance(TimeSpan.FromMinutes(31));
var status = await service.GetStatusAsync("run-005", TestContext.Current.CancellationToken);
var status = await service.GetStatusAsync("run-005", CancellationToken.None);
Assert.False(status.Active);
}
@@ -189,7 +189,7 @@ public sealed class PackRunIncidentModeTests
TenantId: "tenant-1",
Context: new Dictionary<string, string> { ["step"] = "scan" });
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
Assert.True(result.Success);
Assert.True(result.Status.Active);
@@ -230,7 +230,7 @@ public sealed class PackRunIncidentModeTests
TenantId: "tenant-1",
Context: null);
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
Assert.True(result.Success);
Assert.Equal(expectedLevel, result.Status.Level);
@@ -258,7 +258,7 @@ public sealed class PackRunIncidentModeTests
TenantId: "tenant-1",
Context: null);
var result = await service.HandleSloBreachAsync(breach, TestContext.Current.CancellationToken);
var result = await service.HandleSloBreachAsync(breach, CancellationToken.None);
Assert.False(result.Success);
Assert.Contains("No resource ID", result.Error);
@@ -283,14 +283,14 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: null,
RequestedBy: null);
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
await service.ActivateAsync(activateRequest, CancellationToken.None);
// Escalate to High
var result = await service.EscalateAsync(
"run-escalate",
IncidentEscalationLevel.High,
"Issue is more severe than expected",
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.True(result.Success);
Assert.Equal(IncidentEscalationLevel.High, result.Status.Level);
@@ -310,7 +310,7 @@ public sealed class PackRunIncidentModeTests
"unknown-run",
IncidentEscalationLevel.High,
null,
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(result.Success);
Assert.Contains("not active", result.Error);
@@ -334,13 +334,13 @@ public sealed class PackRunIncidentModeTests
DurationMinutes: null,
RequestedBy: null);
await service.ActivateAsync(activateRequest, TestContext.Current.CancellationToken);
await service.ActivateAsync(activateRequest, CancellationToken.None);
var result = await service.EscalateAsync(
"run-no-deescalate",
IncidentEscalationLevel.Medium, // Lower than High
null,
TestContext.Current.CancellationToken);
CancellationToken.None);
Assert.False(result.Success);
Assert.Contains("Cannot escalate", result.Error);

View File

@@ -1,4 +1,4 @@
using System.Text.Json;
using System.Text.Json;
using System.Text.Json.Nodes;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Core.Execution.Simulation;
@@ -22,7 +22,7 @@ public sealed class PackRunProvenanceWriterTests
var temp = Directory.CreateTempSubdirectory();
try
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var writer = new FilesystemPackRunProvenanceWriter(temp.FullName, new FixedTimeProvider(completedAt));
await writer.WriteAsync(context, state, ct);
@@ -30,7 +30,6 @@ public sealed class PackRunProvenanceWriterTests
Assert.True(File.Exists(path));
using var document = JsonDocument.Parse(await File.ReadAllTextAsync(path, ct));
using StellaOps.TestKit;
var root = document.RootElement;
Assert.Equal("run-test", root.GetProperty("runId").GetString());
Assert.Equal("tenant-alpha", root.GetProperty("tenantId").GetString());

View File

@@ -316,7 +316,7 @@ public sealed class PackRunTimelineEventTests
planHash: TestPlanHash);
// Act
var result = await sink.WriteAsync(evt, TestContext.Current.CancellationToken);
var result = await sink.WriteAsync(evt, CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -338,7 +338,7 @@ public sealed class PackRunTimelineEventTests
occurredAt: DateTimeOffset.UtcNow,
runId: TestRunId,
planHash: TestPlanHash);
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
// Act
await sink.WriteAsync(evt, ct);
@@ -356,7 +356,7 @@ public sealed class PackRunTimelineEventTests
{
// Arrange
var sink = new InMemoryPackRunTimelineEventSink();
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
// Act
var evt1 = PackRunTimelineEvent.Create(
@@ -400,7 +400,7 @@ public sealed class PackRunTimelineEventTests
stepId: $"step-{i}")).ToList();
// Act
var result = await sink.WriteBatchAsync(events, TestContext.Current.CancellationToken);
var result = await sink.WriteBatchAsync(events, CancellationToken.None);
// Assert
Assert.Equal(3, result.Written);
@@ -414,7 +414,7 @@ public sealed class PackRunTimelineEventTests
{
// Arrange
var sink = new InMemoryPackRunTimelineEventSink();
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
await sink.WriteAsync(PackRunTimelineEvent.Create(
tenantId: TestTenantId,
@@ -455,7 +455,7 @@ public sealed class PackRunTimelineEventTests
source: "test",
occurredAt: DateTimeOffset.UtcNow,
runId: TestRunId,
planHash: TestPlanHash), TestContext.Current.CancellationToken);
planHash: TestPlanHash), CancellationToken.None);
// Act
sink.Clear();
@@ -486,7 +486,7 @@ public sealed class PackRunTimelineEventTests
TestRunId,
TestPlanHash,
projectId: TestProjectId,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -513,7 +513,7 @@ public sealed class PackRunTimelineEventTests
TestTenantId,
TestRunId,
TestPlanHash,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -538,7 +538,7 @@ public sealed class PackRunTimelineEventTests
TestRunId,
TestPlanHash,
failureReason: "Step step-001 failed",
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -566,7 +566,7 @@ public sealed class PackRunTimelineEventTests
TestPlanHash,
TestStepId,
attempt: 2,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -595,7 +595,7 @@ public sealed class PackRunTimelineEventTests
TestStepId,
attempt: 1,
durationMs: 123.45,
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -623,7 +623,7 @@ public sealed class PackRunTimelineEventTests
TestStepId,
attempt: 3,
error: "Connection timeout",
cancellationToken: TestContext.Current.CancellationToken);
cancellationToken: CancellationToken.None);
// Assert
Assert.True(result.Success);
@@ -653,7 +653,7 @@ public sealed class PackRunTimelineEventTests
};
// Act
var result = await emitter.EmitBatchAsync(events, TestContext.Current.CancellationToken);
var result = await emitter.EmitBatchAsync(events, CancellationToken.None);
// Assert
Assert.Equal(3, result.Emitted);
@@ -676,7 +676,7 @@ public sealed class PackRunTimelineEventTests
sink,
timeProvider,
NullLogger<PackRunTimelineEventEmitter>.Instance);
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var evt = PackRunTimelineEvent.Create(
TestTenantId,
@@ -717,7 +717,7 @@ public sealed class PackRunTimelineEventTests
TestPlanHash);
// Act
var result = await sink.WriteAsync(evt, TestContext.Current.CancellationToken);
var result = await sink.WriteAsync(evt, CancellationToken.None);
// Assert
Assert.True(result.Success);

View File

@@ -40,7 +40,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: false);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.True(result.Allowed);
Assert.Equal("Pack does not require sealed install", result.Message);
@@ -59,7 +59,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.True(result.Allowed);
Assert.Equal("Enforcement disabled", result.Message);
@@ -78,7 +78,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedInstallViolation, result.ErrorCode);
@@ -117,7 +117,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.True(result.Allowed);
Assert.Equal("Sealed install requirements satisfied", result.Message);
@@ -156,7 +156,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true, requirements);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
@@ -203,7 +203,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true, requirements);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
@@ -245,7 +245,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true, requirements);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
@@ -287,7 +287,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true, requirements);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedRequirementsViolation, result.ErrorCode);
@@ -308,7 +308,7 @@ public sealed class SealedInstallEnforcerTests
var manifest = CreateManifest(sealedInstall: true);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: TestContext.Current.CancellationToken);
var result = await enforcer.EnforceAsync(manifest, cancellationToken: CancellationToken.None);
Assert.False(result.Allowed);
Assert.Equal(SealedInstallErrorCodes.SealedInstallViolation, result.ErrorCode);

View File

@@ -1,22 +1,21 @@
<?xml version="1.0"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseXunitV3>true</UseXunitV3>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseConcelierTestInfra>false</UseConcelierTestInfra>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<IsPackable>false</IsPackable>
<OutputType>Exe</OutputType>
<NoWarn>xUnit1051</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="xunit.v3" Version="3.0.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
</ItemGroup>
<PackageReference Include="xunit.v3" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
@@ -39,4 +38,4 @@
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
</Project>

View File

@@ -1,4 +1,4 @@
using System.Text;
using System.Text;
using StellaOps.TaskRunner.Client.Models;
using StellaOps.TaskRunner.Client.Streaming;
using StellaOps.TaskRunner.Client.Pagination;
@@ -14,7 +14,7 @@ public sealed class TaskRunnerClientTests
[Fact]
public async Task StreamingLogReader_ParsesNdjsonLines()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var ndjson = """
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Starting","traceId":"abc123"}
{"timestamp":"2025-01-01T00:00:01Z","level":"error","stepId":"step-1","message":"Failed","traceId":"abc123"}
@@ -34,7 +34,7 @@ public sealed class TaskRunnerClientTests
[Fact]
public async Task StreamingLogReader_SkipsEmptyLines()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var ndjson = """
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Test","traceId":"abc123"}
@@ -51,7 +51,7 @@ public sealed class TaskRunnerClientTests
[Fact]
public async Task StreamingLogReader_SkipsMalformedLines()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var ndjson = """
{"timestamp":"2025-01-01T00:00:00Z","level":"info","stepId":"step-1","message":"Valid","traceId":"abc123"}
not valid json
@@ -59,7 +59,6 @@ public sealed class TaskRunnerClientTests
""";
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(ndjson));
using StellaOps.TestKit;
var entries = await StreamingLogReader.CollectAsync(stream, ct);
Assert.Equal(2, entries.Count);
@@ -71,7 +70,7 @@ using StellaOps.TestKit;
[Fact]
public async Task StreamingLogReader_FilterByLevel_FiltersCorrectly()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var entries = new List<RunLogEntry>
{
new(DateTimeOffset.UtcNow, "info", "step-1", "Info message", "trace1"),
@@ -95,7 +94,7 @@ using StellaOps.TestKit;
[Fact]
public async Task StreamingLogReader_GroupByStep_GroupsCorrectly()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var entries = new List<RunLogEntry>
{
new(DateTimeOffset.UtcNow, "info", "step-1", "Message 1", "trace1"),
@@ -116,7 +115,7 @@ using StellaOps.TestKit;
[Fact]
public async Task Paginator_IteratesAllPages()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var allItems = Enumerable.Range(1, 25).ToList();
var pageSize = 10;
var fetchCalls = 0;
@@ -142,7 +141,7 @@ using StellaOps.TestKit;
[Fact]
public async Task Paginator_GetPage_ReturnsCorrectPage()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var allItems = Enumerable.Range(1, 25).ToList();
var pageSize = 10;
@@ -165,7 +164,7 @@ using StellaOps.TestKit;
[Fact]
public async Task PaginatorExtensions_TakeAsync_TakesCorrectNumber()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var items = Enumerable.Range(1, 100).ToAsyncEnumerable();
var taken = new List<int>();
@@ -182,7 +181,7 @@ using StellaOps.TestKit;
[Fact]
public async Task PaginatorExtensions_SkipAsync_SkipsCorrectNumber()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var items = Enumerable.Range(1, 10).ToAsyncEnumerable();
var skipped = new List<int>();

View File

@@ -16,9 +16,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0"/>
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0"/>
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0"/>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
</ItemGroup>
@@ -33,7 +33,7 @@
<ProjectReference Include="..\..\..\Telemetry\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core\StellaOps.Telemetry.Core.csproj"/>
<ProjectReference Include="..\..\..\AirGap\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy\StellaOps.AirGap.Policy.csproj"/>
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
<ProjectReference Include="..\..\..\Router/__Libraries/StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
</ItemGroup>

View File

@@ -1,4 +1,6 @@
using Microsoft.Extensions.Options;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
using StellaOps.AirGap.Policy;
using StellaOps.TaskRunner.Core.Configuration;
using StellaOps.TaskRunner.Core.Execution;

View File

@@ -6,9 +6,10 @@ using System.Diagnostics.Metrics;
using System.Text.Json.Nodes;
using Microsoft.Extensions.Options;
using StellaOps.TaskRunner.Core.Configuration;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Core.Execution.Simulation;
using StellaOps.TaskRunner.Core.Planning;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Core.Execution.Simulation;
using StellaOps.TaskRunner.Core.Planning;
using StellaOps.TaskRunner.Infrastructure.Execution;
namespace StellaOps.TaskRunner.Worker.Services;

View File

@@ -19,11 +19,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0"/>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
</ItemGroup>

View File

@@ -1,104 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Core", "StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj", "{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Infrastructure", "StellaOps.TaskRunner.Infrastructure\StellaOps.TaskRunner.Infrastructure.csproj", "{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.WebService", "StellaOps.TaskRunner.WebService\StellaOps.TaskRunner.WebService.csproj", "{D8A63A97-9C56-448B-A4BB-056130224750}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Worker", "StellaOps.TaskRunner.Worker\StellaOps.TaskRunner.Worker.csproj", "{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Tests", "StellaOps.TaskRunner.Tests\StellaOps.TaskRunner.Tests.csproj", "{552E7C8A-74F6-4E33-B956-46DF96E2BE11}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TaskRunner.Client", "StellaOps.TaskRunner.Client\StellaOps.TaskRunner.Client.csproj", "{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|Any CPU.Build.0 = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x64.ActiveCfg = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x64.Build.0 = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x86.ActiveCfg = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Debug|x86.Build.0 = Debug|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|Any CPU.ActiveCfg = Release|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|Any CPU.Build.0 = Release|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x64.ActiveCfg = Release|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x64.Build.0 = Release|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x86.ActiveCfg = Release|Any CPU
{105A0C4D-1ECD-4581-8EBF-8DB29D6EE857}.Release|x86.Build.0 = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x64.ActiveCfg = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x64.Build.0 = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x86.ActiveCfg = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Debug|x86.Build.0 = Debug|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|Any CPU.Build.0 = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x64.ActiveCfg = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x64.Build.0 = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x86.ActiveCfg = Release|Any CPU
{1B4F4A2B-9C38-4E7A-BFBE-158BF7C1F61B}.Release|x86.Build.0 = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x64.ActiveCfg = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x64.Build.0 = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x86.ActiveCfg = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Debug|x86.Build.0 = Debug|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|Any CPU.Build.0 = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x64.ActiveCfg = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x64.Build.0 = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x86.ActiveCfg = Release|Any CPU
{D8A63A97-9C56-448B-A4BB-056130224750}.Release|x86.Build.0 = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x64.ActiveCfg = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x64.Build.0 = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x86.ActiveCfg = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Debug|x86.Build.0 = Debug|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|Any CPU.Build.0 = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x64.ActiveCfg = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x64.Build.0 = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x86.ActiveCfg = Release|Any CPU
{C0AC4DD1-6DD7-4FCF-A6DD-5DE9B86D6753}.Release|x86.Build.0 = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|Any CPU.Build.0 = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x64.ActiveCfg = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x64.Build.0 = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x86.ActiveCfg = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Debug|x86.Build.0 = Debug|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|Any CPU.ActiveCfg = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|Any CPU.Build.0 = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x64.ActiveCfg = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x64.Build.0 = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x86.ActiveCfg = Release|Any CPU
{552E7C8A-74F6-4E33-B956-46DF96E2BE11}.Release|x86.Build.0 = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x64.ActiveCfg = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x64.Build.0 = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x86.ActiveCfg = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Debug|x86.Build.0 = Debug|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|Any CPU.Build.0 = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x64.ActiveCfg = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x64.Build.0 = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x86.ActiveCfg = Release|Any CPU
{7514BF42-5D6F-4D1B-AD1E-754479BFEDE4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,21 @@
using Microsoft.EntityFrameworkCore;
namespace StellaOps.TaskRunner.Persistence.EfCore.Context;
/// <summary>
/// EF Core DbContext for TaskRunner module.
/// This is a stub that will be scaffolded from the PostgreSQL database.
/// </summary>
public class TaskRunnerDbContext : DbContext
{
public TaskRunnerDbContext(DbContextOptions<TaskRunnerDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("taskrunner");
base.OnModelCreating(modelBuilder);
}
}

View File

@@ -3,23 +3,24 @@ using Microsoft.Extensions.DependencyInjection;
using StellaOps.Infrastructure.Postgres.Options;
using StellaOps.TaskRunner.Core.Evidence;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Storage.Postgres.Repositories;
using StellaOps.TaskRunner.Persistence.Postgres;
using StellaOps.TaskRunner.Persistence.Postgres.Repositories;
namespace StellaOps.TaskRunner.Storage.Postgres;
namespace StellaOps.TaskRunner.Persistence.Extensions;
/// <summary>
/// Extension methods for configuring TaskRunner PostgreSQL storage services.
/// Extension methods for configuring TaskRunner persistence services.
/// </summary>
public static class ServiceCollectionExtensions
public static class TaskRunnerPersistenceExtensions
{
/// <summary>
/// Adds TaskRunner PostgreSQL storage services.
/// Adds TaskRunner PostgreSQL persistence services.
/// </summary>
/// <param name="services">Service collection.</param>
/// <param name="configuration">Configuration root.</param>
/// <param name="sectionName">Configuration section name for PostgreSQL options.</param>
/// <returns>Service collection for chaining.</returns>
public static IServiceCollection AddTaskRunnerPostgresStorage(
public static IServiceCollection AddTaskRunnerPersistence(
this IServiceCollection services,
IConfiguration configuration,
string sectionName = "Postgres:TaskRunner")
@@ -37,12 +38,12 @@ public static class ServiceCollectionExtensions
}
/// <summary>
/// Adds TaskRunner PostgreSQL storage services with explicit options.
/// Adds TaskRunner PostgreSQL persistence services with explicit options.
/// </summary>
/// <param name="services">Service collection.</param>
/// <param name="configureOptions">Options configuration action.</param>
/// <returns>Service collection for chaining.</returns>
public static IServiceCollection AddTaskRunnerPostgresStorage(
public static IServiceCollection AddTaskRunnerPersistence(
this IServiceCollection services,
Action<PostgresOptions> configureOptions)
{

View File

@@ -4,7 +4,7 @@ using Npgsql;
using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.TaskRunner.Core.Execution;
namespace StellaOps.TaskRunner.Storage.Postgres.Repositories;
namespace StellaOps.TaskRunner.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IPackRunApprovalStore"/>.

View File

@@ -4,7 +4,7 @@ using Npgsql;
using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.TaskRunner.Core.Evidence;
namespace StellaOps.TaskRunner.Storage.Postgres.Repositories;
namespace StellaOps.TaskRunner.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IPackRunEvidenceStore"/>.

View File

@@ -5,7 +5,7 @@ using Npgsql;
using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.TaskRunner.Core.Execution;
namespace StellaOps.TaskRunner.Storage.Postgres.Repositories;
namespace StellaOps.TaskRunner.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IPackRunLogStore"/>.

View File

@@ -5,7 +5,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Core.Planning;
namespace StellaOps.TaskRunner.Storage.Postgres.Repositories;
namespace StellaOps.TaskRunner.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IPackRunStateStore"/>.

View File

@@ -4,7 +4,7 @@ using Npgsql;
using StellaOps.Infrastructure.Postgres.Connections;
using StellaOps.Infrastructure.Postgres.Options;
namespace StellaOps.TaskRunner.Storage.Postgres;
namespace StellaOps.TaskRunner.Persistence.Postgres;
/// <summary>
/// PostgreSQL data source for TaskRunner module.

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" ?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RootNamespace>StellaOps.TaskRunner.Persistence</RootNamespace>
<AssemblyName>StellaOps.TaskRunner.Persistence</AssemblyName>
<Description>Consolidated persistence layer for StellaOps TaskRunner module (EF Core + Raw SQL)</Description>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" PrivateAssets="all" />
<PackageReference Include="Npgsql" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Infrastructure.Postgres\StellaOps.Infrastructure.Postgres.csproj" />
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Infrastructure.EfCore\StellaOps.Infrastructure.EfCore.csproj" />
<ProjectReference Include="..\..\StellaOps.TaskRunner\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
</ItemGroup>
</Project>

View File

@@ -3,13 +3,13 @@ using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using StellaOps.TaskRunner.Core.Execution;
using StellaOps.TaskRunner.Core.Planning;
using StellaOps.TaskRunner.Storage.Postgres;
using StellaOps.TaskRunner.Storage.Postgres.Repositories;
using StellaOps.TaskRunner.Persistence.Postgres;
using StellaOps.TaskRunner.Persistence.Postgres.Repositories;
using StellaOps.Infrastructure.Postgres.Options;
using Xunit;
using StellaOps.TestKit;
namespace StellaOps.TaskRunner.Storage.Postgres.Tests;
namespace StellaOps.TaskRunner.Persistence.Tests;
[Collection(TaskRunnerPostgresCollection.Name)]
public sealed class PostgresPackRunStateStoreTests : IAsyncLifetime
@@ -107,7 +107,7 @@ public sealed class PostgresPackRunStateStoreTests : IAsyncLifetime
var states = await _store.ListAsync(CancellationToken.None);
// Assert
states.Should().HaveCountGreaterOrEqualTo(2);
states.Should().HaveCountGreaterThanOrEqualTo(2);
states.Select(s => s.RunId).Should().Contain("run-list-1", "run-list-2");
}

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" ?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\__Libraries\StellaOps.TaskRunner.Persistence\StellaOps.TaskRunner.Persistence.csproj" />
<ProjectReference Include="..\..\StellaOps.TaskRunner\StellaOps.TaskRunner.Core\StellaOps.TaskRunner.Core.csproj" />
<ProjectReference Include="..\..\..\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj" />
<ProjectReference Include="..\..\..\__Libraries\StellaOps.TestKit\StellaOps.TestKit.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,9 +1,9 @@
using System.Reflection;
using StellaOps.TaskRunner.Storage.Postgres;
using StellaOps.TaskRunner.Persistence.Postgres;
using StellaOps.Infrastructure.Postgres.Testing;
using Xunit;
namespace StellaOps.TaskRunner.Storage.Postgres.Tests;
namespace StellaOps.TaskRunner.Persistence.Tests;
/// <summary>
/// PostgreSQL integration test fixture for the TaskRunner module.