...

Text file src/github.com/Azure/azure-sdk-for-go/eng/common/scripts/Update-ChangeLog.ps1

Documentation: github.com/Azure/azure-sdk-for-go/eng/common/scripts

     1# Note: This script will add or replace version title in change log
     2
     3# Parameter description
     4# Version : Version to add or replace in change log
     5# Unreleased: Default is true. If it is set to false, then today's date will be set in verion title. If it is True then title will show "Unreleased"
     6# ReplaceLatestEntryTitle: Replaces the latest changelog entry title.
     7
     8[CmdletBinding()]
     9param (
    10  [Parameter(Mandatory = $true)]
    11  [String]$Version,
    12  [String]$ServiceDirectory,
    13  [String]$PackageName,
    14  [Boolean]$Unreleased = $true,
    15  [Boolean]$ReplaceLatestEntryTitle = $false,
    16  [String]$ChangelogPath,
    17  [String]$ReleaseDate
    18)
    19Set-StrictMode -Version 3
    20
    21. (Join-Path $PSScriptRoot common.ps1)
    22
    23if ($ReleaseDate -and $Unreleased) {
    24    LogError "Do not pass 'ReleaseDate' arguement when 'Unreleased' is true"
    25    exit 1
    26}
    27
    28if (!$PackageName -and !$ChangelogPath) {
    29    LogError "You must pass either the PackageName or ChangelogPath arguument."
    30    exit 1
    31}
    32
    33if ($ReleaseDate)
    34{
    35    try {
    36        $ReleaseStatus = ([DateTime]$ReleaseDate).ToString($CHANGELOG_DATE_FORMAT)
    37        $ReleaseStatus = "($ReleaseStatus)"
    38    }
    39    catch {
    40        LogError "Invalid 'ReleaseDate'. Please use a valid date in the format '$CHANGELOG_DATE_FORMAT'. See https://aka.ms/azsdk/changelogguide"
    41        exit 1
    42    }
    43}
    44elseif ($Unreleased)
    45{
    46    $ReleaseStatus = $CHANGELOG_UNRELEASED_STATUS
    47}
    48else
    49{
    50    $ReleaseStatus = "$(Get-Date -Format $CHANGELOG_DATE_FORMAT)"
    51    $ReleaseStatus = "($ReleaseStatus)"
    52}
    53
    54if ($null -eq [AzureEngSemanticVersion]::ParseVersionString($Version))
    55{
    56    LogError "Version [$Version] is invalid. Please use a valid SemVer. See https://aka.ms/azsdk/changelogguide"
    57    exit 1
    58}
    59
    60if ([string]::IsNullOrEmpty($ChangelogPath))
    61{
    62    $pkgProperties = Get-PkgProperties -PackageName $PackageName -ServiceDirectory $ServiceDirectory
    63    $ChangelogPath = $pkgProperties.ChangeLogPath
    64}
    65
    66if (!(Test-Path $ChangelogPath))
    67{
    68    LogError "Changelog path [$ChangelogPath] is invalid."
    69    exit 1
    70}
    71
    72$ChangeLogEntries = Get-ChangeLogEntries -ChangeLogLocation $ChangelogPath
    73
    74if ($ChangeLogEntries.Contains($Version))
    75{
    76    if ($ChangeLogEntries[$Version].ReleaseStatus -eq $ReleaseStatus)
    77    {
    78        LogDebug "Version [$Version] is already present in change log with specificed ReleaseStatus [$ReleaseStatus]. No Change made."
    79        exit(0)
    80    }
    81
    82    if ($Unreleased -and ($ChangeLogEntries[$Version].ReleaseStatus -ne $ReleaseStatus))
    83    {
    84        LogDebug "Version [$Version] is already present in change log with a release date. Please review [$ChangelogPath]. No Change made."
    85        exit(0)
    86    }
    87
    88    if (!$Unreleased -and ($ChangeLogEntries[$Version].ReleaseStatus -ne $CHANGELOG_UNRELEASED_STATUS))
    89    {
    90        if ((Get-Date ($ChangeLogEntries[$Version].ReleaseStatus).Trim("()")) -gt (Get-Date $ReleaseStatus.Trim("()")))
    91        {
    92            LogDebug "New ReleaseDate for version [$Version] is older than existing release date in changelog. Please review [$ChangelogPath]. No Change made."
    93            exit(0)
    94        }
    95    }
    96}
    97
    98$PresentVersionsSorted = [AzureEngSemanticVersion]::SortVersionStrings($ChangeLogEntries.Keys)
    99$LatestVersion = $PresentVersionsSorted[0]
   100
   101LogDebug "The latest release note entry in the changelog is for version [$($LatestVersion)]"
   102
   103$LatestsSorted = [AzureEngSemanticVersion]::SortVersionStrings(@($LatestVersion, $Version))
   104if ($LatestsSorted[0] -ne $Version) {
   105    LogWarning "Version [$Version] is older than the latestversion [$LatestVersion] in the changelog. Consider using a more recent version."
   106}
   107
   108if ($ReplaceLatestEntryTitle)
   109{
   110    $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader -Content $ChangeLogEntries[$LatestVersion].ReleaseContent
   111    LogDebug "Resetting latest entry title to [$($newChangeLogEntry.ReleaseTitle)]"
   112    $ChangeLogEntries.Remove($LatestVersion)
   113    if ($newChangeLogEntry) {
   114        $ChangeLogEntries.Insert(0, $Version, $newChangeLogEntry)
   115    }
   116    else {
   117        LogError "Failed to create new changelog entry"
   118        exit 1
   119    }
   120}
   121elseif ($ChangeLogEntries.Contains($Version))
   122{
   123    LogDebug "Updating ReleaseStatus for Version [$Version] to [$($ReleaseStatus)]"
   124    $ChangeLogEntries[$Version].ReleaseStatus = $ReleaseStatus
   125    $ChangeLogEntries[$Version].ReleaseTitle = "$($ChangeLogEntries.InitialAtxHeader)# $Version $ReleaseStatus"
   126}
   127else
   128{
   129    LogDebug "Adding new ChangeLog entry for Version [$Version]"
   130    $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader
   131    if ($newChangeLogEntry) {
   132        $ChangeLogEntries.Insert(0, $Version, $newChangeLogEntry)
   133    }
   134    else {
   135        LogError "Failed to create new changelog entry"
   136        exit 1
   137    }
   138}
   139
   140Set-ChangeLogContent -ChangeLogLocation $ChangelogPath -ChangeLogEntries $ChangeLogEntries

View as plain text