From 7720c6be7bd74b90bd42dc5c132b7cd7a2b00609 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 18 Dec 2025 15:01:07 +0100 Subject: [PATCH 1/2] Add UMX SlowBuildRepro repository to test matrix --- azure-pipelines-PR.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml index cd84d88b80..f62941e185 100644 --- a/azure-pipelines-PR.yml +++ b/azure-pipelines-PR.yml @@ -893,6 +893,10 @@ stages: - template: /eng/templates/regression-test-jobs.yml parameters: testMatrix: + - repo: marklam/SlowBuildRepro + commit: bbe2dec4d0379b5d7d0480997858c30d442fbb42 + buildScript: dotnet build + displayName: UMX_Slow_Repro - repo: fsprojects/FSharpPlus commit: f614035b75922aba41ed6a36c2fc986a2171d2b8 buildScript: build.cmd From 2798d8e6db11af57ff0fa8583bd9224a8be613d0 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 19 Dec 2025 15:58:03 +0100 Subject: [PATCH 2/2] Support built-in dotnet commands in regression test template (#19171) * Initial plan * 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> * 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> * 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> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> --- eng/templates/regression-test-jobs.yml | 47 ++++++++++++++++++-------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/eng/templates/regression-test-jobs.yml b/eng/templates/regression-test-jobs.yml index 449398a50f..3216eeaed4 100644 --- a/eng/templates/regression-test-jobs.yml +++ b/eng/templates/regression-test-jobs.yml @@ -60,14 +60,23 @@ 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 + # 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" + 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 +153,23 @@ 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) { - Write-Host "Running: dotnet pack build.proj -bl:build.binlog" - dotnet pack build.proj -bl:build.binlog + $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 + } elseif ($IsWindows) { + # Execute the provided script on Windows + Write-Host "Executing file-based script: $buildScript" + & ".\$buildScript" } else { - Write-Host "Executing: ${{ item.buildScript }}" - chmod +x "${{ item.buildScript }}" - bash -c "./${{ item.buildScript }}" + # Execute the provided script on Linux + Write-Host "Executing file-based script: $buildScript" + chmod +x "$buildScript" + bash -c "./$buildScript" } $exitCode = $LASTEXITCODE