Private/Get-KadenReleasePublishDecision.ps1

function Get-KadenReleasePublishDecision {
    <#
    .SYNOPSIS
        Decide whether a release may be published, without writing or publishing.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$Tag,

        [Parameter(Mandatory = $true)]
        [bool]$ProvenanceEligible,

        [string]$ProvenanceFailure,

        [Parameter(Mandatory = $true)]
        [bool]$KeyReady,

        [string]$KeyFailure,

        [Parameter(Mandatory = $true)]
        [bool]$VersionAlreadyPublished
    )

    $moduleVersion = $null
    $recordedTag = $null
    $failed = $null
    if ($Tag -match '^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$') {
        $moduleVersion = $Tag.Substring(1)
        $recordedTag = $Tag
    }
    else {
        $failed = 'KDN-RELEASE-TAG-SEMVER: Tag is not a semver release tag.'
    }

    if (-not $failed -and -not $ProvenanceEligible) {
        $failed = Get-KadenPublishSafeFailure -Candidate $ProvenanceFailure -Fallback 'KDN-RELEASE-PROVENANCE: Publication is not eligible.'
    }
    if (-not $failed -and -not $KeyReady) {
        $failed = Get-KadenPublishSafeFailure -Candidate $KeyFailure -Fallback 'KDN-RELEASE-KEY-ABSENT: The publication key is not in the release secret store.'
    }
    if (-not $failed -and $VersionAlreadyPublished) {
        $failed = 'KDN-RELEASE-VERSION-PUBLISHED: Issue a later version. The published version is not replaced.'
    }

    return [pscustomobject]@{
        FailedRequirement = $failed
        ModuleVersion     = $moduleVersion
        Tag               = $recordedTag
    }
}