Private/BasicTools.Version.ps1
function Get-PreReleaseString{ <# .DESCRIPTION Get the pre-release string from a release note file. .PARAMETER ReleaseNotesPath The release note file path. .INPUTS String. .OUTPUTS String. #> [OutputType([string])] param( [Parameter(Mandatory)] [string]$ReleaseNotesPath ) $release_title = Get-Content $ReleaseNotesPath | Select-String -Pattern "^## " | Select-Object -First 1 if ($release_title -match 'v([\d]+\.[\d]+\.[\d]+)[\-]*(.*)'){ $pre_release_string = $Matches[2] if ($pre_release_string -match 'beta[\d+]|stable'){ $result = $pre_release_string.ToLower() if ($result -eq 'stable'){ return '' # stable version should not have pre-release string } else{ return $result } } else{ throw "[Invalid pre-release string] The pre-release string in $ReleaseNotesPath is $pre_release_string, but it should one be 'stable' or 'beta0', 'beta1' etc." } }else{ return '' } } function Assert-ReleaseVersionConsistency{ <# .DESCRIPTION Assert if the release version in the release note file is consistent with the given version. .PARAMETER Version The version. .PARAMETER ReleaseNotesPath The release note file path. .INPUTS String. String. .OUTPUTS None. #> param( [Parameter(Mandatory)] [string]$Version, [Parameter(Mandatory)] [string]$ReleaseNotesPath ) $release_title = Get-Content $ReleaseNotesPath | Select-String -Pattern "^# " | Select-Object -First 1 if ($release_title -match 'v([\d]+\.[\d]+\.[\d]+)'){ $release_version = $Matches[1] if (!($release_version -ceq $Version)){ throw "[Imcompatible version] The newest version in $ReleaseNotesPath is $release_version, but it should be $Version." } }else{ throw "[Invalid release title] The release title in $ReleaseNotesPath is $release_title, but it should be like '# xxx v0.0.1'." } } |