Public/Xpand/Get-XpandReleaseChange.ps1
function Get-XpandReleaseArtifact { [CmdletBinding()] param ( [parameter()] [ValidateSet("Label", "Release")] [string]$Artifact = "Label" ) begin { } process { $client = [System.Net.WebClient]::new() $History = $client.DownloadString("https://raw.githubusercontent.com/eXpandFramework/eXpand.lab/history/ReleaseNotesHistory/History.csv") | ConvertFrom-Csv if ($Artifact -eq "Label") { ($History | ForEach-Object { $_.Labels | ForEach-Object { $_.split(", ") } } | Sort-Object -Unique) | Where-Object { $_ } | ForEach-Object { "$_" } } elseif ($Artifact -eq "Release") { $History | ForEach-Object { [version]$_.Release } | Sort-Object -Unique -Descending } } end { } } function Get-XpandReleaseChange { [CmdletBinding()] param ( [parameter()] [ValidateScript( { $_ -in (Get-XpandReleaseArtifact Label) })] [ArgumentCompleter( { . "$PSCommandPath" (Get-XpandReleaseArtifact Label) })] $Label, [ValidateScript( { $_ -in (Get-XpandReleaseArtifact Release) })] [ArgumentCompleter( { . "$PSCommandPath" (Get-XpandReleaseArtifact Release) })] [parameter()] [string]$SinceVersion, [ValidateScript( { $_ -in (Get-XpandReleaseArtifact Release) })] [ArgumentCompleter( { . "$PSCommandPath" (Get-XpandReleaseArtifact Release) })] [parameter()] [string]$UntilVersion, [switch]$ShowInBrowser ) begin { } process { $client = [System.Net.WebClient]::new() $History = $client.DownloadString("https://raw.githubusercontent.com/eXpandFramework/eXpand.lab/history/ReleaseNotesHistory/History.csv") | ConvertFrom-Csv $result = $History | ForEach-Object { [PSCustomObject]@{ Release = [version]$_.Release Issues = $_.Issues.split(",") Labels = $_.Labels.split(",") Message = $_.Message Sha = $_.Sha } } | Where-Object { if ($Label) { $_.Labels | Where-Object { $Label | Select-String $_ } } else { !$Label } } | Where-Object { if ($SinceVersion) { $_.Release -gt $SinceVersion -or $_.release -eq $SinceVersion } else { !$SinceVersion } } | Where-Object { if ($UntilVersion) { $_.Release -lt $UntilVersion } else { !$UntilVersion } } | ForEach-Object { [PSCustomObject]@{ Release = [version]$_.Release Issues = ($_.Issues) -join ", " Labels = $_.Labels -join ", " Message = $_.Message Sha = $_.Sha } } if ($ShowInBrowser) { $result = $result | ForEach-Object { $release = $_.Release $message = $_.Message $sha = $_.Sha [PSCustomObject]@{ Release = "<a href='https://github.com/eXpandFramework/eXpand/releases/tag/$release'>$release</a>" Issues = ($_.Issues | ForEach-Object { "<a href='https://github.com/eXpandFramework/eXpand/issues/$_'>$_</a>" }) Labels = $_.Labels | ForEach-Object { "<a href='https://github.com/eXpandFramework/eXpand/labels//$_'>$_</a>" } Message = $message Sha = "<a href='https://github.com/eXpandFramework/eXpand/commit/$sha'>$sha</a>" } } Add-Type -AssemblyName System.Web $file = "$([System.IO.Path]::GetTempPath())\$([Guid]::NewGuid()).html" $html = [System.Web.HttpUtility]::HtmlDecode(($result | ConvertTo-Html)) $html | Out-File $file & $file } else { $result | Format-Table } } end { } } |