1 <# 2 .SYNOPSIS 3 Generates a JSON object representing an Azure Pipelines Job Matrix. 4 See https://docs.microsoft.com/en-us/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml#parallelexec 5 6 .EXAMPLE 7 ./eng/common/scripts/Create-JobMatrix $context 8 #> 9 10 [CmdletBinding()] 11 param ( 12 [Parameter(Mandatory=$True)][string] $ConfigPath, 13 [Parameter(Mandatory=$True)][string] $Selection, 14 [Parameter(Mandatory=$False)][string] $DisplayNameFilter, 15 [Parameter(Mandatory=$False)][array] $Filters, 16 [Parameter(Mandatory=$False)][array] $Replace, 17 [Parameter(Mandatory=$False)][array] $NonSparseParameters 18 ) 19 20 . $PSScriptRoot/job-matrix-functions.ps1 21 22 $config = GetMatrixConfigFromJson (Get-Content $ConfigPath) 23 # Strip empty string filters in order to be able to use azure pipelines yaml join() 24 $Filters = $Filters | Where-Object { $_ } 25 26 [array]$matrix = GenerateMatrix ` 27 -config $config ` 28 -selectFromMatrixType $Selection ` 29 -displayNameFilter $DisplayNameFilter ` 30 -filters $Filters ` 31 -replace $Replace ` 32 -nonSparseParameters $NonSparseParameters 33 34 $serialized = SerializePipelineMatrix $matrix 35 36 Write-Output $serialized.pretty 37 Write-Output "##vso[task.setVariable variable=matrix;isOutput=true]$($serialized.compressed)" 38