diff --git a/eng/common/scripts/ChangeLog-Operations.ps1 b/eng/common/scripts/ChangeLog-Operations.ps1 index 02f4981302466..af71628442dec 100644 --- a/eng/common/scripts/ChangeLog-Operations.ps1 +++ b/eng/common/scripts/ChangeLog-Operations.ps1 @@ -3,7 +3,7 @@ . "${PSScriptRoot}\SemVer.ps1" $RELEASE_TITLE_REGEX = "(?^\#+\s+(?$([AzureEngSemanticVersion]::SEMVER_REGEX))(\s+(?\(.+\))))" -$SECTION_HEADER_REGEX_SUFFIX = "##\s(?.*)" +$SECTIONS_HEADER_REGEX = "^###+\s(?.*)" $CHANGELOG_UNRELEASED_STATUS = "(Unreleased)" $CHANGELOG_DATE_FORMAT = "yyyy-MM-dd" $RecommendedSectionHeaders = @("Features Added", "Breaking Changes", "Bugs Fixed", "Other Changes") @@ -49,7 +49,6 @@ function Get-ChangeLogEntriesFromContent { $initialAtxHeader = $matches["HeaderLevel"] } - $sectionHeaderRegex = "^${initialAtxHeader}${SECTION_HEADER_REGEX_SUFFIX}" $changeLogEntries | Add-Member -NotePropertyName "InitialAtxHeader" -NotePropertyValue $initialAtxHeader $releaseTitleAtxHeader = $initialAtxHeader + "#" @@ -68,7 +67,7 @@ function Get-ChangeLogEntriesFromContent { } else { if ($changeLogEntry) { - if ($line.Trim() -match $sectionHeaderRegex) + if ($line.Trim() -match $SECTIONS_HEADER_REGEX) { $sectionName = $matches["sectionName"].Trim() $changeLogEntry.Sections[$sectionName] = @() @@ -137,24 +136,16 @@ function Confirm-ChangeLogEntry { [String]$ChangeLogLocation, [Parameter(Mandatory = $true)] [String]$VersionString, - [boolean]$ForRelease = $false, - [Switch]$SantizeEntry + [boolean]$ForRelease = $false ) - $changeLogEntries = Get-ChangeLogEntries -ChangeLogLocation $ChangeLogLocation - $changeLogEntry = $changeLogEntries[$VersionString] + $changeLogEntry = Get-ChangeLogEntry -ChangeLogLocation $ChangeLogLocation -VersionString $VersionString if (!$changeLogEntry) { LogError "ChangeLog[${ChangeLogLocation}] does not have an entry for version ${VersionString}." return $false } - if ($SantizeEntry) - { - Remove-EmptySections -ChangeLogEntry $changeLogEntry -InitialAtxHeader $changeLogEntries.InitialAtxHeader - Set-ChangeLogContent -ChangeLogLocation $ChangeLogLocation -ChangeLogEntries $changeLogEntries - } - Write-Host "Found the following change log entry for version '${VersionString}' in [${ChangeLogLocation}]." Write-Host "-----" Write-Host (ChangeLogEntryAsString $changeLogEntry) @@ -317,11 +308,9 @@ function Set-ChangeLogContent { function Remove-EmptySections { param ( [Parameter(Mandatory = $true)] - $ChangeLogEntry, - $InitialAtxHeader = "#" + $ChangeLogEntry ) - $sectionHeaderRegex = "^${InitialAtxHeader}${SECTION_HEADER_REGEX_SUFFIX}" $releaseContent = $ChangeLogEntry.ReleaseContent if ($releaseContent.Count -gt 0) @@ -329,14 +318,14 @@ function Remove-EmptySections { $parsedSections = $ChangeLogEntry.Sections $sanitizedReleaseContent = New-Object System.Collections.ArrayList(,$releaseContent) - foreach ($key in @($parsedSections.Keys)) + foreach ($key in @($parsedSections.Key)) { if ([System.String]::IsNullOrWhiteSpace($parsedSections[$key])) { for ($i = 0; $i -lt $sanitizedReleaseContent.Count; $i++) { $line = $sanitizedReleaseContent[$i] - if ($line -match $sectionHeaderRegex -and $matches["sectionName"].Trim() -eq $key) + if ($line -match $SECTIONS_HEADER_REGEX -and $matches["sectionName"].Trim() -eq $key) { $sanitizedReleaseContent.RemoveAt($i) while($i -lt $sanitizedReleaseContent.Count -and [System.String]::IsNullOrWhiteSpace($sanitizedReleaseContent[$i])) @@ -351,4 +340,5 @@ function Remove-EmptySections { } $ChangeLogEntry.ReleaseContent = $sanitizedReleaseContent.ToArray() } -} \ No newline at end of file + return $changeLogEntry +} diff --git a/eng/common/scripts/Prepare-Release.ps1 b/eng/common/scripts/Prepare-Release.ps1 index 2005347822fd5..21f4f256830e6 100644 --- a/eng/common/scripts/Prepare-Release.ps1 +++ b/eng/common/scripts/Prepare-Release.ps1 @@ -184,7 +184,7 @@ else exit 1 } -$changelogIsValid = Confirm-ChangeLogEntry -ChangeLogLocation $packageProperties.ChangeLogPath -VersionString $newVersion -ForRelease $true -SantizeEntry +$changelogIsValid = Confirm-ChangeLogEntry -ChangeLogLocation $packageProperties.ChangeLogPath -VersionString $newVersion -ForRelease $true if (!$changelogIsValid) { diff --git a/eng/common/scripts/Update-ChangeLog.ps1 b/eng/common/scripts/Update-ChangeLog.ps1 index 6e09f369cec1b..9b9797e083a79 100644 --- a/eng/common/scripts/Update-ChangeLog.ps1 +++ b/eng/common/scripts/Update-ChangeLog.ps1 @@ -4,6 +4,7 @@ # Version : Version to add or replace in change log # 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" # ReplaceLatestEntryTitle: Replaces the latest changelog entry title. +# SanitizeEntry: Removes all empty section in the entry that is updated param ( [Parameter(Mandatory = $true)] @@ -13,7 +14,8 @@ param ( [Boolean]$Unreleased = $true, [Boolean]$ReplaceLatestEntryTitle = $false, [String]$ChangelogPath, - [String]$ReleaseDate + [String]$ReleaseDate, + [Boolean]$SanitizeEntry = $false ) Set-StrictMode -Version 3 @@ -106,7 +108,12 @@ if ($LatestsSorted[0] -ne $Version) { if ($ReplaceLatestEntryTitle) { - $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader -Content $ChangeLogEntries[$LatestVersion].ReleaseContent + $entryToBeUpdated = $ChangeLogEntries[$LatestVersion] + if ($SanitizeEntry) + { + $entryToBeUpdated = Remove-EmptySections -ChangeLogEntry $entryToBeUpdated + } + $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader -Content $entryToBeUpdated LogDebug "Resetting latest entry title to [$($newChangeLogEntry.ReleaseTitle)]" $ChangeLogEntries.Remove($LatestVersion) if ($newChangeLogEntry) { @@ -122,6 +129,10 @@ elseif ($ChangeLogEntries.Contains($Version)) LogDebug "Updating ReleaseStatus for Version [$Version] to [$($ReleaseStatus)]" $ChangeLogEntries[$Version].ReleaseStatus = $ReleaseStatus $ChangeLogEntries[$Version].ReleaseTitle = "$($ChangeLogEntries.InitialAtxHeader)# $Version $ReleaseStatus" + if ($SanitizeEntry) + { + $ChangeLogEntries[$Version] = Remove-EmptySections -ChangeLogEntry $ChangeLogEntries[$Version] + } } else {