Public/Get-NextPSGalleryVersion.ps1
function Get-NextPSGalleryVersion { <# .SYNOPSIS Get the next version for a module or script in the PowerShell Gallery .FUNCTIONALITY CI/CD .DESCRIPTION Get the next version for a module or script in the PowerShell Gallery Uses the versioning scheme adopted by the user Where possible, users should stick to semver: http://semver.org/ (Major.Minor.Patch, given restrictions .NET Version class) This requires the PowerShellGet module .PARAMETER Name Name of the PowerShell module or script .PARAMETER Type Module or script. Defaults to module. .EXAMPLE Get-NextPSGalleryVersion PSDeploy .EXAMPLE Get-NextPSGalleryVersion Open-ISEFunction -Type Script .LINK https://github.com/RamblingCookieMonster/BuildHelpers .LINK about_BuildHelpers #> [cmdletbinding()] param( [parameter(ValueFromPipelineByPropertyName=$True)] [string[]]$Name, [parameter(ValueFromPipelineByPropertyName=$True)] [ValidateSet('Module', 'Script')] [string]$Type = 'Module', [string]$Repository = 'PSGallery' ) Process { foreach($Item in $Name) { Try { $Existing = $null if($Type -eq 'Module') { $Existing = Find-Module -Name $Item -Repository $Repository -ErrorAction Stop } else # Script { $Existing = Find-Script -Name $Item -Repository $Repository -ErrorAction Stop } } Catch { Write-Error $_ continue } if($Existing.count -gt 1) { Write-Error "Found more than one $Type matching '$Item': Did you use a wildcard?" continue } elseif($Existing.count -eq 0) { Write-Error "Found no $Type matching '$Item'" continue } else { $Version = $Existing.Version } # using revision if($Version.Revision -ge 0) { $Build = if($Version.Build -le 0) { 0 } else { $Version.Build } $Revision = if($Version.Revision -le 0) { 1 } else { $Version.Revision + 1 } New-Object System.Version ($Version.Major, $Version.Minor, $Build, $Revision) } # using build elseif($Version.Build -ge 0) { $Build = if($Version.Build -le 0) { 1 } else { $Version.Build + 1 } New-Object System.Version ($Version.Major, $Version.Minor, $Build) } # using minor. wat? elseif($Version.Minor -ge 0) { $Minor = if($Version.Minor -le 0) { 1 } else { $Version.Minor + 1 } New-Object System.Version ($Version.Major, $Minor) } # using major only. I don't even. else { New-Object System.Version ($Version.Major + 1, 0) } } } } |