diff --git a/eng/common/scripts/job-matrix/Create-PrJobMatrix.ps1 b/eng/common/scripts/job-matrix/Create-PrJobMatrix.ps1 index b7c3b9d3ae09..5129d757f99c 100644 --- a/eng/common/scripts/job-matrix/Create-PrJobMatrix.ps1 +++ b/eng/common/scripts/job-matrix/Create-PrJobMatrix.ps1 @@ -64,7 +64,9 @@ $packageProperties = Get-ChildItem -Recurse "$PackagePropertiesFolder" *.json ` # set default matrix config for each package if there isn't an override $packageProperties | ForEach-Object { - $_.CIMatrixConfigs = $_.CIMatrixConfigs ?? $configs + if (-not $_.CIMatrixConfigs) { + $_.CIMatrixConfigs = $configs + } } # The key here is that after we group the packages by the matrix config objects, we can use the first item's MatrixConfig diff --git a/eng/common/scripts/job-matrix/job-matrix-functions.ps1 b/eng/common/scripts/job-matrix/job-matrix-functions.ps1 index f20dbe5281b0..0693f7983f18 100644 --- a/eng/common/scripts/job-matrix/job-matrix-functions.ps1 +++ b/eng/common/scripts/job-matrix/job-matrix-functions.ps1 @@ -740,3 +740,28 @@ function Get4dMatrixIndex([int]$index, [Array]$dimensions) { return @($page3, $page2, $page1, $remainder) } +function GenerateMatrixForConfig { + param ( + [Parameter(Mandatory = $true)][string] $ConfigPath, + [Parameter(Mandatory = $True)][string] $Selection, + [Parameter(Mandatory = $false)][string] $DisplayNameFilter, + [Parameter(Mandatory = $false)][array] $Filters, + [Parameter(Mandatory = $false)][array] $Replace + ) + $matrixFile = Join-Path $PSScriptRoot ".." ".." ".." ".." $ConfigPath + + $resolvedMatrixFile = Resolve-Path $matrixFile + + $config = GetMatrixConfigFromFile (Get-Content $resolvedMatrixFile -Raw) + # Strip empty string filters in order to be able to use azure pipelines yaml join() + $Filters = $Filters | Where-Object { $_ } + + [array]$matrix = GenerateMatrix ` + -config $config ` + -selectFromMatrixType $Selection ` + -displayNameFilter $DisplayNameFilter ` + -filters $Filters ` + -replace $Replace + + return , $matrix +}