File: generate-scenario-matrix.ps1

package info (click to toggle)
python-azure 20230112%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 749,544 kB
  • sloc: python: 6,815,827; javascript: 287; makefile: 195; xml: 109; sh: 105
file content (98 lines) | stat: -rw-r--r-- 3,325 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
param(
    [string]$matrixFilePath,
    [string]$Selection,
    [Parameter(Mandatory=$False)][string]$DisplayNameFilter,
    [Parameter(Mandatory=$False)][array]$Filters,
    [Parameter(Mandatory=$False)][array]$Replace,
    [Parameter(Mandatory=$False)][array]$NonSparseParameters
)

$ErrorActionPreference = 'Stop'

function GenerateScenarioMatrix(
    [Parameter(Mandatory=$True)][string]$matrixFilePath,
    [Parameter(Mandatory=$True)][string]$Selection,
    [Parameter(Mandatory=$False)][string]$DisplayNameFilter,
    [Parameter(Mandatory=$False)][array]$Filters,
    [Parameter(Mandatory=$False)][array]$Replace,
    [Parameter(Mandatory=$False)][array]$NonSparseParameters
) {
    $yamlConfig = Get-Content $matrixFilePath -Raw

    $prettyMatrix = &"$PSScriptRoot/../job-matrix/Create-JobMatrix.ps1" `
        -ConfigPath $matrixFilePath `
        -Selection $Selection `
        -DisplayNameFilter $DisplayNameFilter `
        -Filters $Filters `
        -Replace $Replace `
        -NonSparseParameters $NonSparseParameters `
        -CI:$False

    Write-Host "=================================================="
    Write-Host "Generated matrix for $matrixFilePath"
    Write-Host $prettyMatrix
    Write-Host "=================================================="
    $matrixObj = $prettyMatrix | ConvertFrom-Json

    $scenariosMatrix = @()
    foreach($permutation in $matrixObj.psobject.properties) {
        $entry = @{}
        $entry.Name = $permutation.Name -replace '_', '-'
        $entry.Scenario = $entry.Name
        $entry.Remove("Name")
        foreach ($param in $permutation.value.psobject.properties) {
            $entry.add($param.Name, $param.value)
        }
        $scenariosMatrix += $entry
    }

    $valuesConfig = Join-Path (Split-Path $matrixFilePath) 'values.yaml'
    $values = [ordered]@{}
    if (Test-Path $valuesConfig) {
        $valuesYaml = Get-Content -Raw $valuesConfig
        $values = $valuesYaml | ConvertFrom-Yaml -Ordered
        if (!$values) {$values = @{}}

        if ($values.Contains('Scenarios')) {
            throw "Please remove the 'Scenarios' key from $valuesConfig as it is deprecated."
        }
    }

    $values.scenarios = $scenariosMatrix
    $generatedValues = Join-Path (Split-Path $matrixFilePath) 'generatedValues.yaml'
    $values | ConvertTo-Yaml | Out-File -FilePath $generatedValues
}

function NewStressTestPackageInfo(
    [hashtable]$chart,
    [System.IO.FileInfo]$chartFile,
    [switch]$CI,
    [object]$namespaceOverride
) {
    $namespace = if ($namespaceOverride) {
        $namespaceOverride
    } elseif ($CI) {
        $chart.annotations.namespace
    } else {
        GetUsername
    }

    return [StressTestPackageInfo]@{
        Namespace = $namespace.ToLower()
        Directory = $chartFile.DirectoryName
        ReleaseName = $chart.name
        Dockerfile = $chart.annotations.dockerfile
        DockerBuildDir = $chart.annotations.dockerbuilddir
    }
}

# Don't call functions when the script is being dot sourced
if ($MyInvocation.InvocationName -ne ".") {
    GenerateScenarioMatrix `
        -matrixFilePath $matrixFilePath `
        -Selection $Selection `
        -DisplayNameFilter $DisplayNameFilter `
        -Filters $Filters `
        -Replace $Replace `
        -NonSparseParameters $NonSparseParameters
}