plugins/bob/public/Get-JaxBobLayerConfig.ps1
|
function Get-JaxBobLayerConfig { [CmdletBinding()] param ( [string] $RepoRoot, [System.Collections.IDictionary] $PluginConfig, [hashtable] $Context = @{}, [scriptblock] $YamlReader ) $commonPSBoundParameters = Get-JaxCommonParameters -BoundParameters $PSBoundParameters $pluginConfig = Get-JaxBobPluginConfig -PluginConfig $PluginConfig $layers = @{} if ($pluginConfig.Keys -contains 'layers' -and $pluginConfig['layers'] -is [System.Collections.IDictionary]) { $layers = $pluginConfig['layers'] } $repoCommonFiles = Resolve-JaxBobLayerFiles -Patterns $layers['repoCommonPatterns'] -RepoRoot $RepoRoot @commonPSBoundParameters $localOverrideFiles = Resolve-JaxBobLayerFiles -Patterns $layers['localOverridePatterns'] -RepoRoot $RepoRoot @commonPSBoundParameters $ciOverrideFiles = @() if (Test-JaxBobCiEnabled -Context $Context -Layers $layers) { $ciOverrideFiles = Resolve-JaxBobLayerFiles -Patterns $layers['ciOverridePatterns'] -RepoRoot $RepoRoot @commonPSBoundParameters } $overrideNames = @() if ($Context.ContainsKey('Override')) { $overrideNames += $Context['Override'] } if ($Context.ContainsKey('Overrides')) { $overrideNames += $Context['Overrides'] } if ($overrideNames -is [string]) { $overrideNames = @($overrideNames) } $overrideNames = @($overrideNames | ForEach-Object { if ($_ -is [string]) { return ($_ -split ',') | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' } } return $_ }) | Where-Object { $_ } $namedOverrideFiles = @(Resolve-JaxBobOverrideFiles -OverrideNames $overrideNames -Layers $layers -RepoRoot $RepoRoot @commonPSBoundParameters) $flavour = $null if ($Context.ContainsKey('Flavour')) { $flavour = $Context['Flavour'] } elseif ($Context.ContainsKey('Flavor')) { $flavour = $Context['Flavor'] } elseif ($pluginConfig.Keys -contains 'flavour') { $flavour = $pluginConfig['flavour'] } $flavourFile = Resolve-JaxBobFlavourFile -Flavour $flavour -Layers $layers -RepoRoot $RepoRoot @commonPSBoundParameters $flavourFiles = @() if (-not [string]::IsNullOrWhiteSpace($flavourFile)) { $flavourFiles = @($flavourFile) } $config = @{} $allPaths = @() Write-Debug ("Get-JaxBobLayerConfig: repoCommon={0} localOverride={1} ciOverride={2} namedOverride={3} flavour={4}" -f @($repoCommonFiles).Count, @($localOverrideFiles).Count, @($ciOverrideFiles).Count, @($namedOverrideFiles).Count, @($flavourFiles).Count) $config = Merge-JaxHashtable -Base $config -Overlay (Read-JaxBobLayerConfig -Files $repoCommonFiles -RepoRoot $RepoRoot -YamlReader $YamlReader -UsedPaths ([ref]$allPaths) @commonPSBoundParameters) $config = Merge-JaxHashtable -Base $config -Overlay (Read-JaxBobLayerConfig -Files $localOverrideFiles -RepoRoot $RepoRoot -YamlReader $YamlReader -UsedPaths ([ref]$allPaths) @commonPSBoundParameters) $config = Merge-JaxHashtable -Base $config -Overlay (Read-JaxBobLayerConfig -Files $ciOverrideFiles -RepoRoot $RepoRoot -YamlReader $YamlReader -UsedPaths ([ref]$allPaths) @commonPSBoundParameters) if ($namedOverrideFiles.Count -gt 0) { $config = Merge-JaxHashtable -Base $config -Overlay (Read-JaxBobLayerConfig -Files $namedOverrideFiles -RepoRoot $RepoRoot -YamlReader $YamlReader -UsedPaths ([ref]$allPaths) @commonPSBoundParameters) } if ($flavourFiles.Count -gt 0) { $config = Merge-JaxHashtable -Base $config -Overlay (Read-JaxBobLayerConfig -Files $flavourFiles -RepoRoot $RepoRoot -YamlReader $YamlReader -UsedPaths ([ref]$allPaths) @commonPSBoundParameters) } return @{ Config = $config AllPaths = @($allPaths | Sort-Object -Unique) Paths = @{ repoCommon = $repoCommonFiles localOverride = $localOverrideFiles ciOverride = $ciOverrideFiles namedOverride = $namedOverrideFiles flavour = $flavourFiles } } } |