Simplifies init process and adds github issue publishing

This commit is contained in:
Miguel de la Cruz 2020-04-27 11:42:29 +02:00
parent 21c18b3095
commit be543e2cc4
23 changed files with 581 additions and 390 deletions

View file

@ -1,19 +1,35 @@
package model
import (
"bytes"
"fmt"
"io"
"strings"
"text/template"
)
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
type Campaign struct {
Url string `json:"url"`
Project string `json:"project"`
Epic string `json:"epic"`
IssueType string `json:"issue_type"`
Summary string `json:"summary"`
Template string `json:"template"`
Tickets []*Ticket `json:"tickets,omitempty"`
Jira ConfigJira `json:"jira"`
Github ConfigGithub `json:"github"`
Summary string `json:"summary"`
Template string `json:"template"`
Tickets []*Ticket `json:"tickets,omitempty"`
}
func (c *Campaign) NextJiraUnpublishedTicket() *Ticket {
@ -27,7 +43,7 @@ func (c *Campaign) NextJiraUnpublishedTicket() *Ticket {
func (c *Campaign) NextGithubUnpublishedTicket() *Ticket {
for _, ticket := range c.Tickets {
if ticket.JiraLink != "" && ticket.GithubLink != 0 {
if ticket.JiraLink != "" && ticket.GithubLink == 0 {
return ticket
}
}
@ -35,14 +51,50 @@ func (c *Campaign) NextGithubUnpublishedTicket() *Ticket {
}
func (c *Campaign) PrintStatus(w io.Writer) {
fmt.Fprintf(w, "Url: %s\n", c.Url)
fmt.Fprintf(w, "Project: %s\n", c.Project)
fmt.Fprintf(w, "Epic: %s\n", c.Epic)
fmt.Fprintf(w, "Issue Type: %s\n", c.IssueType)
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)
fmt.Fprintf(w, "Summary: %s\n", c.Summary)
fmt.Fprintf(w, "Template: %s\n", c.Template)
fmt.Fprintln(w, "")
for _, ticket := range c.Tickets {
ticket.PrintStatus(w)
}
}
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 "", ""
}

View file

@ -1,7 +0,0 @@
package model
type Config struct {
GithubToken string `json:"github_token"`
JiraUsername string `json:"jira_username"`
JiraToken string `json:"jira_token"`
}

View file

@ -6,10 +6,13 @@ import (
)
type Ticket struct {
GithubLink int64 `json:"githubLink,omitempty"`
JiraLink string `json:"jiraLink,omitempty"`
Summary string `json:"summary,omitempty"`
Data map[string]interface{} `json:"data,omitempty"`
GithubLink int64 `json:"github_link,omitempty"`
GithubStatus string `json:"github_status,omitempty"`
JiraLink string `json:"jira_link,omitempty"`
JiraStatus string `json:"jira_status,omitempty"`
Summary string `json:"summary,omitempty"`
Description string `json:"description,omitempty"`
Data map[string]interface{} `json:"data,omitempty"`
}
func RemoveDuplicateTickets(tickets []*Ticket, fileOnly bool) []*Ticket {
@ -33,5 +36,7 @@ func RemoveDuplicateTickets(tickets []*Ticket, fileOnly bool) []*Ticket {
}
func (t *Ticket) PrintStatus(w io.Writer) {
fmt.Fprintf(w, " [%s] %s\n", t.JiraLink, t.Summary)
if t.Summary != "" {
fmt.Fprintf(w, "[%s] %s\n", t.JiraLink, t.Summary)
}
}