2020-02-29 00:49:55 +01:00
|
|
|
package model
|
|
|
|
|
2020-03-06 19:54:52 +01:00
|
|
|
import (
|
2020-04-27 11:42:29 +02:00
|
|
|
"bytes"
|
2020-03-06 19:54:52 +01:00
|
|
|
"fmt"
|
|
|
|
"io"
|
2020-04-27 11:42:29 +02:00
|
|
|
"strings"
|
|
|
|
"text/template"
|
2020-03-06 19:54:52 +01:00
|
|
|
)
|
|
|
|
|
2020-04-27 11:42:29 +02:00
|
|
|
type ConfigJira struct {
|
|
|
|
Url string `json:"url"`
|
|
|
|
Username string `json:"username"`
|
|
|
|
Token string `json:"token"`
|
|
|
|
Project string `json:"project"`
|
|
|
|
Epic string `json:"epic"`
|
|
|
|
IssueType string `json:"issue_type"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type ConfigGithub struct {
|
|
|
|
Token string `json:"token"`
|
|
|
|
Repo string `json:"repo"`
|
|
|
|
Labels []string `json:"labels"`
|
|
|
|
}
|
|
|
|
|
2020-03-05 20:42:25 +01:00
|
|
|
// ToDo: add key-value extra params as a map to allow for customfield_whatever = team
|
2020-02-29 00:49:55 +01:00
|
|
|
type Campaign struct {
|
2020-04-27 11:42:29 +02:00
|
|
|
Jira ConfigJira `json:"jira"`
|
|
|
|
Github ConfigGithub `json:"github"`
|
|
|
|
Summary string `json:"summary"`
|
|
|
|
Template string `json:"template"`
|
|
|
|
Tickets []*Ticket `json:"tickets,omitempty"`
|
2020-02-29 00:49:55 +01:00
|
|
|
}
|
2020-03-05 22:37:01 +01:00
|
|
|
|
2020-03-07 13:27:11 +01:00
|
|
|
func (c *Campaign) NextJiraUnpublishedTicket() *Ticket {
|
2020-03-05 22:37:01 +01:00
|
|
|
for _, ticket := range c.Tickets {
|
|
|
|
if ticket.JiraLink == "" {
|
|
|
|
return ticket
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
2020-03-06 19:54:52 +01:00
|
|
|
|
2020-03-07 13:27:11 +01:00
|
|
|
func (c *Campaign) NextGithubUnpublishedTicket() *Ticket {
|
|
|
|
for _, ticket := range c.Tickets {
|
2020-04-27 11:42:29 +02:00
|
|
|
if ticket.JiraLink != "" && ticket.GithubLink == 0 {
|
2020-03-07 13:27:11 +01:00
|
|
|
return ticket
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-03-06 19:54:52 +01:00
|
|
|
func (c *Campaign) PrintStatus(w io.Writer) {
|
2020-04-27 11:42:29 +02:00
|
|
|
fmt.Fprintf(w, "JIRA URL: %s\n", c.Jira.Url)
|
|
|
|
fmt.Fprintf(w, "JIRA Project: %s\n", c.Jira.Project)
|
|
|
|
fmt.Fprintf(w, "JIRA Epic: %s\n", c.Jira.Epic)
|
|
|
|
fmt.Fprintf(w, "JIRA Issue Type: %s\n", c.Jira.IssueType)
|
|
|
|
fmt.Fprintf(w, "GitHub Repo: %s\n", c.Github.Repo)
|
|
|
|
fmt.Fprintf(w, "GitHub Labels: %s\n", c.Github.Labels)
|
2020-03-06 19:54:52 +01:00
|
|
|
fmt.Fprintf(w, "Summary: %s\n", c.Summary)
|
|
|
|
fmt.Fprintf(w, "Template: %s\n", c.Template)
|
2020-04-27 11:42:29 +02:00
|
|
|
fmt.Fprintln(w, "")
|
2020-03-06 19:54:52 +01:00
|
|
|
|
|
|
|
for _, ticket := range c.Tickets {
|
|
|
|
ticket.PrintStatus(w)
|
|
|
|
}
|
|
|
|
}
|
2020-04-27 11:42:29 +02:00
|
|
|
|
|
|
|
func (c *Campaign) FillTicket(t *Ticket) error {
|
|
|
|
summaryTmpl, err := template.New("").Parse(c.Summary)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
var summaryBytes bytes.Buffer
|
|
|
|
if err := summaryTmpl.Execute(&summaryBytes, t.Data); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
t.Summary = summaryBytes.String()
|
|
|
|
|
|
|
|
descriptionTemplate, err := template.ParseFiles(c.Template)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
var descriptionBytes bytes.Buffer
|
|
|
|
if err := descriptionTemplate.Execute(&descriptionBytes, t.Data); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
t.Description = descriptionBytes.String()
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Campaign) RepoComponents() (string, string) {
|
|
|
|
parts := strings.Split(c.Github.Repo, "/")
|
|
|
|
if len(parts) == 2 {
|
|
|
|
return parts[0], parts[1]
|
|
|
|
}
|
|
|
|
return "", ""
|
|
|
|
}
|