Tasks/ReleaseHygiene/ModuleVersion.ps1

<#
    .SYNOPSIS
    Validates current PSD1 version is higher than current PSGallery version.

    .DESCRIPTION
    Looks up the module on PSGallery and fails when the configured manifest
    version is not greater than the published version.

    .GROUP
    ReleaseHygiene

    .CONFIGURATION
    `ModuleManifest` controls which module manifest supplies the module name
    and `ModuleVersion`.

    ### Example

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

    .RUN
    ```powershell
    Invoke-Plumber -Task ModuleVersion
    ```

    .PASS
    ```powershell
    ModuleVersion = '1.2.3'
    ```

    .FAIL
    ```powershell
    ModuleVersion = '1.2.2'
    ```
#>

Add-BuildTask -Name ModuleVersion -Jobs SetVariables, {
    $publishedModule = Find-Module $script:moduleName -ErrorAction SilentlyContinue
    if (-not $publishedModule) {
        Write-Build Yellow "$script:moduleName is not published to PSGallery"
        return
    }

    $publishedVersion = [version]$publishedModule.Version
    $psd1Version = [version]$script:psd1.ModuleVersion
    if ($psd1Version -le $publishedVersion) {
        Write-Error (
            'PSD1 version might be out of date. ' +
            "PSD1 version $psd1Version " +
            "Published version $publishedVersion"
        )
    }
}