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..63d1f228e101 100644 --- a/eng/common/scripts/New-RegenerateMatrix.ps1 +++ b/eng/common/scripts/New-RegenerateMatrix.ps1 @@ -14,7 +14,12 @@ param ( [int]$MinimumPerJob = 10, [Parameter()] - [string]$OnlyTypeSpec + [string]$OnlyTypeSpec, + + # Optional comma-separated filter patterns applied to package directory names + # (e.g., 'Azure.ResourceManager*,Azure.Provisioning*') + [Parameter()] + [string]$DirectoryFilterPattern ) . (Join-Path $PSScriptRoot common.ps1) @@ -66,6 +71,23 @@ else { } } +if ($DirectoryFilterPattern) { + $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) +} + +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 | ForEach-Object {