Private/Get-PlumberReleaseState.ps1

function Get-PlumberReleaseState {
    <#
        .SYNOPSIS
        Gets release state for the configured module.
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [psobject]
        $Config
    )

    $manifest = Test-ModuleManifest -Path $Config.ModuleManifest
    $version = $manifest.Version.ToString()
    $tagName = "v$version"

    $existingLocalTag = git -C $Config.ModuleRoot tag --list $tagName
    $existingRemoteTag = git -C $Config.ModuleRoot ls-remote --tags $Config.GitRemote "refs/tags/$tagName"

    $currentTag = $env:GITHUB_REF_NAME
    if (-not $currentTag) {
        $currentTag = git -C $Config.ModuleRoot describe --tags --exact-match 2>$null
    }

    $tagRefs = @(
        git -C $Config.ModuleRoot tag --list
        git -C $Config.ModuleRoot ls-remote --tags $Config.GitRemote
    )
    $latestVersion = $null
    foreach ($tagRef in $tagRefs) {
        $tag = if ($tagRef -match 'refs/tags/(?<TagName>[^\^]+)(?:\^\{\})?$') {
            $Matches.TagName
        } else {
            $tagRef
        }
        $parsedVersion = ConvertTo-PlumberReleaseSemVer -VersionName $tag
        if ($parsedVersion -and ($null -eq $latestVersion -or $parsedVersion -gt $latestVersion)) {
            $latestVersion = $parsedVersion
        }
    }

    [pscustomobject]@{
        Version           = $version
        VersionInfo       = ConvertTo-PlumberReleaseSemVer -VersionName $version
        TagName           = $tagName
        CurrentTag        = $currentTag
        ExistingLocalTag  = [bool]$existingLocalTag
        ExistingRemoteTag = [bool]$existingRemoteTag
        LatestTagVersion  = $latestVersion
    }
}