From ea5eceaaaf43e29364d00f1b1f7cf1c0a717b9d7 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Fri, 17 Sep 2021 10:19:31 -0700 Subject: [PATCH] Sync eng/common directory with azure-sdk-tools for PR 2010 (#20729) * Remove empty sections in changelog entry as part of prepare release * Update SECTIONS_HEADER_REGEX to accomodate various header levels Co-authored-by: Chidozie Ononiwu --- eng/common/scripts/ChangeLog-Operations.ps1 | 28 ++++++++++++++------- eng/common/scripts/Prepare-Release.ps1 | 2 +- eng/common/scripts/Update-ChangeLog.ps1 | 15 ++--------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/eng/common/scripts/ChangeLog-Operations.ps1 b/eng/common/scripts/ChangeLog-Operations.ps1 index af71628442de..02f498130246 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+(?\(.+\))))" -$SECTIONS_HEADER_REGEX = "^###+\s(?.*)" +$SECTION_HEADER_REGEX_SUFFIX = "##\s(?.*)" $CHANGELOG_UNRELEASED_STATUS = "(Unreleased)" $CHANGELOG_DATE_FORMAT = "yyyy-MM-dd" $RecommendedSectionHeaders = @("Features Added", "Breaking Changes", "Bugs Fixed", "Other Changes") @@ -49,6 +49,7 @@ function Get-ChangeLogEntriesFromContent { $initialAtxHeader = $matches["HeaderLevel"] } + $sectionHeaderRegex = "^${initialAtxHeader}${SECTION_HEADER_REGEX_SUFFIX}" $changeLogEntries | Add-Member -NotePropertyName "InitialAtxHeader" -NotePropertyValue $initialAtxHeader $releaseTitleAtxHeader = $initialAtxHeader + "#" @@ -67,7 +68,7 @@ function Get-ChangeLogEntriesFromContent { } else { if ($changeLogEntry) { - if ($line.Trim() -match $SECTIONS_HEADER_REGEX) + if ($line.Trim() -match $sectionHeaderRegex) { $sectionName = $matches["sectionName"].Trim() $changeLogEntry.Sections[$sectionName] = @() @@ -136,16 +137,24 @@ function Confirm-ChangeLogEntry { [String]$ChangeLogLocation, [Parameter(Mandatory = $true)] [String]$VersionString, - [boolean]$ForRelease = $false + [boolean]$ForRelease = $false, + [Switch]$SantizeEntry ) - $changeLogEntry = Get-ChangeLogEntry -ChangeLogLocation $ChangeLogLocation -VersionString $VersionString + $changeLogEntries = Get-ChangeLogEntries -ChangeLogLocation $ChangeLogLocation + $changeLogEntry = $changeLogEntries[$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) @@ -308,9 +317,11 @@ function Set-ChangeLogContent { function Remove-EmptySections { param ( [Parameter(Mandatory = $true)] - $ChangeLogEntry + $ChangeLogEntry, + $InitialAtxHeader = "#" ) + $sectionHeaderRegex = "^${InitialAtxHeader}${SECTION_HEADER_REGEX_SUFFIX}" $releaseContent = $ChangeLogEntry.ReleaseContent if ($releaseContent.Count -gt 0) @@ -318,14 +329,14 @@ function Remove-EmptySections { $parsedSections = $ChangeLogEntry.Sections $sanitizedReleaseContent = New-Object System.Collections.ArrayList(,$releaseContent) - foreach ($key in @($parsedSections.Key)) + foreach ($key in @($parsedSections.Keys)) { if ([System.String]::IsNullOrWhiteSpace($parsedSections[$key])) { for ($i = 0; $i -lt $sanitizedReleaseContent.Count; $i++) { $line = $sanitizedReleaseContent[$i] - if ($line -match $SECTIONS_HEADER_REGEX -and $matches["sectionName"].Trim() -eq $key) + if ($line -match $sectionHeaderRegex -and $matches["sectionName"].Trim() -eq $key) { $sanitizedReleaseContent.RemoveAt($i) while($i -lt $sanitizedReleaseContent.Count -and [System.String]::IsNullOrWhiteSpace($sanitizedReleaseContent[$i])) @@ -340,5 +351,4 @@ function Remove-EmptySections { } $ChangeLogEntry.ReleaseContent = $sanitizedReleaseContent.ToArray() } - return $changeLogEntry -} +} \ No newline at end of file diff --git a/eng/common/scripts/Prepare-Release.ps1 b/eng/common/scripts/Prepare-Release.ps1 index 21f4f256830e..2005347822fd 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 +$changelogIsValid = Confirm-ChangeLogEntry -ChangeLogLocation $packageProperties.ChangeLogPath -VersionString $newVersion -ForRelease $true -SantizeEntry if (!$changelogIsValid) { diff --git a/eng/common/scripts/Update-ChangeLog.ps1 b/eng/common/scripts/Update-ChangeLog.ps1 index 9b9797e083a7..6e09f369cec1 100644 --- a/eng/common/scripts/Update-ChangeLog.ps1 +++ b/eng/common/scripts/Update-ChangeLog.ps1 @@ -4,7 +4,6 @@ # 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)] @@ -14,8 +13,7 @@ param ( [Boolean]$Unreleased = $true, [Boolean]$ReplaceLatestEntryTitle = $false, [String]$ChangelogPath, - [String]$ReleaseDate, - [Boolean]$SanitizeEntry = $false + [String]$ReleaseDate ) Set-StrictMode -Version 3 @@ -108,12 +106,7 @@ if ($LatestsSorted[0] -ne $Version) { if ($ReplaceLatestEntryTitle) { - $entryToBeUpdated = $ChangeLogEntries[$LatestVersion] - if ($SanitizeEntry) - { - $entryToBeUpdated = Remove-EmptySections -ChangeLogEntry $entryToBeUpdated - } - $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader -Content $entryToBeUpdated + $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus -InitialAtxHeader $ChangeLogEntries.InitialAtxHeader -Content $ChangeLogEntries[$LatestVersion].ReleaseContent LogDebug "Resetting latest entry title to [$($newChangeLogEntry.ReleaseTitle)]" $ChangeLogEntries.Remove($LatestVersion) if ($newChangeLogEntry) { @@ -129,10 +122,6 @@ 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 {