* Auto update package versions upon release generation - Adapted from .Net package incrementing - https://github.com/Azure/azure-sdk-for-net/blob/master/eng/Update-PkgVersion.ps1 - Seed Changelog file to allow updates to happen * Spelling fix
143 lines
5.0 KiB
PowerShell
143 lines
5.0 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Bumps up package versions after release
|
|
|
|
.DESCRIPTION
|
|
This script bumps up package versions following conventions defined at https://github.com/Azure/azure-sdk/blob/master/docs/policies/releases.md#incrementing-after-release-cpp
|
|
|
|
.PARAMETER RepoRoot
|
|
The Root of the repo
|
|
|
|
.PARAMETER ServiceDirectory
|
|
The Name of the Service Directory
|
|
|
|
.PARAMETER PackageName
|
|
The Name of the Package
|
|
|
|
.PARAMETER PackageDirName
|
|
Used in the case where the package directory name is different from the package name. e.g in cognitiveservice packages
|
|
|
|
.PARAMETER NewVersionString
|
|
Use this to overide version incement logic and set a version specified by this parameter
|
|
|
|
|
|
.EXAMPLE
|
|
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
|
|
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
Param (
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $RepoRoot = "${PSScriptRoot}/..",
|
|
[Parameter(Mandatory=$True)]
|
|
[string] $ServiceDirectory,
|
|
[Parameter(Mandatory=$True)]
|
|
[string] $PackageName,
|
|
[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)
|
|
{
|
|
Write-Verbose "New Version: ${NewPackageVersion}"
|
|
Set-Content -Path $PackageVersionPath -Value ${NewPackageVersion}
|
|
|
|
# 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
|
|
}
|
|
}
|
|
|
|
# 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)
|
|
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
|
|
}
|
|
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
|
|
}
|