forked from detekt/detekt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgithub-milestone-report.groovy
49 lines (38 loc) · 1.4 KB
/
github-milestone-report.groovy
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
/**
* @author Artur Bosch
*/
@groovy.lang.Grab('org.kohsuke:github-api:1.85')
import org.kohsuke.github.*
class Report {
static def section(header) {
"#### $header"
}
static def entry(content, issueId, issueUrl) {
"- $content - [#$issueId]($issueUrl)"
}
static def footer(footer, url) {
"See all issues at: [$footer]($url)"
}
}
if (args.size() > 3) throw new IllegalArgumentException("Usage: [userId] [repositoryId] [milestoneId]")
def user = args.size() > 0 ? args[0] : "arturbosch"
def repo = args.size() > 1 ? args[1] : "detekt"
def github = GitHub.connectAnonymously()
def repository = github.getUser(user).getRepository(repo)
def milestones = repository.listMilestones(GHIssueState.OPEN)
def sortedMilestones = milestones.sort { it.number }
def mId = args.size() > 2 ? args[2].toInteger() : sortedMilestones.last().number
def milestone = repository.getMilestone(mId)
def issues = repository.getIssues(GHIssueState.ALL, milestone)
def section = Report.section(milestone.title.trim()) + "\n"
def issuesString = issues.collect {
(Report.entry(it.title.trim(), it.number, it.getHtmlUrl()))
}.join("\n") + "\n"
def footer = Report.footer(milestone.title.trim(), milestone.getHtmlUrl())
println(section)
println(issuesString)
println(footer)
println()
def tempFile = File.createTempFile(repo, "_$milestone.title")
tempFile.write("$section\n$issuesString\n$footer")
println("Content saved to $tempFile.path")