Public/Assert-DreepyMissingEnvVars.ps1

Function Assert-DreepyMissingEnvVars {
    param(
        [parameter(Mandatory = $false)][PSCustomObject]$buildDefinition,
        [parameter(Mandatory = $false)][string[]]$variableGroupNames,
        [parameter(Mandatory = $false)][ValidateSet('Info', 'Warning', 'Error')][string]$reportingLevel = "Info",
        [parameter(Mandatory = $false)][switch]$maskedValuesOnly,
        [parameter(Mandatory = $false)][switch]$includePrefix,
        [parameter(Mandatory = $false)][switch]$includeSuffix,
        [parameter(Mandatory = $false)][switch]$createMissingEnvVars
    )

    $missingEnvVars = @()
    $DreepyVariableGroupsFromBuildDefinition = @{
        buildDefinition = $buildDefinition
    }
    if ($PSBoundParameters.ContainsKey('variableGroupNames') -eq $true) {
        $DreepyVariableGroupsFromBuildDefinition.Add("variableGroupNames", $variableGroupNames)
    }
    $variableGroups = Get-DreepyVariableGroupsFromBuildDefinition @DreepyVariableGroupsFromBuildDefinition

    foreach ($variableGroup in ($variableGroups)) {
        if ($PSBoundParameters.ContainsKey('maskedValuesOnly') -eq $true) {
            $message = "Removing any variables from variable group {0} that is not a secret" -f $variableGroup.name
            Write-Host  $message
            $variableGroup = Edit-DreepyVariableGroup -variableGroupToEdit $variableGroup
        }
        $DreepyMissingEnvVars = @{
            variableGroup = $variableGroup
        }
        if ($PSBoundParameters.ContainsKey('includePrefix') -eq $true) {
            $prefix = Get-DreepyPrefixFromVariableGroup -variableGroup $variableGroup
            $DreepyMissingEnvVars.Add("prefix", $prefix.Item('value'))
        }
        if ($PSBoundParameters.ContainsKey('includeSuffix') -eq $true) {
            $suffix = Get-DreepySuffixFromVariableGroup -variableGroup $variableGroup
            $DreepyMissingEnvVars.Add("suffix", $suffix.Item('value'))
        }

        $missingEnvVars += Get-DreepyMissingEnvVars @DreepyMissingEnvVars

        if ($PSBoundParameters.ContainsKey('createMissingEnvVars') -eq $true) {
            Set-DreepyMissingEnvVars @DreepyMissingEnvVars
        }
    }
    if ($missingEnvVars.count -gt 0) {
        $body = $missingEnvVars -join [Environment]::NewLine
        $message = "The following secrets do not have environment variables set for them:" + [Environment]::NewLine + $body
        if ($reportingLevel -eq "Info") {
            Write-Host $message
            $missingEnvVars.count
        }
        elseif ($reportingLevel -eq "Warning") {
            Write-Warning $message
            $missingEnvVars.count
        }
        elseif ($reportingLevel -eq "Error") {
            Write-Error $message
            $missingEnvVars.count
            Throw
        }
    }
}