Public/Invoke-PSModulePublisher.ps1

#########################################################################################################################################################
# This function is designed for use in development environments for executing the same build, test, and publish steps that will run in CI environments. #
# You can use the provided switches to test the publishing process in your development environment. #
#########################################################################################################################################################

function Invoke-PSModulePublisher {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$false,HelpMessage="Name of the PowerShell repository")]
        [ValidateNotNullOrEmpty()]
        [string]$Repository
        ,
        [Parameter(Mandatory=$false,HelpMessage="Perform a dry run when publishing the module")]
        [switch]$DryRun
    )

    Set-StrictMode -Version Latest
    $ErrorActionPreference = 'Stop'

    try {
        # Run the build entrypoint script
        $manifestPath = Invoke-Build

        # Run the test entrypoint script
        Invoke-Test -ModuleManifestPath $manifestPath

        # Run the publish entrypoint script
        if ($Repository) {
            Invoke-Publish -ModuleManifestPath $manifestPath -Repository $Repository -DryRun:$DryRun
        }else {
            "Unspecified PS Repository. The module will not be published." | Write-Warning
        }
    }catch {
        throw
    }
}