...
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