File: Update-ChangeLog.ps1

package info (click to toggle)
python-azure 20201208%2Bgit-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,437,920 kB
  • sloc: python: 4,287,452; javascript: 269; makefile: 198; sh: 187; xml: 106
file content (119 lines) | stat: -rw-r--r-- 3,988 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Note: This script will add or replace version title in change log

# Parameter description
# 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"
# ReplaceLatestEntry: Replaces the latest changelog entry, including its content.

param (
  [Parameter(Mandatory = $true)]
  [String]$Version,
  [Parameter(Mandatory = $true)]
  [String]$ServiceDirectory,
  [Parameter(Mandatory = $true)]
  [String]$PackageName,
  [boolean]$Unreleased=$True,
  [boolean]$ReplaceLatestEntry = $False,
  [String]$ReleaseDate
)

if ($ReleaseDate -and ($Unreleased -eq $True)) {
    LogError "Do not pass 'ReleaseDate' arguement when 'Unreleased' is true"
    exit 1
}

. (Join-Path $PSScriptRoot common.ps1)

if ($ReleaseDate)
{
    try {
        $ReleaseStatus = ([DateTime]$ReleaseDate).ToString($CHANGELOG_DATE_FORMAT)
        $ReleaseStatus = "($ReleaseStatus)"
    }
    catch {
        LogError "Invalid 'ReleaseDate'. Please use a valid date in the format '$CHANGELOG_DATE_FORMAT'"
        exit 1
    }
}
elseif ($Unreleased) {
    $ReleaseStatus = $CHANGELOG_UNRELEASED_STATUS
}
else {
    $ReleaseStatus = "$(Get-Date -Format $CHANGELOG_DATE_FORMAT)"
    $ReleaseStatus = "($ReleaseStatus)"
}

if ($null -eq [AzureEngSemanticVersion]::ParseVersionString($Version))
{
    LogError "Version [$Version] is invalid. Please use a valid SemVer"
    exit(0)
}

$PkgProperties = Get-PkgProperties -PackageName $PackageName -ServiceDirectory $ServiceDirectory
$ChangeLogEntries = Get-ChangeLogEntries -ChangeLogLocation $PkgProperties.ChangeLogPath


if ($ChangeLogEntries.Contains($Version))
{
    if ($ChangeLogEntries[$Version].ReleaseStatus -eq $ReleaseStatus)
    {
        LogWarning "Version is already present in change log with specificed ReleaseStatus [$ReleaseStatus]"
        exit(0)
    }

    if ($Unreleased -and ($ChangeLogEntries[$Version].ReleaseStatus -ne $ReleaseStatus))
    {
        LogWarning "Version is already present in change log with a release date. Please review [$($PkgProperties.ChangeLogPath)]"
        exit(0)
    }

    if (!$Unreleased -and ($ChangeLogEntries[$Version].ReleaseStatus -ne $CHANGELOG_UNRELEASED_STATUS))
    {
        if ((Get-Date ($ChangeLogEntries[$Version].ReleaseStatus).Trim("()")) -gt (Get-Date $ReleaseStatus.Trim("()")))
        {
            LogWarning "New ReleaseDate for version [$Version] is older than existing release date in changelog. Please review [$($PkgProperties.ChangeLogPath)]"
            exit(0)
        }
    }
}

$PresentVersionsSorted = [AzureEngSemanticVersion]::SortVersionStrings($ChangeLogEntries.Keys)
$LatestVersion = $PresentVersionsSorted[0]

$LatestsSorted = [AzureEngSemanticVersion]::SortVersionStrings(@($LatestVersion, $Version))
if ($LatestsSorted[0] -ne $Version) {
    LogWarning "Passed Version [$Version] is older than the latestversion [$LatestVersion] in the changelog. Please use a more recent version."
    exit(0)
}

if ($ReplaceLatestEntry) 
{
    $ChangeLogEntries.Remove($LatestVersion)
    $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus
    if ($newChangeLogEntry) {
        $ChangeLogEntries[$Version] = $newChangeLogEntry
    }
    else {
        LogError "Failed to create new changelog entry"
    }
}
elseif ($ChangeLogEntries.Contains($Version))
{
    $ChangeLogEntries[$Version].ReleaseVersion = $Version
    $ChangeLogEntries[$Version].ReleaseStatus = $ReleaseStatus
    $ChangeLogEntries[$Version].ReleaseTitle = "## $Version $ReleaseStatus"
}
else 
{
    $newChangeLogEntry = New-ChangeLogEntry -Version $Version -Status $ReleaseStatus
    if ($newChangeLogEntry) {
        $ChangeLogEntries[$Version] = $newChangeLogEntry
    }
    else {
        LogError "Failed to create new changelog entry"
    }
}

Set-ChangeLogContent -ChangeLogLocation $PkgProperties.ChangeLogPath -ChangeLogEntries $ChangeLogEntries