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