From 2162bac376d23560120d9e0a2dcabb10bcbddef1 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Mon, 27 Oct 2025 21:01:05 +0000 Subject: [PATCH 1/5] update linux eventstore and try run all tests on windows with no specific windows containers --- .github/workflows/pullrequest.yml | 96 +++++++++---------- Shared.IntegrationTesting/BaseDockerHelper.cs | 74 +++++++------- 2 files changed, 85 insertions(+), 85 deletions(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 0018f77..3d84e59 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -54,55 +54,55 @@ jobs: name: tracelogslinux path: /home/txnproc/trace/ - # buildwindows: - # name: "Build and Test Pull Requests - Windows" - # env: - # ASPNETCORE_ENVIRONMENT: "Production" + buildwindows: + name: "Build and Test Pull Requests - Windows" + env: + ASPNETCORE_ENVIRONMENT: "Production" + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v1 + + - name: Install NET 9 + uses: actions/setup-dotnet@v4.0.1 + with: + dotnet-version: '9.0.x' + + #- name: Build Windows SQL Server + # run: | + # cd SQLDocker + # docker build -t mssqlserver:2022-ltsc2022 --build-arg SQL_VERSION=2022 --build-arg WIN_VERSION=ltsc2022 . + + - name: Restore Nuget Packages + run: dotnet restore Shared.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} + + - name: Build Code + run: dotnet build Shared.sln --configuration Release - # runs-on: windows-latest - - # steps: - # - uses: actions/checkout@v1 - - # - name: Install NET 9 - # uses: actions/setup-dotnet@v4.0.1 - # with: - # dotnet-version: '9.0.x' - - # - name: Build Windows SQL Server - # run: | - # cd SQLDocker - # docker build -t mssqlserver:2022-ltsc2022 --build-arg SQL_VERSION=2022 --build-arg WIN_VERSION=ltsc2022 . - - # - name: Restore Nuget Packages - # run: dotnet restore Shared.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} - - # - name: Build Code - # run: dotnet build Shared.sln --configuration Release - - # - name: Run Unit Tests - # run: | - # echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" - # dotnet test "Shared.Tests\Shared.Tests.csproj" - - # - name: Run Event Store Tests - # run: | - # echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" - # dotnet test "Shared.EventStore.Tests\Shared.EventStore.Tests.csproj" - # dotnet test "Shared.EventStoreContext.Tests\Shared.EventStoreContext.Tests.csproj" - - # - name: Run Integration Tests - # env: - # IsCI: true - # run: | - # echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" - # dotnet test "Shared.IntegrationTesting.Tests\Shared.IntegrationTesting.Tests.csproj" - - # - uses: actions/upload-artifact@v4.4.3 - # #if: ${{ failure() }} - # with: - # name: tracelogswindows - # path: C:\\Users\\runneradmin\\txnproc + - name: Run Unit Tests + run: | + echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" + dotnet test "Shared.Tests\Shared.Tests.csproj" + + - name: Run Event Store Tests + run: | + echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" + dotnet test "Shared.EventStore.Tests\Shared.EventStore.Tests.csproj" + dotnet test "Shared.EventStoreContext.Tests\Shared.EventStoreContext.Tests.csproj" + + - name: Run Integration Tests + env: + IsCI: true + run: | + echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}" + dotnet test "Shared.IntegrationTesting.Tests\Shared.IntegrationTesting.Tests.csproj" + + - uses: actions/upload-artifact@v4.4.3 + #if: ${{ failure() }} + with: + name: tracelogswindows + path: C:\\Users\\runneradmin\\txnproc # buildmacos: # name: "Build and Test Pull Requests - Mac" diff --git a/Shared.IntegrationTesting/BaseDockerHelper.cs b/Shared.IntegrationTesting/BaseDockerHelper.cs index 298d611..be9a210 100644 --- a/Shared.IntegrationTesting/BaseDockerHelper.cs +++ b/Shared.IntegrationTesting/BaseDockerHelper.cs @@ -135,21 +135,21 @@ protected BaseDockerHelper(Boolean skipHealthChecks=false) { })); // Setup the default image details - SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); - if (engineType.Data == DockerEnginePlatform.Windows){ - this.ImageDetails.Add(ContainerType.SqlServer, ("iamrjindal/sqlserverexpress:2022", true)); - this.ImageDetails.Add(ContainerType.EventStore, ("stuartferguson/eventstore_windows", true)); - this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservicewindows:master", true)); - this.ImageDetails.Add(ContainerType.SecurityService, ("stuartferguson/securityservicewindows:master", true)); - this.ImageDetails.Add(ContainerType.CallbackHandler, ("stuartferguson/callbackhandlerwindows:master", true)); - this.ImageDetails.Add(ContainerType.TestHost, ("stuartferguson/testhostswindows:master", true)); - this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessorwindows:master", true)); - this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessorwindows:master", true)); - this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoraclwindows:master", true)); - } - else{ + //SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + //if (engineType.Data == DockerEnginePlatform.Windows){ + // this.ImageDetails.Add(ContainerType.SqlServer, ("iamrjindal/sqlserverexpress:2022", true)); + // this.ImageDetails.Add(ContainerType.EventStore, ("stuartferguson/eventstore_windows", true)); + // this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservicewindows:master", true)); + // this.ImageDetails.Add(ContainerType.SecurityService, ("stuartferguson/securityservicewindows:master", true)); + // this.ImageDetails.Add(ContainerType.CallbackHandler, ("stuartferguson/callbackhandlerwindows:master", true)); + // this.ImageDetails.Add(ContainerType.TestHost, ("stuartferguson/testhostswindows:master", true)); + // this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessorwindows:master", true)); + // this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessorwindows:master", true)); + // this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoraclwindows:master", true)); + //} + //else{ this.ImageDetails.Add(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2022-latest", true)); - this.ImageDetails.Add(ContainerType.EventStore, ("eventstore/eventstore:24.10.0-jammy", true)); + this.ImageDetails.Add(ContainerType.EventStore, ("kurrentplatform/kurrentdb:25.1", true)); this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservice:master", true)); this.ImageDetails.Add(ContainerType.SecurityService, ("stuartferguson/securityservice:master", true)); this.ImageDetails.Add(ContainerType.CallbackHandler, ("stuartferguson/callbackhandler:master", true)); @@ -157,7 +157,7 @@ protected BaseDockerHelper(Boolean skipHealthChecks=false) { this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessor:master", true)); this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessor:master", true)); this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoracl:master", true)); - } + //} this.HostPorts = new Dictionary(); Logging.Enabled(); @@ -546,32 +546,32 @@ public virtual ContainerBuilder SetupTestHostContainer(){ public virtual INetworkService SetupTestNetwork(String networkName = null, Boolean reuseIfExists = false){ networkName = String.IsNullOrEmpty(networkName) ? $"testnw{this.TestId:N}" : networkName; - SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); - - if (engineType.Data == DockerEnginePlatform.Windows){ - var docker = BaseDockerHelper.GetDockerHost(); - var network = docker.GetNetworks().SingleOrDefault(nw => nw.Name == networkName); - if (network == null){ - Dictionary driverOptions = new Dictionary(); - driverOptions.Add("com.docker.network.windowsshim.networkname", networkName); - - network = docker.CreateNetwork(networkName, - new NetworkCreateParams{ - Driver = "nat", - DriverOptions = driverOptions, - Attachable = true, - }); - } - - return network; - } - - if (engineType.Data == DockerEnginePlatform.Linux){ + //SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + + //if (engineType.Data == DockerEnginePlatform.Windows){ + // var docker = BaseDockerHelper.GetDockerHost(); + // var network = docker.GetNetworks().SingleOrDefault(nw => nw.Name == networkName); + // if (network == null){ + // Dictionary driverOptions = new Dictionary(); + // driverOptions.Add("com.docker.network.windowsshim.networkname", networkName); + + // network = docker.CreateNetwork(networkName, + // new NetworkCreateParams{ + // Driver = "nat", + // DriverOptions = driverOptions, + // Attachable = true, + // }); + // } + + // return network; + //} + + //if (engineType.Data == DockerEnginePlatform.Linux){ // Build a network NetworkBuilder networkService = new Builder().UseNetwork(networkName).ReuseIfExist(); return networkService.Build(); - } + //} return null; } From c8fd7790a3461978324a30b19b20db7157f1a414 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Tue, 28 Oct 2025 10:29:35 +0000 Subject: [PATCH 2/5] debug added --- Shared.IntegrationTesting/BaseDockerHelper.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Shared.IntegrationTesting/BaseDockerHelper.cs b/Shared.IntegrationTesting/BaseDockerHelper.cs index be9a210..2b1f7ad 100644 --- a/Shared.IntegrationTesting/BaseDockerHelper.cs +++ b/Shared.IntegrationTesting/BaseDockerHelper.cs @@ -546,7 +546,8 @@ public virtual ContainerBuilder SetupTestHostContainer(){ public virtual INetworkService SetupTestNetwork(String networkName = null, Boolean reuseIfExists = false){ networkName = String.IsNullOrEmpty(networkName) ? $"testnw{this.TestId:N}" : networkName; - //SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + Console.WriteLine($"Engine Type is {engineType.Data}"); //if (engineType.Data == DockerEnginePlatform.Windows){ // var docker = BaseDockerHelper.GetDockerHost(); From 151bf80f3f54eb1fbf6bd9fd5277cca4e892f0a0 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Tue, 28 Oct 2025 10:34:26 +0000 Subject: [PATCH 3/5] switch to linux containers on Windows runner --- .github/workflows/pullrequest.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 3d84e59..a06ae02 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -69,6 +69,13 @@ jobs: with: dotnet-version: '9.0.x' + - name: Ensure Docker uses Linux containers + run: | + & "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchLinuxEngine + # Wait for Docker to restart + Start-Sleep -Seconds 15 + docker info | Select-String "Operating System" + #- name: Build Windows SQL Server # run: | # cd SQLDocker From 77bb31a2d9a45eb816eb34fd797463dfcbe4f2bd Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Wed, 29 Oct 2025 07:24:36 +0000 Subject: [PATCH 4/5] :| --- Shared.IntegrationTesting/BaseDockerHelper.cs | 74 ++++++++++--------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/Shared.IntegrationTesting/BaseDockerHelper.cs b/Shared.IntegrationTesting/BaseDockerHelper.cs index 2b1f7ad..637bb73 100644 --- a/Shared.IntegrationTesting/BaseDockerHelper.cs +++ b/Shared.IntegrationTesting/BaseDockerHelper.cs @@ -135,19 +135,21 @@ protected BaseDockerHelper(Boolean skipHealthChecks=false) { })); // Setup the default image details - //SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); - //if (engineType.Data == DockerEnginePlatform.Windows){ - // this.ImageDetails.Add(ContainerType.SqlServer, ("iamrjindal/sqlserverexpress:2022", true)); - // this.ImageDetails.Add(ContainerType.EventStore, ("stuartferguson/eventstore_windows", true)); - // this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservicewindows:master", true)); - // this.ImageDetails.Add(ContainerType.SecurityService, ("stuartferguson/securityservicewindows:master", true)); - // this.ImageDetails.Add(ContainerType.CallbackHandler, ("stuartferguson/callbackhandlerwindows:master", true)); - // this.ImageDetails.Add(ContainerType.TestHost, ("stuartferguson/testhostswindows:master", true)); - // this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessorwindows:master", true)); - // this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessorwindows:master", true)); - // this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoraclwindows:master", true)); - //} - //else{ + SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); + if (engineType.Data == DockerEnginePlatform.Windows) + { + this.ImageDetails.Add(ContainerType.SqlServer, ("iamrjindal/sqlserverexpress:2022", true)); + this.ImageDetails.Add(ContainerType.EventStore, ("stuartferguson/kurrentdb_windows", true)); + this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservicewindows:master", true)); + this.ImageDetails.Add(ContainerType.SecurityService, ("stuartferguson/securityservicewindows:master", true)); + this.ImageDetails.Add(ContainerType.CallbackHandler, ("stuartferguson/callbackhandlerwindows:master", true)); + this.ImageDetails.Add(ContainerType.TestHost, ("stuartferguson/testhostswindows:master", true)); + this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessorwindows:master", true)); + this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessorwindows:master", true)); + this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoraclwindows:master", true)); + } + else + { this.ImageDetails.Add(ContainerType.SqlServer, ("mcr.microsoft.com/mssql/server:2022-latest", true)); this.ImageDetails.Add(ContainerType.EventStore, ("kurrentplatform/kurrentdb:25.1", true)); this.ImageDetails.Add(ContainerType.MessagingService, ("stuartferguson/messagingservice:master", true)); @@ -157,7 +159,7 @@ protected BaseDockerHelper(Boolean skipHealthChecks=false) { this.ImageDetails.Add(ContainerType.TransactionProcessor, ("stuartferguson/transactionprocessor:master", true)); this.ImageDetails.Add(ContainerType.FileProcessor, ("stuartferguson/fileprocessor:master", true)); this.ImageDetails.Add(ContainerType.TransactionProcessorAcl, ("stuartferguson/transactionprocessoracl:master", true)); - //} + } this.HostPorts = new Dictionary(); Logging.Enabled(); @@ -549,30 +551,34 @@ public virtual INetworkService SetupTestNetwork(String networkName = null, SimpleResults.Result engineType = BaseDockerHelper.GetDockerEnginePlatform(); Console.WriteLine($"Engine Type is {engineType.Data}"); - //if (engineType.Data == DockerEnginePlatform.Windows){ - // var docker = BaseDockerHelper.GetDockerHost(); - // var network = docker.GetNetworks().SingleOrDefault(nw => nw.Name == networkName); - // if (network == null){ - // Dictionary driverOptions = new Dictionary(); - // driverOptions.Add("com.docker.network.windowsshim.networkname", networkName); - - // network = docker.CreateNetwork(networkName, - // new NetworkCreateParams{ - // Driver = "nat", - // DriverOptions = driverOptions, - // Attachable = true, - // }); - // } + if (engineType.Data == DockerEnginePlatform.Windows) + { + var docker = BaseDockerHelper.GetDockerHost(); + var network = docker.GetNetworks().SingleOrDefault(nw => nw.Name == networkName); + if (network == null) + { + Dictionary driverOptions = new Dictionary(); + driverOptions.Add("com.docker.network.windowsshim.networkname", networkName); + + network = docker.CreateNetwork(networkName, + new NetworkCreateParams + { + Driver = "nat", + DriverOptions = driverOptions, + Attachable = true, + }); + } - // return network; - //} + return network; + } - //if (engineType.Data == DockerEnginePlatform.Linux){ - // Build a network - NetworkBuilder networkService = new Builder().UseNetwork(networkName).ReuseIfExist(); + if (engineType.Data == DockerEnginePlatform.Linux) + { + // Build a network + NetworkBuilder networkService = new Builder().UseNetwork(networkName).ReuseIfExist(); return networkService.Build(); - //} + } return null; } From b594187c7789759a377031cc2afa62a4ff1e8fa8 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Wed, 29 Oct 2025 08:46:58 +0000 Subject: [PATCH 5/5] oops --- .github/workflows/pullrequest.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index a06ae02..5d39af9 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -69,17 +69,10 @@ jobs: with: dotnet-version: '9.0.x' - - name: Ensure Docker uses Linux containers + - name: Build Windows SQL Server run: | - & "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchLinuxEngine - # Wait for Docker to restart - Start-Sleep -Seconds 15 - docker info | Select-String "Operating System" - - #- name: Build Windows SQL Server - # run: | - # cd SQLDocker - # docker build -t mssqlserver:2022-ltsc2022 --build-arg SQL_VERSION=2022 --build-arg WIN_VERSION=ltsc2022 . + cd SQLDocker + docker build -t mssqlserver:2022-ltsc2022 --build-arg SQL_VERSION=2022 --build-arg WIN_VERSION=ltsc2022 . - name: Restore Nuget Packages run: dotnet restore Shared.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }}