templates/t_build_utils.ps1

$BuildUtilsFileContent = @"
<#
.SYNOPSIS
    Publish a PowerShell to a PSRepository.
.DESCRIPTION
    This function publishes a module to a PSRepository. It checks the current version on the destination
    repository and compares it with the build number. It updates the Module Manifest at publishing.
.NOTES
    Written by Michael Willis xainey@github - https://github.com/xainey.
    Reworked by Karl Wallenius, KarlGW@github - https://github.com/KarlGW
 
    Supports PSGallery as well after update.
#>
function Publish-PSModule {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=`$true)]
        [string]
        `$RepositoryName,
        [Parameter(Mandatory=`$false)]
        [string]
        `$RepositoryPath,
        [Parameter(Mandatory=`$true)]
        [string]
        `$ModuleName,
        [Parameter(Mandatory=`$true)]
        [string]
        `$ModulePath,
        [Parameter(Mandatory=`$false)]
        `$ApiKey,
        [Parameter(Mandatory=`$true)]
        [int]
        `$BuildNumber
    )
 
    `$psGalleryName = 'PSGallery'
 
    # Test if the repository is registered.
    Write-Verbose ("Checking if Repository: {0} is registered." -f `$RepositoryName)
    if (!(Get-PSRepository -Name `$RepositoryName -ErrorAction SilentlyContinue)) {
        # Check if the Network Path exists.
        if(!(Test-Path `$RepositoryPath)) {
            throw "The path does not exist. Please connect to the share."
        } else {
            # Register the Repository.
            if (`$RepositoryName -ne `$psGalleryName) {
                Write-Verbose("Registering Repository: {0}." -f `$RepositoryName)
                Register-PSRepository
                    -Name `$RepositoryName
                    -SourceLocation `$RepositoryPath
                    -PublishLocation `$RepositoryPath
                    -InstallationPolicy Trusted
            }
        }
    }
 
    # Update existing manifest.
    Write-Verbose("Checking if Module: {0} is registered." -f `$ModuleName)
    if (Find-Module -Repository `$RepositoryName -Name `$ModuleName -ErrorAction SilentlyContinue) {
        Write-Verbose ("Updating Manifest for: {0}." -f `$ModuleName)
        `$version = (Get-Module -FullyQualifiedName `$ModulePath -ListAvailable).Version | Select-Object Major, Minor
        `$newVersion = New-Object Version -ArgumentList `$version.major, `$version.minor, `$BuildNumber
        Update-ModuleManifest -Path `$ModulePath -ModuleVersion `$newVersion
    }
 
    # Publish Module.
    Write-Verbose ("Publishing Module: {0}." -f `$ModuleName)
 
    # Determine type of publish.
 
    `$publishParams = @{
        Repository = `$RepositoryName
        Path = ".\`$ModuleName"
    }
 
    if (`$RepositoryName -eq `$psGalleryName) {
        if ([string]::IsNullOrEmpty(`$ApiKey)) {
            throw("Please pass on a NuGet API key to deploy to the PSGallery.")
        } else {
            `$publishParams.Name = `$ModuleName
            `$publishParams.NuGetApiKey = `$ApiKey
        }
    }
 
    try {
 
        Publish-Module @`$publishParams
 
    } catch [System.Exception] {
        throw(`$_.Exception)
    }
}
"@