Consolidate Powershell version parsing to eng\common (#59)

* Consolidate Powershell version parsing to eng\common
This commit is contained in:
Danny Amirault 2020-04-09 12:46:08 -07:00 committed by GitHub
parent 10f27f2034
commit e7975164a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -22,14 +22,11 @@ Use this to overide version incement logic and set a version specified by this p
.EXAMPLE
Updating package version for Azure.Core
Update-PkgVersion.ps1 -ServiceDirectory core -PackageName Azure.Core
Updating package version for azure-core
Update-PkgVersion.ps1 -ServiceDirectory core -PackageName azure-core
Updating package version for Azure.Core with a specified verion
Update-PkgVersion.ps1 -ServiceDirectory core -PackageName Azure.Core -NewVersionString 2.0.5
Updating package version for Microsoft.Azure.CognitiveServices.AnomalyDetector
Update-PkgVersion.ps1 -ServiceDirectory cognitiveservices -PackageName Microsoft.Azure.CognitiveServices.AnomalyDetector -PackageDirName AnomalyDetector
Updating package version for azure-core with a specified verion
Update-PkgVersion.ps1 -ServiceDirectory core -PackageName azure-core -NewVersionString 2.0.5
#>
@ -44,99 +41,41 @@ Param (
[string] $PackageDirName,
[string] $NewVersionString
)
# Regular expression as specified in https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
$VERSION_REGEX = "^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$"
# Updated Version in csproj and changelog using computed or set NewVersionString
function Update-Version($Unreleased=$True, $ReplaceVersion=$False)
. ${PSScriptRoot}\common\scripts\SemVer.ps1
# Updated Version in version file and changelog using computed or set NewVersionString
function Update-Version([AzureEngSemanticVersion]$SemVer, $Unreleased=$True, $ReplaceVersion=$False)
{
Write-Verbose "New Version: ${NewPackageVersion}"
Set-Content -Path $PackageVersionPath -Value ${NewPackageVersion}
Write-Verbose "New Version: $SemVer"
if ($SemVer.HasValidPrereleaseLabel() -ne $true){
Write-Error "Invalid prerelease label"
exit 1
}
Set-Content -Path $PackageVersionPath -Value $SemVer.ToString()
# Increment Version in ChangeLog file
& "${PSScriptRoot}/common/Update-Change-Log.ps1" -Version $NewPackageVersion -ChangeLogPath $ChangelogPath -Unreleased $Unreleased -ReplaceVersion $ReplaceVersion
}
# Parse a VersionString to verify that it is right
function Parse-Version($VersionString)
{
if ([System.String]::IsNullOrEmpty($VersionString))
{
Write-Error "Missing or Empty Version property ${VersionString}"
exit 1
}
if ($VersionString -Match $VERSION_REGEX)
{
if($Matches[4] -eq $null){$Pre = @()}
else{$Pre = $Matches[4].Split(".")}
$VersionTable = @{
major = [int]$Matches[1]
minor = [int]$Matches[2]
patch = [int]$Matches[3]
pretag = [string]$Pre[0]
prever = [int]$Pre[1]
}
if ($VersionTable['pretag'] -ne '' -and $VersionTable['pretag'] -ne 'preview')
{
Write-Error "Unexpected pre-release identifier '$($VersionTable['pretag'])', should be 'preview'"
exit 1
}
if ($VersionTable['pretag'] -eq 'preview' -and $VersionTable['prever'] -lt 1)
{
Write-Error "Unexpected pre-release version '$($VersionTable['prever'])', should be greater than '1'"
exit 1
}
return $VersionTable
}
else
{
Write-Error "Version property contains incorrect format. It should be in format 'X.Y.Z[-preview.N]'"
exit 1
}
& "${PSScriptRoot}/common/Update-Change-Log.ps1" -Version $SemVer.ToString() -ChangeLogPath $ChangelogPath -Unreleased $Unreleased -ReplaceVersion $ReplaceVersion
}
# Obtain Current Package Version
if ([System.String]::IsNullOrEmpty($PackageDirName)) {$PackageDirName = $PackageName}
$PackageVersionPath = Join-Path $RepoRoot "sdk" $ServiceDirectory $PackageDirName "version.txt"
$ChangelogPath = Join-Path $RepoRoot "sdk" $ServiceDirectory $PackageDirName "CHANGELOG.md"
$PackageVersion = Get-Content -Path $PackageVersionPath
if ([System.String]::IsNullOrEmpty($NewVersionString))
{
$VersionTable = Parse-Version($PackageVersion)
$SemVer = [AzureEngSemanticVersion]::new($PackageVersion)
Write-Verbose "Current Version: ${PackageVersion}"
# Increment Version
if ([System.String]::IsNullOrEmpty($VersionTable['pretag']))
{
$VersionTable['pretag'] = 'preview'
$VersionTable['prever'] = 1
$VersionTable['minor']++
$VersionTable['patch'] = 0
}
else
{
$VersionTable['prever']++
}
$NewPackageVersion = "{0}.{1}.{2}-{3}.{4}" -F $VersionTable['major'], $VersionTable['minor'], $VersionTable['patch'], $VersionTable['pretag'], $VersionTable['prever']
Update-Version
$SemVer.IncrementAndSetToPrerelease()
Update-Version -SemVer $SemVer
}
else
{
# Use specified VersionString
$VersionTable = Parse-Version($NewVersionString)
if ($VersionTable['pretag'] -eq '')
{
$NewPackageVersion = "{0}.{1}.{2}" -F $VersionTable['major'], $VersionTable['minor'], $VersionTable['patch']
}
else
{
$NewPackageVersion = "{0}.{1}.{2}-{3}.{4}" -F $VersionTable['major'], $VersionTable['minor'], $VersionTable['patch'], $VersionTable['pretag'], $VersionTable['prever']
}
Update-Version -Unreleased $False -ReplaceVersion $True
$SemVer = [AzureEngSemanticVersion]::new($NewVersionString)
Update-Version -SemVer $SemVer -Unreleased $False -ReplaceVersion $True
}