Skip to content

Commit

Permalink
Sync eng/common directory with azure-sdk-tools for PR 2963 (Azure#23920)
Browse files Browse the repository at this point in the history
* Verify changelog like a release is about to take place if a vlaid date is present

* Update eng/common/scripts/ChangeLog-Operations.ps1

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Update eng/common/scripts/ChangeLog-Operations.ps1

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Update eng/common/scripts/ChangeLog-Operations.ps1

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Update eng/common/scripts/ChangeLog-Operations.ps1

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Update eng/common/scripts/ChangeLog-Operations.ps1

Co-authored-by: Ben Broderick Phillips <ben@benbp.net>

* Remove strict date verification

* Add function for sorting changelog entries

* Minor cleanups

Co-authored-by: Chidozie Ononiwu <chononiw@microsoft.com>
Co-authored-by: Chidozie Ononiwu (His Righteousness) <31145988+chidozieononiwu@users.noreply.github.com>
Co-authored-by: Ben Broderick Phillips <ben@benbp.net>
  • Loading branch information
4 people authored Apr 9, 2022
1 parent 5f1fa99 commit baf4137
Showing 1 changed file with 99 additions and 62 deletions.
161 changes: 99 additions & 62 deletions eng/common/scripts/ChangeLog-Operations.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -165,61 +165,20 @@ function Confirm-ChangeLogEntry {
return $false
}

if ($ForRelease -eq $True) {
if ($changeLogEntry.ReleaseStatus -eq $CHANGELOG_UNRELEASED_STATUS) {
LogError "Entry has no release date set. Please ensure to set a release date with format '$CHANGELOG_DATE_FORMAT'. See https://aka.ms/azsdk/guideline/changelogs for more info."
return $false
}
else {
$status = $changeLogEntry.ReleaseStatus.Trim().Trim("()")
try {
$releaseDate = [DateTime]$status
if ($status -ne ($releaseDate.ToString($CHANGELOG_DATE_FORMAT)))
{
LogError "Date must be in the format $($CHANGELOG_DATE_FORMAT). See https://aka.ms/azsdk/guideline/changelogs for more info."
return $false
}
if (((Get-Date).AddMonths(-1) -gt $releaseDate) -or ($releaseDate -gt (Get-Date).AddMonths(1)))
{
LogError "The date must be within +/- one month from today. See https://aka.ms/azsdk/guideline/changelogs for more info."
return $false
}
}
catch {
LogError "Invalid date [ $status ] passed as status for Version [$($changeLogEntry.ReleaseVersion)]. See https://aka.ms/azsdk/guideline/changelogs for more info."
return $false
}
}

if ([System.String]::IsNullOrWhiteSpace($changeLogEntry.ReleaseContent)) {
LogError "Entry has no content. Please ensure to provide some content of what changed in this version. See https://aka.ms/azsdk/guideline/changelogs for more info."
return $false
}
if ($ForRelease -eq $True)
{
LogDebug "Verifying as a release build because ForRelease parameter is set to true"
return Confirm-ChangeLogForRelease -changeLogEntry $changeLogEntry -changeLogEntries $changeLogEntries
}

$foundRecomendedSection = $false
$emptySections = @()
foreach ($key in $changeLogEntry.Sections.Keys)
{
$sectionContent = $changeLogEntry.Sections[$key]
if ([System.String]::IsNullOrWhiteSpace(($sectionContent | Out-String)))
{
$emptySections += $key
}
if ($RecommendedSectionHeaders -contains $key)
{
$foundRecomendedSection = $true
}
}
if ($emptySections.Count -gt 0)
{
LogError "The changelog entry has the following sections with no content ($($emptySections -join ', ')). Please ensure to either remove the empty sections or add content to the section."
return $false
}
if (!$foundRecomendedSection)
{
LogWarning "The changelog entry did not contain any of the recommended sections ($($RecommendedSectionHeaders -join ', ')), pease add at least one. See https://aka.ms/azsdk/guideline/changelogs for more info."
}
# If the release status is a valid date then verify like its about to be released
$status = $changeLogEntry.ReleaseStatus.Trim().Trim("()")
if ($status -as [DateTime])
{
LogDebug "Verifying like it's a release build because the changelog entry has a valid date."
return Confirm-ChangeLogForRelease -changeLogEntry $changeLogEntry -changeLogEntries $changeLogEntries
}

return $true
}

Expand Down Expand Up @@ -291,15 +250,7 @@ function Set-ChangeLogContent {
$changeLogContent += "$($ChangeLogEntries.InitialAtxHeader) Release History"
$changeLogContent += ""

try
{
$ChangeLogEntries = $ChangeLogEntries.Values | Sort-Object -Descending -Property ReleaseStatus, `
@{e = {[AzureEngSemanticVersion]::new($_.ReleaseVersion)}}
}
catch {
LogError "Problem sorting version in ChangeLogEntries"
return
}
$ChangeLogEntries = Sort-ChangeLogEntries -changeLogEntries $ChangeLogEntries

foreach ($changeLogEntry in $ChangeLogEntries) {
$changeLogContent += $changeLogEntry.ReleaseTitle
Expand Down Expand Up @@ -362,4 +313,90 @@ function Get-LatestReleaseDateFromChangeLog
$changeLogEntries = Get-ChangeLogEntries -ChangeLogLocation $ChangeLogLocation
$latestVersion = $changeLogEntries[0].ReleaseStatus.Trim("()")
return ($latestVersion -as [DateTime])
}

function Sort-ChangeLogEntries {
param (
[Parameter(Mandatory = $true)]
$changeLogEntries
)

try
{
$changeLogEntries = $ChangeLogEntries.Values | Sort-Object -Descending -Property ReleaseStatus, `
@{e = {[AzureEngSemanticVersion]::new($_.ReleaseVersion)}}
}
catch {
LogError "Problem sorting version in ChangeLogEntries"
exit(1)
}
return $changeLogEntries
}

function Confirm-ChangeLogForRelease {
param (
[Parameter(Mandatory = $true)]
$changeLogEntry,
[Parameter(Mandatory = $true)]
$changeLogEntries
)

$entries = Sort-ChangeLogEntries -changeLogEntries $changeLogEntries

$isValid = $true
if ($changeLogEntry.ReleaseStatus -eq $CHANGELOG_UNRELEASED_STATUS) {
LogError "Entry has no release date set. Please ensure to set a release date with format '$CHANGELOG_DATE_FORMAT'. See https://aka.ms/azsdk/guideline/changelogs for more info."
$isValid = $false
}
else {
$status = $changeLogEntry.ReleaseStatus.Trim().Trim("()")
try {
$releaseDate = [DateTime]$status
if ($status -ne ($releaseDate.ToString($CHANGELOG_DATE_FORMAT)))
{
LogError "Date must be in the format $($CHANGELOG_DATE_FORMAT). See https://aka.ms/azsdk/guideline/changelogs for more info."
$isValid = $false
}

if (@($entries.ReleaseStatus)[0] -ne $changeLogEntry.ReleaseStatus)
{
LogError "Invalid date [ $status ]. The date for the changelog being released must be the latest in the file."
$isValid = $false
}
}
catch {
LogError "Invalid date [ $status ] passed as status for Version [$($changeLogEntry.ReleaseVersion)]. See https://aka.ms/azsdk/guideline/changelogs for more info."
$isValid = $false
}
}

if ([System.String]::IsNullOrWhiteSpace($changeLogEntry.ReleaseContent)) {
LogError "Entry has no content. Please ensure to provide some content of what changed in this version. See https://aka.ms/azsdk/guideline/changelogs for more info."
$isValid = $false
}

$foundRecommendedSection = $false
$emptySections = @()
foreach ($key in $changeLogEntry.Sections.Keys)
{
$sectionContent = $changeLogEntry.Sections[$key]
if ([System.String]::IsNullOrWhiteSpace(($sectionContent | Out-String)))
{
$emptySections += $key
}
if ($RecommendedSectionHeaders -contains $key)
{
$foundRecommendedSection = $true
}
}
if ($emptySections.Count -gt 0)
{
LogError "The changelog entry has the following sections with no content ($($emptySections -join ', ')). Please ensure to either remove the empty sections or add content to the section."
$isValid = $false
}
if (!$foundRecommendedSection)
{
LogWarning "The changelog entry did not contain any of the recommended sections ($($RecommendedSectionHeaders -join ', ')), please add at least one. See https://aka.ms/azsdk/guideline/changelogs for more info."
}
return $isValid
}

0 comments on commit baf4137

Please sign in to comment.