Modules/businessdev.ALbuild.Apps/Public/Get-BcVersionComponents.ps1

function Get-BcVersionComponents {
    <#
    .SYNOPSIS
        Splits a Business Central version into its components plus a 3-part SemVer form.
    .DESCRIPTION
        Pure helper (no I/O, unit-testable) used by the Stamp Build Version task to expose the version
        as individual pipeline variables. Missing lower components are normalised to 0 (a 2-part '1.2'
        yields Build 0, Revision 0). The 'Short' value (Major.Minor.Build) is a valid 3-part SemVer for
        feeds that reject a 4-part version - e.g. Azure Universal Packages, which require X.Y.Z.
    .PARAMETER Version
        The version to split (e.g. '1.2.588.26440'). Accepts anything [version] can parse.
    .OUTPUTS
        PSCustomObject: Major, Minor, Build, Revision (int) and Short (string 'Major.Minor.Build').
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Returns the set of version components; the plural noun is intentional and clearer.')]
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [version] $Version
    )

    $major = $Version.Major
    $minor = $Version.Minor
    $build = [Math]::Max($Version.Build, 0)
    $revision = [Math]::Max($Version.Revision, 0)

    [PSCustomObject]@{
        Major    = $major
        Minor    = $minor
        Build    = $build
        Revision = $revision
        Short    = '{0}.{1}.{2}' -f $major, $minor, $build
    }
}