Set-PowerShellModuleMetadataBeforeBuild.ps1

function Set-PowerShellModuleMetadataBeforeBuild {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$path
    )

    # The purpose of this script is to avoid having to manually increment the prerelease suffix on each build.
    # We want each build to just have an auto-incrementing number (or similar) without any manual labor needed.

    # We do a text search & replace here. While we could properly parse the input, we would need to text edit
    # to do the modification, so let's not bother with parsing if we need to string manipulate in the end anyway.
    $manifestText = Get-Content $path

    $searchPattern = "^\s*Prerelease = '(.+)'\s*`$"

    $prereleaseTagLine = $manifestText | Where-Object { $_ -match $searchPattern }

    if (!$prereleaseTagLine) {
        # If there is no match then either the line was commented out, missing or had an empty string value.
        # This means it is not a prerelease, so nothing more we need to do.
        return
    }

    if ($prereleaseTagLine.Count -ne 1) {
        Write-Error "More than one line matched the prerelease version declaration."
    }

    # If we do make a prerelease build, we put "-pre-123456" as the suffix, with the number being the build ID.
    # The build ID is auto-incrementing as long as we use the same Azure Devops account, so it's all taken care of.
    $buildId = ([int]$env:BUILD_BUILDID).ToString("000000")
    $prereleaseSuffix = "-pre$buildId"

    Write-Host "Setting prerelease version suffix: $prereleaseSuffix"

    $updatedManifestText = $manifestText -replace $searchPattern, "Prerelease = '$prereleaseSuffix'"

    Set-Content $path $updatedManifestText
}