Tasks/BuildModule.ps1

<#
    .SYNOPSIS
    Builds a publishable Plumber module folder.

    .DESCRIPTION
    This is an internal build task for Plumber, and not part of the core task list.

    Creates a clean module folder under `out/Plumber` using an explicit
    allow-list of files and folders required for publishing.

    .RUN
    ```powershell
    Invoke-Build -File ./Plumber.build.ps1 -Task BuildModule
    ```
#>

Add-BuildTask -Name BuildModule -Jobs {
    $outputRoot = Join-Path $BuildRoot 'out'
    $moduleOutputRoot = Join-Path $outputRoot 'Plumber'

    if (Test-Path $moduleOutputRoot) {
        Remove-Item $moduleOutputRoot -Recurse -Force
    }
    New-Item -Path $moduleOutputRoot -ItemType Directory -Force | Out-Null

    $items = @(
        'Private',
        'Public',
        'Resource',
        'Tasks',
        'docs',
        'LICENSE',
        'README.md',
        'changelog.md',
        'Plumber.psd1',
        'Plumber.psm1'
    )

    foreach ($item in $items) {
        $source = Join-Path $BuildRoot $item
        if (-not (Test-Path $source)) {
            Write-Error "Required publish item not found: $item"
            continue
        }

        Copy-Item -Path $source -Destination $moduleOutputRoot -Recurse -Force
    }

    $manifestPath = Join-Path $moduleOutputRoot 'Plumber.psd1'
    Test-ModuleManifest -Path $manifestPath | Out-Null
    Import-Module $manifestPath -Force -PassThru | Out-Null
    Write-Build Green "Built publish folder: $moduleOutputRoot"
}