campaigner/model/campaign.go

100 lines
2.3 KiB
Go
Raw Normal View History

2020-02-29 00:49:55 +01:00
package model
2020-03-06 19:54:52 +01:00
import (
"bytes"
2020-03-06 19:54:52 +01:00
"fmt"
"strings"
"text/template"
2020-03-06 19:54:52 +01: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"`
}
// 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 {
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
func (c *Campaign) NextJiraUnpublishedTicket() *Ticket {
2020-03-05 22:37:01 +01:00
for _, ticket := range c.Tickets {
2020-04-27 12:22:15 +02:00
if !ticket.IsPublishedJira() {
2020-03-05 22:37:01 +01:00
return ticket
}
}
return nil
}
2020-03-06 19:54:52 +01:00
func (c *Campaign) NextGithubUnpublishedTicket() *Ticket {
for _, ticket := range c.Tickets {
2020-04-27 12:22:15 +02:00
if ticket.IsPublishedJira() && !ticket.IsPublishedGithub() {
return ticket
}
}
return nil
}
2020-04-27 12:22:15 +02:00
func (c *Campaign) PrintStatus() {
fmt.Printf("JIRA URL: %s\n", c.Jira.Url)
fmt.Printf("JIRA Project: %s\n", c.Jira.Project)
fmt.Printf("JIRA Epic: %s\n", c.Jira.Epic)
fmt.Printf("JIRA Issue Type: %s\n", c.Jira.IssueType)
fmt.Printf("GitHub Repo: %s\n", c.Github.Repo)
fmt.Printf("GitHub Labels: %s\n", c.Github.Labels)
fmt.Printf("Summary: %s\n", c.Summary)
fmt.Printf("Template: %s\n", c.Template)
fmt.Println("")
2020-03-06 19:54:52 +01:00
for _, ticket := range c.Tickets {
2020-04-27 12:22:15 +02:00
ticket.PrintStatus()
2020-03-06 19:54:52 +01: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 "", ""
}