Tasks/TaskLoader.ps1

<#
    .SYNOPSIS
    Loads Plumber Invoke-Build tasks.

    .DESCRIPTION
    Registers Plumber's validation task graph in the active Invoke-Build scope.
    This script is dot-sourced from a build file so each task script can call
    Add-BuildTask in the correct scope.

    The Config hashtable is merged with Plumber defaults and exposed to tasks as
    $script:PlumberConfig.

    .PARAMETER Config
    Repository-specific Plumber configuration. Shared keys are ModuleManifest,
    FileScope, and DiffBase. Task settings live under Tasks.

    .EXAMPLE
    . (Get-PlumberTaskLoader) -Config @{
        ModuleManifest = 'MyModule.psd1'
    }

    Loads the default Plumber task graph for a module manifest.

    .EXAMPLE
    . (Get-PlumberTaskLoader) -Config @{
        ModuleManifest = 'MyModule.psd1'
        Tasks = @{
            Backticks = @{
                Exclude = @('Tests/Assets/*')
            }
            CodeCoverage = @{
                Minimum = 80
            }
            Exclude = @('YAML', 'ChangelogUpdated')
            PSScriptAnalyzer = @{
                IncludeTests = $false
            }
        }
    }

    Loads Plumber tasks with custom coverage, PSScriptAnalyzer and task exclusion
    settings.
#>

param (
    [hashtable]
    $Config = @{}
)

$moduleRoot = Split-Path $PSScriptRoot -Parent

# Task files are dot-sourced into Invoke-Build's script scope, so the private
# helpers must be dot-sourced too; importing the module does not expose private
# module functions to that build-file scope.
foreach ($privateScript in Get-ChildItem (Join-Path $moduleRoot 'Private') -Filter '*.ps1') {
    . $privateScript.FullName
}

$newConfigSplat = @{
    Config = $Config
}
if (Get-Variable -Name BuildRoot -ErrorAction SilentlyContinue) {
    $newConfigSplat.BuildRoot = $BuildRoot
}
$script:PlumberConfig = New-PlumberConfig @newConfigSplat
$script:PlumberConfig.ModuleRoot = $moduleRoot
$script:PlumberTaskJobs = Initialize-PlumberTaskGraph

$taskRoot = Join-Path $moduleRoot 'Tasks'
. (Join-Path $taskRoot 'SetVariables.ps1')

foreach ($taskGroup in Get-PlumberTaskGroup) {
    Add-PlumberTaskGroup -TaskGroup $taskGroup -TaskRoot $taskRoot
}

Add-PlumberLocalTask
Add-PlumberTask -Name Validate -Path 'Pipeline/Validate.ps1' -TaskRoot $taskRoot