Tasks/LoadDatumConfigData.build.ps1
param ( # Project path [Parameter()] [System.String] $ProjectPath = (property ProjectPath $BuildRoot), [Parameter()] [string] $DatumConfigDataDirectory = (property DatumConfigDataDirectory 'source'), [Parameter()] [scriptblock] $Filter = (property Filter {}), [Parameter()] [int] $CurrentJobNumber = (property CurrentJobNumber 1), [Parameter()] [int] $TotalJobCount = (property TotalJobCount 1), # Build Configuration object [Parameter()] [System.Collections.Hashtable] $BuildInfo = (property BuildInfo @{ }) ) task LoadDatumConfigData { $DatumConfigDataDirectory = Get-SamplerAbsolutePath -Path $DatumConfigDataDirectory -RelativeTo $ProjectPath if ($null -eq $Filter) { $Filter = {} } Import-Module -Name PowerShell-Yaml -Scope Global Import-Module -Name Datum -Scope Global # Fix Import issue of Datum.InvokeCommand from vscode integrated terminal if (-not (Get-Command -Name Import-PowerShellDataFile -ErrorAction SilentlyContinue)) { Import-Module -Name Microsoft.PowerShell.Utility -RequiredVersion 3.1.0.0 } $global:node = $null #very imporant, otherwise the 2nd build in the same session won't work $node = $null $datumDefinitionFile = Join-Path -Resolve -Path $DatumConfigDataDirectory -ChildPath 'Datum.yml' Write-Build Green "Loading Datum Definition from '$datumDefinitionFile'" $global:datum = New-DatumStructure -DefinitionFile $datumDefinitionFile if (-not ($datum.AllNodes)) { Write-Error 'No nodes found in the solution' } $getFilteredConfigurationDataParams = @{ CurrentJobNumber = $CurrentJobNumber TotalJobCount = $TotalJobCount Filter = $Filter } if ($message = (&git log -1) -and $message -match "--Added new node '(?<NodeName>\w+)'") { $global:Filter = $Filter = [scriptblock]::Create('$_.NodeName -eq "{0}"' -f $Matches.NodeName) $global:SkipCompressedModulesBuild = $true $getFilteredConfigurationDataParams['Filter'] = $Filter } $global:configurationData = Get-FilteredConfigurationData @getFilteredConfigurationDataParams } |