From da7e48e896765c7d26475369959fc09331dadc9d Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 11 Mar 2026 17:22:40 +0800 Subject: [PATCH 1/3] Add DirectoryFilterPattern parameter to regeneration pipeline Add DirectoryFilterPattern parameter to archetype-typespec-emitter.yml and New-RegenerateMatrix.ps1 to allow filtering the regeneration matrix by package directory name pattern. This enables azure-sdk-for-net's http-client-csharp-mgmt CI to only regenerate Azure.ResourceManager* SDKs instead of all TypeSpec SDKs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../templates/archetype-typespec-emitter.yml | 6 ++++++ eng/common/scripts/New-RegenerateMatrix.ps1 | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/eng/common/pipelines/templates/archetype-typespec-emitter.yml b/eng/common/pipelines/templates/archetype-typespec-emitter.yml index 443ac86a9f21..e06db1d77635 100644 --- a/eng/common/pipelines/templates/archetype-typespec-emitter.yml +++ b/eng/common/pipelines/templates/archetype-typespec-emitter.yml @@ -67,6 +67,11 @@ parameters: type: boolean default: false +# Optional filter pattern for directory names (e.g., 'Azure.ResourceManager*' to only regenerate management SDKs) +- name: DirectoryFilterPattern + type: string + default: '' + # Paths to sparse checkout - name: SparseCheckoutPaths type: object @@ -352,6 +357,7 @@ extends: -JobCount ${{ parameters.RegenerationJobCount }} -MinimumPerJob ${{ parameters.MinimumPerJob }} -OnlyTypespec ${{ parameters.OnlyGenerateTypespec }} + -DirectoryFilterPattern '${{ parameters.DirectoryFilterPattern }}' workingDirectory: $(Build.SourcesDirectory) - template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml diff --git a/eng/common/scripts/New-RegenerateMatrix.ps1 b/eng/common/scripts/New-RegenerateMatrix.ps1 index 9176c23e4f53..6ac8ba86647f 100644 --- a/eng/common/scripts/New-RegenerateMatrix.ps1 +++ b/eng/common/scripts/New-RegenerateMatrix.ps1 @@ -14,7 +14,11 @@ param ( [int]$MinimumPerJob = 10, [Parameter()] - [string]$OnlyTypeSpec + [string]$OnlyTypeSpec, + + # Optional filter pattern applied to package directory names (e.g., 'Azure.ResourceManager*') + [Parameter()] + [string]$DirectoryFilterPattern ) . (Join-Path $PSScriptRoot common.ps1) @@ -66,6 +70,11 @@ else { } } +if ($DirectoryFilterPattern) { + $directoriesForGeneration = $directoriesForGeneration | Where-Object { $_.Name -like $DirectoryFilterPattern } + Write-Host "Filtered directories to pattern '$DirectoryFilterPattern': $($directoriesForGeneration.Count) matches" +} + [array]$packageDirectories = $directoriesForGeneration | Sort-Object -Property FullName | ForEach-Object { From 0302cd7de69a568bf12d19e899b1ba68d3dab9f9 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 11 Mar 2026 17:36:39 +0800 Subject: [PATCH 2/3] Handle empty filter results with array wrapping and early error Address review feedback: wrap filtered results in @() to ensure reliable .Count, and fail fast with a clear error when no directories match the filter pattern. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/common/scripts/New-RegenerateMatrix.ps1 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/eng/common/scripts/New-RegenerateMatrix.ps1 b/eng/common/scripts/New-RegenerateMatrix.ps1 index 6ac8ba86647f..2b3d5f72d4e6 100644 --- a/eng/common/scripts/New-RegenerateMatrix.ps1 +++ b/eng/common/scripts/New-RegenerateMatrix.ps1 @@ -71,9 +71,17 @@ else { } if ($DirectoryFilterPattern) { - $directoriesForGeneration = $directoriesForGeneration | Where-Object { $_.Name -like $DirectoryFilterPattern } + $directoriesForGeneration = @($directoriesForGeneration | Where-Object { $_.Name -like $DirectoryFilterPattern }) Write-Host "Filtered directories to pattern '$DirectoryFilterPattern': $($directoriesForGeneration.Count) matches" } +else { + $directoriesForGeneration = @($directoriesForGeneration) +} + +if ($directoriesForGeneration.Count -eq 0) { + Write-Error "No directories found for generation after applying filters. DirectoryFilterPattern='$DirectoryFilterPattern', OnlyTypeSpec='$OnlyTypespec'." + return +} [array]$packageDirectories = $directoriesForGeneration | Sort-Object -Property FullName From e834eca18f315448cd8e29c8b90a04a1b0dc5a97 Mon Sep 17 00:00:00 2001 From: Wei Hu Date: Wed, 11 Mar 2026 17:50:12 +0800 Subject: [PATCH 3/3] Support comma-separated filter patterns Update DirectoryFilterPattern to split on commas and match any pattern, so callers can filter to multiple SDK prefixes (e.g., 'Azure.ResourceManager*,Azure.Provisioning*'). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/common/scripts/New-RegenerateMatrix.ps1 | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/eng/common/scripts/New-RegenerateMatrix.ps1 b/eng/common/scripts/New-RegenerateMatrix.ps1 index 2b3d5f72d4e6..63d1f228e101 100644 --- a/eng/common/scripts/New-RegenerateMatrix.ps1 +++ b/eng/common/scripts/New-RegenerateMatrix.ps1 @@ -16,7 +16,8 @@ param ( [Parameter()] [string]$OnlyTypeSpec, - # Optional filter pattern applied to package directory names (e.g., 'Azure.ResourceManager*') + # Optional comma-separated filter patterns applied to package directory names + # (e.g., 'Azure.ResourceManager*,Azure.Provisioning*') [Parameter()] [string]$DirectoryFilterPattern ) @@ -71,8 +72,12 @@ else { } if ($DirectoryFilterPattern) { - $directoriesForGeneration = @($directoriesForGeneration | Where-Object { $_.Name -like $DirectoryFilterPattern }) - Write-Host "Filtered directories to pattern '$DirectoryFilterPattern': $($directoriesForGeneration.Count) matches" + $patterns = $DirectoryFilterPattern -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ } + $directoriesForGeneration = @($directoriesForGeneration | Where-Object { + $name = $_.Name + $patterns | Where-Object { $name -like $_ } + }) + Write-Host "Filtered directories to pattern(s) '$DirectoryFilterPattern': $($directoriesForGeneration.Count) matches" } else { $directoriesForGeneration = @($directoriesForGeneration)