This is an automated email from the ASF dual-hosted git repository.

lukaszzborek pushed a commit to branch dotnet-e2e-split-tfm
in repository https://gitbox.apache.org/repos/asf/iggy.git

commit 1f66c149d92d836256042095bc791b3f38d0a0ef
Author: Ɓukasz Zborek <[email protected]>
AuthorDate: Tue Aug 11 15:26:03 2026 +0200

    ci(csharp): split e2e integration tests per target framework
    
    Both TFM test hosts ran concurrently on one runner, each spawning
    3-node VSR clusters. The contention caused 30s consensus timeouts
    and retries. Encoding the framework in the task name gives each TFM
    its own matrix job with an isolated runner.
    
    Co-Authored-By: Claude Fable 5 <[email protected]>
---
 .github/actions/csharp-dotnet/pre-merge/action.yml | 19 ++++++++++++-------
 .github/config/components.yml                      |  2 +-
 .github/workflows/_test.yml                        |  2 +-
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/.github/actions/csharp-dotnet/pre-merge/action.yml 
b/.github/actions/csharp-dotnet/pre-merge/action.yml
index c4dc35bde..b8acbff81 100644
--- a/.github/actions/csharp-dotnet/pre-merge/action.yml
+++ b/.github/actions/csharp-dotnet/pre-merge/action.yml
@@ -21,7 +21,7 @@ description: .NET pre-merge testing github iggy actions
 
 inputs:
   task:
-    description: "Task to run (lint, test, build, e2e)"
+    description: "Task to run (lint, test, build, e2e-<tfm>)"
     required: true
 
 runs:
@@ -30,10 +30,12 @@ runs:
     - name: Setup .NET
       uses: actions/setup-dotnet@v5
       with:
-        dotnet-version: "10.0.x"
+        dotnet-version: |
+          8.0.x
+          10.0.x
 
     - name: Setup Rust with cache
-      if: inputs.task == 'test' || inputs.task == 'e2e'
+      if: inputs.task == 'test' || startsWith(inputs.task, 'e2e')
       uses: ./.github/actions/utils/setup-rust-with-cache
 
     - name: Restore dependencies
@@ -77,7 +79,7 @@ runs:
 
     - name: Build Iggy server Docker image
       id: docker_build
-      if: inputs.task == 'e2e'
+      if: startsWith(inputs.task, 'e2e')
       shell: bash
       run: |
         cargo build --locked --bin iggy-server --bin iggy
@@ -91,14 +93,17 @@ runs:
         echo "docker_image=iggy-server:test" >> "$GITHUB_OUTPUT"
 
     - name: Run integration tests
-      if: inputs.task == 'e2e'
+      if: startsWith(inputs.task, 'e2e')
       working-directory: foreign/csharp
       env:
         IGGY_SERVER_DOCKER_IMAGE: ${{ steps.docker_build.outputs.docker_image 
}}
         IGGY_TEST_LOGS_DIR: ./reports/container-logs
         IGGY_TEST_CLUSTER_NODES: "3"
+        IGGY_TASK: ${{ inputs.task }}
       run: |
+        # Task name carries the target framework: e2e-net8.0 -> net8.0
         dotnet test --project Iggy_SDK.Tests.Integration \
+          --framework "${IGGY_TASK#e2e-}" \
           --no-build \
           --verbosity normal \
           --coverage \
@@ -109,7 +114,7 @@ runs:
       shell: bash
 
     - name: Collect container logs
-      if: inputs.task == 'e2e' && always()
+      if: startsWith(inputs.task, 'e2e') && always()
       shell: bash
       run: |
         mkdir -p foreign/csharp/reports/container-logs
@@ -117,7 +122,7 @@ runs:
 
     - name: Upload Test Results
       uses: actions/upload-artifact@v7
-      if: inputs.task == 'e2e' && always()
+      if: startsWith(inputs.task, 'e2e') && always()
       with:
         name: dotnet-test-results-${{ inputs.task }}
         path: foreign/csharp/reports
diff --git a/.github/config/components.yml b/.github/config/components.yml
index 43cf56e07..3ddd7520b 100644
--- a/.github/config/components.yml
+++ b/.github/config/components.yml
@@ -285,7 +285,7 @@ components:
     paths:
       - "foreign/csharp/**"
       - "examples/csharp/**"
-    tasks: ["lint", "test", "build", "e2e"]
+    tasks: ["lint", "test", "build", "e2e-net8.0", "e2e-net10.0"]
 
   sdk-cpp:
     depends_on:
diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml
index a2b6a61db..eb0483efb 100644
--- a/.github/workflows/_test.yml
+++ b/.github/workflows/_test.yml
@@ -196,7 +196,7 @@ jobs:
           override_pr: ${{ github.event.pull_request.number }}
 
       - name: Upload C# coverage to Codecov
-        if: inputs.component == 'sdk-csharp' && (inputs.task == 'test' || 
inputs.task == 'e2e')
+        if: inputs.component == 'sdk-csharp' && (inputs.task == 'test' || 
startsWith(inputs.task, 'e2e'))
         uses: codecov/[email protected]
         with:
           token: ${{ secrets.CODECOV_TOKEN }}

Reply via email to