diff --git a/eng/common/Extract-ReleaseNotes.ps1 b/eng/common/Extract-ReleaseNotes.ps1 new file mode 100644 index 000000000000..77b14baf9af6 --- /dev/null +++ b/eng/common/Extract-ReleaseNotes.ps1 @@ -0,0 +1,47 @@ +# given a CHANGELOG.md file, extract the relevant info we need to decorate a release +param ( + [Parameter(Mandatory = $true)] + [String]$ChangeLogLocation +) + +$RELEASE_TITLE_REGEX = "(?^\#+.*(?\b\d+\.\d+\.\d+([^0-9\s][^\s:]+)?))" + +$releaseNotes = @{} +$contentArrays = @{} +if ($ChangeLogLocation.Length -eq 0) +{ + return $releaseNotes +} + +try +{ + $contents = Get-Content $ChangeLogLocation + + # walk the document, finding where the version specifiers are and creating lists + $version = "" + foreach($line in $contents){ + if ($line -match $RELEASE_TITLE_REGEX) + { + $version = $matches["version"] + $contentArrays[$version] = @() + } + + $contentArrays[$version] += $line + } + + # resolve each of discovered version specifier string arrays into real content + foreach($key in $contentArrays.Keys) + { + $releaseNotes[$key] = New-Object PSObject -Property @{ + ReleaseVersion = $key + ReleaseContent = $contentArrays[$key] -join [Environment]::NewLine + } + } +} +catch +{ + Write-Host "Error parsing $ChangeLogLocation." + Write-Host $_.Exception.Message +} + +return $releaseNotes \ No newline at end of file