diff --git a/eng/Update-PkgVersion.ps1 b/eng/Update-PkgVersion.ps1 index 188b92867..0bc63d9e7 100644 --- a/eng/Update-PkgVersion.ps1 +++ b/eng/Update-PkgVersion.ps1 @@ -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 }