-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathissue2releasenotes.ps1
104 lines (87 loc) · 2.45 KB
/
issue2releasenotes.ps1
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
param (
[string]$MilestoneNumber
)
try
{
$ErrorActionPreference = 'Stop';
$Error.Clear();
$repository = $env:GITHUB_REPOSITORY
$token = $env:GITHUB_TOKEN
$verbose = $env:VERBOSE
[System.Text.StringBuilder]$stringbuilder = [System.Text.StringBuilder]::new()
$headers = @{
Authorization = "token $token"
'User-Agent' = 'PowerShell'
}
$milestoneUri = "https://api.github.com/repos/$repository/milestones/$MilestoneNumber"
$milestone = Invoke-RestMethod -Uri $milestoneUri -Headers $headers
if ($verbose -eq 'verbose')
{
Write-Host "Issue2ReleaseNotes DEBUG"
Write-Host "Repository : $repository"
Write-Host "MilestoneNumber : $MilestoneNumber"
Write-Host "MilestoneUri : $milestoneUri"
}
if ($milestone)
{
$issuesUri = "https://api.github.com/repos/$repository/issues?state=closed&milestone=$($milestone.number)"
$issues = Invoke-RestMethod -Uri $issuesUri -Headers $headers
if ($verbose -eq 'verbose')
{
Write-Host "IssuesUri : $issuesUri"
Write-Host "Issues : $($issues.Count)"
}
$groupedIssues = @{}
foreach ($issue in $issues)
{
$label = if ($issue.labels.Count -eq 0)
{
'No Label'
}
else
{
($issue.labels | ForEach-Object { $_.name }) -join ', '
}
if (-not $groupedIssues.ContainsKey($label))
{
$groupedIssues[$label] = @()
}
$groupedIssues[$label] += $issue
}
$sortedKeys = $groupedIssues.Keys | Sort-Object -Property {
switch ($_)
{
'bug' { return 0 }
{ $_ -like 'bug*' } { return 1 }
'No Label' { return 99 }
default { return 2 }
}
}
[void]$stringbuilder.AppendLine("# $($milestone.title)")
[void]$stringbuilder.AppendLine()
if ($milestone.description)
{
[void]$stringbuilder.AppendLine($milestone.description)
}
foreach ($key in $sortedKeys)
{
[void]$stringbuilder.AppendLine()
[void]$stringbuilder.AppendLine("## $($key.ToUpper())")
[void]$stringbuilder.AppendLine()
foreach ($issue in $groupedIssues[$key])
{
[void]$stringbuilder.AppendLine("* issue-$($issue.number): $($issue.title)")
}
}
if ($verbose -eq 'verbose')
{
$stringbuilder.ToString() | Write-Host
}
$stringbuilder.ToString() | Out-File RELEASE.md -Encoding utf8 -Force
}
}
catch
{
$_.InvocationInfo | Out-String
throw $_.Exception.Message
}