From a66248e4cc2c62abb5fab4f04dee1b8214fddc77 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:20:33 +0000 Subject: [PATCH 1/4] Initial plan From afb28cf5695f1a8e03425976e190237b97fd2a1e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:32:50 +0000 Subject: [PATCH 2/4] Support built-in dotnet commands in regression test template Modified regression-test-jobs.yml to: - Skip file validation for commands starting with "dotnet" - Execute dotnet commands directly using Invoke-Expression - Maintain existing file-based script support - Handle both Windows and Linux scenarios appropriately This allows tests like UMX_Slow_Repro to use "dotnet build" directly without requiring a build script file. Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> --- eng/templates/regression-test-jobs.yml | 38 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/eng/templates/regression-test-jobs.yml b/eng/templates/regression-test-jobs.yml index 449398a50f..1b4c94610b 100644 --- a/eng/templates/regression-test-jobs.yml +++ b/eng/templates/regression-test-jobs.yml @@ -60,14 +60,21 @@ jobs: Write-Host "Repository structure:" Get-ChildItem -Name - Write-Host "Verifying build script exists: ${{ item.buildScript }}" - if (Test-Path "${{ item.buildScript }}") { - Write-Host "Build script found: ${{ item.buildScript }}" + # Check if buildScript is a built-in dotnet command or a file-based script + $buildScript = "${{ item.buildScript }}" + if ($buildScript -like "dotnet*") { + Write-Host "Build command is a built-in dotnet command: $buildScript" + Write-Host "Skipping file existence check for built-in command" } else { - Write-Host "Build script not found: ${{ item.buildScript }}" - Write-Host "Available files in root:" - Get-ChildItem - exit 1 + Write-Host "Verifying build script exists: $buildScript" + if (Test-Path $buildScript) { + Write-Host "Build script found: $buildScript" + } else { + Write-Host "Build script not found: $buildScript" + Write-Host "Available files in root:" + Get-ChildItem + exit 1 + } } displayName: Checkout ${{ item.displayName }} at specific commit @@ -144,15 +151,20 @@ jobs: Write-Host "============================================" Write-Host "" - # Use dotnet pack with binary logging on Windows to generate binlog files - # On Linux, execute the build script directly - if ($IsWindows) { + $buildScript = "${{ item.buildScript }}" + + # Check if it's a built-in dotnet command or a file-based script + if ($buildScript -like "dotnet*") { + Write-Host "Executing built-in command: $buildScript" + Invoke-Expression $buildScript + } elseif ($IsWindows) { + # Use dotnet pack with binary logging on Windows to generate binlog files Write-Host "Running: dotnet pack build.proj -bl:build.binlog" dotnet pack build.proj -bl:build.binlog } else { - Write-Host "Executing: ${{ item.buildScript }}" - chmod +x "${{ item.buildScript }}" - bash -c "./${{ item.buildScript }}" + Write-Host "Executing file-based script: $buildScript" + chmod +x "$buildScript" + bash -c "./$buildScript" } $exitCode = $LASTEXITCODE From 2b29829cf2981e7385ba4b7dad09e54ff2020889 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:34:22 +0000 Subject: [PATCH 3/4] Add security clarification comments for buildScript usage Added comments to clarify that buildScript comes from pipeline YAML configuration, not external user input, making Invoke-Expression safe in this context. Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> --- eng/templates/regression-test-jobs.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eng/templates/regression-test-jobs.yml b/eng/templates/regression-test-jobs.yml index 1b4c94610b..33dd299c1b 100644 --- a/eng/templates/regression-test-jobs.yml +++ b/eng/templates/regression-test-jobs.yml @@ -61,6 +61,8 @@ jobs: Get-ChildItem -Name # Check if buildScript is a built-in dotnet command or a file-based script + # Note: buildScript comes from the pipeline YAML configuration (testMatrix parameter), + # not from external user input, so it's safe to use $buildScript = "${{ item.buildScript }}" if ($buildScript -like "dotnet*") { Write-Host "Build command is a built-in dotnet command: $buildScript" @@ -154,6 +156,8 @@ jobs: $buildScript = "${{ item.buildScript }}" # Check if it's a built-in dotnet command or a file-based script + # Note: buildScript comes from the pipeline YAML configuration (testMatrix parameter), + # not from external user input, so using Invoke-Expression is safe here if ($buildScript -like "dotnet*") { Write-Host "Executing built-in command: $buildScript" Invoke-Expression $buildScript From 5ed07c49cbfd94746f84e646f5b6487e7e9293c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 16:12:31 +0000 Subject: [PATCH 4/4] Execute provided buildScript on Windows instead of hardcoded build.proj Changed Windows file-based script execution to use the provided buildScript parameter instead of assuming build.proj exists. Now Windows behavior matches Linux - it executes the actual script specified in the configuration. Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> --- eng/templates/regression-test-jobs.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/eng/templates/regression-test-jobs.yml b/eng/templates/regression-test-jobs.yml index 33dd299c1b..3216eeaed4 100644 --- a/eng/templates/regression-test-jobs.yml +++ b/eng/templates/regression-test-jobs.yml @@ -162,10 +162,11 @@ jobs: Write-Host "Executing built-in command: $buildScript" Invoke-Expression $buildScript } elseif ($IsWindows) { - # Use dotnet pack with binary logging on Windows to generate binlog files - Write-Host "Running: dotnet pack build.proj -bl:build.binlog" - dotnet pack build.proj -bl:build.binlog + # Execute the provided script on Windows + Write-Host "Executing file-based script: $buildScript" + & ".\$buildScript" } else { + # Execute the provided script on Linux Write-Host "Executing file-based script: $buildScript" chmod +x "$buildScript" bash -c "./$buildScript"