-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert "Remove old Update-Change-Log.ps1 (#1301)"
This reverts commit b967cb62bd8db451a2f02d903f3658cf21f92db1.
- Loading branch information
1 parent
4fa79ba
commit f751ab4
Showing
2 changed files
with
156 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
# Note: This script will add or replace version title in change log | ||
|
||
# Parameter description | ||
# Version : Version to add or replace in change log | ||
# ChangeLogPath: Path to change log file. If change log path is set to directory then script will probe for change log file in that path | ||
# 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" | ||
# ReplaceVersion: This is useful when replacing current version title with new title.( Helpful to update the title before package release) | ||
|
||
param ( | ||
[Parameter(Mandatory = $true)] | ||
[String]$Version, | ||
[Parameter(Mandatory = $true)] | ||
[String]$ChangeLogPath, | ||
[String]$Unreleased = $True, | ||
[String]$ReplaceVersion = $False, | ||
[String]$ReleaseDate | ||
) | ||
|
||
|
||
$RELEASE_TITLE_REGEX = "(?<releaseNoteTitle>^\#+.*(?<version>\b\d+\.\d+\.\d+([^0-9\s][^\s:]+)?))" | ||
$UNRELEASED_TAG = "(Unreleased)" | ||
function Version-Matches($line) | ||
{ | ||
return ($line -match $RELEASE_TITLE_REGEX) | ||
} | ||
|
||
function Get-ChangelogPath($Path) | ||
{ | ||
# Check if CHANGELOG.md is present in path | ||
$ChangeLogPath = Join-Path -Path $Path -ChildPath "CHANGELOG.md" | ||
if ((Test-Path -Path $ChangeLogPath) -eq $False) { | ||
# Check if change log exists with name HISTORY.md | ||
$ChangeLogPath = Join-Path -Path $Path -ChildPath "HISTORY.md" | ||
if ((Test-Path -Path $ChangeLogPath) -eq $False) { | ||
Write-Host "Change log is not found in path[$Path]" | ||
exit(1) | ||
} | ||
} | ||
|
||
Write-Host "Change log is found at path [$ChangeLogPath]" | ||
return $ChangeLogPath | ||
} | ||
|
||
|
||
function Get-VersionTitle($Version, $Unreleased) | ||
{ | ||
# Generate version title | ||
$newVersionTitle = "## $Version $UNRELEASED_TAG" | ||
if ($Unreleased -eq $False) { | ||
$actualReleaseDate = $ReleaseDate; | ||
|
||
if (!$actualReleaseDate) { | ||
$actualReleaseDate = Get-Date -Format "yyyy-MM-dd" | ||
} | ||
$newVersionTitle = "## $Version ($actualReleaseDate)" | ||
} | ||
return $newVersionTitle | ||
} | ||
|
||
|
||
function Get-NewChangeLog( [System.Collections.ArrayList]$ChangelogLines, $Version, $Unreleased, $ReplaceVersion) | ||
{ | ||
|
||
# version parameter is to pass new version to add or replace | ||
# Unreleased parameter can be set to False to set today's date instead of "Unreleased in title" | ||
# ReplaceVersion param can be set to true to replace current version title( useful at release time to change title) | ||
|
||
# find index of current version | ||
$Index = 0 | ||
$CurrentTitle = "" | ||
$CurrentIndex = 0 | ||
# Version increment tool passes replaceversion as False and Unreleased as True | ||
$is_version_increment = $ReplaceVersion -eq $False -and $Unreleased -eq $True | ||
|
||
for (; $Index -lt $ChangelogLines.Count; $Index++) { | ||
if (Version-Matches($ChangelogLines[$Index])) { | ||
# Find current title in change log | ||
if( -not $CurrentTitle) { | ||
$CurrentTitle = $ChangelogLines[$Index] | ||
$CurrentIndex = $Index | ||
Write-Host "Current Version title: $CurrentTitle" | ||
} | ||
|
||
# Ensure change log doesn't have new version when incrementing version | ||
# update change log script is triggered for all packages with current version for Java ( or any language where version is maintained in common file) | ||
# and this can cause an issue if someone changes changelog manually to prepare for release without updating actual version in central version file | ||
# Do not add new line or replace existing title when version is already present and script is triggered to add new line | ||
if ($is_version_increment -and $ChangelogLines[$Index].Contains($Version)) { | ||
Write-Host "Version is already present in change log." | ||
exit(0) | ||
} | ||
} | ||
} | ||
|
||
# Generate version title | ||
$newVersionTitle = Get-VersionTitle -Version $Version -Unreleased $Unreleased | ||
|
||
if( $newVersionTitle -eq $CurrentTitle) { | ||
Write-Host "No change is required in change log. Version is already present." | ||
exit(0) | ||
} | ||
|
||
if (($ReplaceVersion -eq $True) -and ($Unreleased -eq $False) -and $CurrentTitle.Contains($version) -and (-not $CurrentTitle.Contains($UNRELEASED_TAG)) -and (-not $ReleaseDate)) { | ||
Write-Host "Version is already present in change log with a release date." | ||
exit(0) | ||
} | ||
|
||
# if current version title already has new version then we should replace title to update it | ||
if ($CurrentTitle.Contains($Version) -and $ReplaceVersion -eq $False) { | ||
Write-Host "Version is already present in title. Updating version title" | ||
$ReplaceVersion = $True | ||
} | ||
|
||
# if version is already found and not replacing then nothing to do | ||
if ($ReplaceVersion -eq $False) { | ||
Write-Host "Adding version title $newVersionTitle" | ||
$ChangelogLines.insert($CurrentIndex, "") | ||
$ChangelogLines.insert($CurrentIndex, "") | ||
$ChangelogLines.insert($CurrentIndex, $newVersionTitle) | ||
} | ||
else{ | ||
# Script is executed to replace an existing version title | ||
Write-Host "Replacing current version title to $newVersionTitle" | ||
$ChangelogLines[$CurrentIndex] = $newVersionTitle | ||
} | ||
|
||
return $ChangelogLines | ||
} | ||
|
||
|
||
# Make sure path is valid | ||
if ((Test-Path -Path $ChangeLogPath) -eq $False) { | ||
Write-Host "Change log path is invalid. [$ChangeLogPath]" | ||
exit(1) | ||
} | ||
|
||
# probe change log path if path is directory | ||
if (Test-Path -Path $ChangeLogPath -PathType Container) { | ||
$ChangeLogPath = Get-ChangelogPath -Path $ChangeLogPath | ||
} | ||
|
||
# Read current change logs and add/update version | ||
$ChangelogLines = [System.Collections.ArrayList](Get-Content -Path $ChangeLogPath) | ||
|
||
if ($null -eq $ChangelogLines) { | ||
$ChangelogLines = @() | ||
} | ||
|
||
$NewContents = Get-NewChangeLog -ChangelogLines $ChangelogLines -Version $Version -Unreleased $Unreleased -ReplaceVersion $ReplaceVersion | ||
|
||
Write-Host "Writing change log to file [$ChangeLogPath]" | ||
Set-Content -Path $ChangeLogPath $NewContents | ||
Write-Host "Version is added/updated in change log" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters