From e20173bbbfd4a126091a045d194370b9b59be020 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Fri, 31 Jul 2026 21:47:08 +0200 Subject: [PATCH 1/3] Raise Node E2E timeout budget on Windows Use a 60-second Vitest test and hook budget on Windows runners while preserving the existing 30-second budget elsewhere. This covers both default and in-process transports without weakening individual assertions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 51fbb14d-022f-4acb-bdce-1753cba236f9 --- nodejs/vitest.config.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nodejs/vitest.config.ts b/nodejs/vitest.config.ts index 03f6c779e9..bb07cb0174 100644 --- a/nodejs/vitest.config.ts +++ b/nodejs/vitest.config.ts @@ -1,11 +1,13 @@ import { defineConfig } from "vitest/config"; +const integrationTestTimeout = process.platform === "win32" ? 60000 : 30000; + export default defineConfig({ test: { globals: true, environment: "node", - testTimeout: 30000, // 30 seconds for integration tests - hookTimeout: 30000, + testTimeout: integrationTestTimeout, + hookTimeout: integrationTestTimeout, teardownTimeout: 10000, isolate: true, // Run each test file in isolation pool: "forks", // Use process forking for better isolation From 5af345218eb2caeb560c110f115fa8795c918890 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Fri, 31 Jul 2026 22:02:19 +0200 Subject: [PATCH 2/3] Split Windows .NET target frameworks across runners Run net8.0 and net472 in independent Windows matrix jobs instead of concurrently in one testhost job. This isolates each CLI and replay-proxy fixture graph without increasing the workflow's critical-path test duration. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 51fbb14d-022f-4acb-bdce-1753cba236f9 --- .github/workflows/dotnet-sdk-tests.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dotnet-sdk-tests.yml b/.github/workflows/dotnet-sdk-tests.yml index 37cdc07f7c..f63fb2fc29 100644 --- a/.github/workflows/dotnet-sdk-tests.yml +++ b/.github/workflows/dotnet-sdk-tests.yml @@ -12,7 +12,7 @@ permissions: jobs: test: - name: ".NET SDK Tests (${{ matrix.os }}, ${{ matrix.transport }}, ${{ matrix.backend }})" + name: ".NET SDK Tests (${{ matrix.os }}, ${{ matrix.framework }}, ${{ matrix.transport }}, ${{ matrix.backend }})" if: github.event.repository.fork == false env: POWERSHELL_UPDATECHECK: Off @@ -22,6 +22,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] + framework: [net8.0] transport: ["default", "inprocess"] backend: [capi] # TODO: Re-enable after fixing in-process sqlite file locking on shutdown on Windows. @@ -29,15 +30,22 @@ jobs: - os: windows-latest transport: "inprocess" include: + - os: windows-latest + framework: net472 + transport: default + backend: capi - os: ubuntu-latest + framework: net8.0 transport: inprocess backend: anthropic-messages test-filter: "FullyQualifiedName~GitHub.Copilot.Test.E2E&E2EBackend!=SelfConfiguredBackend&E2EBackend!=CapiOnly" - os: ubuntu-latest + framework: net8.0 transport: inprocess backend: openai-responses test-filter: "FullyQualifiedName~GitHub.Copilot.Test.E2E&E2EBackend!=SelfConfiguredBackend&E2EBackend!=CapiOnly" - os: ubuntu-latest + framework: net8.0 transport: inprocess backend: openai-completions test-filter: "FullyQualifiedName~GitHub.Copilot.Test.E2E&E2EBackend!=SelfConfiguredBackend&E2EBackend!=CapiOnly" @@ -93,8 +101,8 @@ jobs: env: COPILOT_HMAC_KEY: ${{ secrets.COPILOT_DEVELOPER_CLI_INTEGRATION_HMAC_KEY }} run: | - args=(--no-build -v n) + args=(--no-build -v n --framework "${{ matrix.framework }}") if [[ -n "$DOTNET_TEST_FILTER" ]]; then args+=(--filter "$DOTNET_TEST_FILTER") fi - dotnet test "${args[@]}" + dotnet test test/GitHub.Copilot.SDK.Test.csproj "${args[@]}" From daa55a7f97d46fdecd06b5059576aeec8ff11d0e Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Fri, 31 Jul 2026 21:53:07 +0200 Subject: [PATCH 3/3] Give Rust metadata E2E its own replay fixture Rename the repurposed metadata test and route it to a snapshot that matches its RUST_CONTEXT_INFO prompt. Preserve the existing compaction snapshot used by Python instead of sharing an incompatible conversation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 51fbb14d-022f-4acb-bdce-1753cba236f9 --- rust/tests/e2e/rpc_session_state.rs | 4 ++-- .../should_report_processing_and_context_metadata.yaml | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 test/snapshots/rpc_session_state/should_report_processing_and_context_metadata.yaml diff --git a/rust/tests/e2e/rpc_session_state.rs b/rust/tests/e2e/rpc_session_state.rs index 6292521903..7ef814a066 100644 --- a/rust/tests/e2e/rpc_session_state.rs +++ b/rust/tests/e2e/rpc_session_state.rs @@ -1074,10 +1074,10 @@ async fn should_report_implemented_errors_for_unsupported_session_rpc_paths() { } #[tokio::test] -async fn should_compact_session_history_after_messages() { +async fn should_report_processing_and_context_metadata() { with_e2e_context( "rpc_session_state", - "should_compact_session_history_after_messages", + "should_report_processing_and_context_metadata", |ctx| { Box::pin(async move { ctx.set_default_copilot_user(); diff --git a/test/snapshots/rpc_session_state/should_report_processing_and_context_metadata.yaml b/test/snapshots/rpc_session_state/should_report_processing_and_context_metadata.yaml new file mode 100644 index 0000000000..6760888d7b --- /dev/null +++ b/test/snapshots/rpc_session_state/should_report_processing_and_context_metadata.yaml @@ -0,0 +1,10 @@ +models: + - claude-sonnet-4.5 +conversations: + - messages: + - role: system + content: ${system} + - role: user + content: "Reply with exactly: RUST_CONTEXT_INFO" + - role: assistant + content: RUST_CONTEXT_INFO