/
jira.go
53 lines (41 loc) · 1.17 KB
/
jira.go
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
package jira
import (
"fmt"
"os"
"strings"
"github.com/andygrunwald/go-jira"
)
const baseURL = "https://reload.atlassian.net"
// GetIssues gets issues.
func GetIssues(filterID string) ([]jira.Issue, error) {
//nolint:exhaustivestruct
tp := jira.BasicAuthTransport{
Username: os.Getenv("TRIAGEBOT_JIRA_USER"),
Password: os.Getenv("TRIAGEBOT_JIRA_PASS"),
}
jiraClient, err := jira.NewClient(tp.Client(), baseURL)
if err != nil {
return nil, fmt.Errorf("getting jira client: %w", err)
}
jql := fmt.Sprintf("filter = %s", os.Getenv(filterID))
issues, _, err := jiraClient.Issue.Search(jql, nil)
if err != nil {
return nil, fmt.Errorf("getting jira issues: %w", err)
}
return issues, nil
}
// FormatIssues formats issues as Markdown.
func FormatIssues(issues []jira.Issue) string {
output := make([]string, 0, len(issues))
for _, issue := range issues {
assignee := ""
if issue.Fields.Assignee != nil {
assignee = fmt.Sprintf(" - %s", issue.Fields.Assignee.DisplayName)
}
output = append(
output,
fmt.Sprintf("* [%s](%s/browse/%s) - %s%s", issue.Key, baseURL, issue.Key, issue.Fields.Summary, assignee),
)
}
return strings.Join(output, "\n")
}