Add update jira issue with github link
This commit is contained in:
parent
1ccd21f59c
commit
7829bbca13
4 changed files with 44 additions and 10 deletions
|
@ -15,8 +15,8 @@ import (
|
||||||
type App struct {
|
type App struct {
|
||||||
Path string
|
Path string
|
||||||
|
|
||||||
jiraClient *jira.Client
|
JiraClient *jira.Client
|
||||||
githubClient *github.Client
|
GithubClient *github.Client
|
||||||
Campaign *model.Campaign
|
Campaign *model.Campaign
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"git.ctrlz.es/mgdelacroix/campaigner/model"
|
"git.ctrlz.es/mgdelacroix/campaigner/model"
|
||||||
|
@ -19,7 +20,7 @@ func (a *App) InitGithubClient() error {
|
||||||
ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: a.Campaign.Github.Token})
|
ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: a.Campaign.Github.Token})
|
||||||
tc := oauth2.NewClient(ctx, ts)
|
tc := oauth2.NewClient(ctx, ts)
|
||||||
|
|
||||||
a.githubClient = github.NewClient(tc)
|
a.GithubClient = github.NewClient(tc)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ func (a *App) PublishInGithub(ticket *model.Ticket, dryRun bool) (*github.Issue,
|
||||||
}
|
}
|
||||||
|
|
||||||
owner, repo := a.Campaign.RepoComponents()
|
owner, repo := a.Campaign.RepoComponents()
|
||||||
newIssue, _, err := a.githubClient.Issues.Create(context.Background(), owner, repo, issueRequest)
|
newIssue, _, err := a.GithubClient.Issues.Create(context.Background(), owner, repo, issueRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -93,6 +94,13 @@ func (a *App) PublishNextInGithub(dryRun bool) (bool, error) {
|
||||||
if err := a.Save(); err != nil {
|
if err := a.Save(); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !dryRun {
|
||||||
|
if err := a.UpdateJiraAfterGithub(ticket); err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "error updating Jira info for %s after publishing in Github\n", ticket.JiraLink)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
30
app/jira.go
30
app/jira.go
|
@ -11,6 +11,8 @@ import (
|
||||||
jira "gopkg.in/andygrunwald/go-jira.v1"
|
jira "gopkg.in/andygrunwald/go-jira.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const GithubIssueJiraField = "customfield_11106"
|
||||||
|
|
||||||
func (a *App) InitJiraClient() error {
|
func (a *App) InitJiraClient() error {
|
||||||
tp := jira.BasicAuthTransport{
|
tp := jira.BasicAuthTransport{
|
||||||
Username: a.Campaign.Jira.Username,
|
Username: a.Campaign.Jira.Username,
|
||||||
|
@ -22,10 +24,26 @@ func (a *App) InitJiraClient() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
a.jiraClient = client
|
a.JiraClient = client
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *App) UpdateJiraAfterGithub(ticket *model.Ticket) error {
|
||||||
|
data := map[string]interface{}{
|
||||||
|
"fields": map[string]interface{}{
|
||||||
|
GithubIssueJiraField: a.Campaign.GetGithubUrl(ticket),
|
||||||
|
"fixVersions": []map[string]interface{}{
|
||||||
|
{
|
||||||
|
"name": "Help Wanted",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := a.JiraClient.Issue.UpdateIssue(ticket.JiraLink, data)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (a *App) GetJiraIssueFromTicket(ticket *model.Ticket) (*jira.Issue, error) {
|
func (a *App) GetJiraIssueFromTicket(ticket *model.Ticket) (*jira.Issue, error) {
|
||||||
summaryTmpl, err := template.New("").Parse(a.Campaign.Summary)
|
summaryTmpl, err := template.New("").Parse(a.Campaign.Summary)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -57,7 +75,7 @@ func (a *App) GetJiraIssueFromTicket(ticket *model.Ticket) (*jira.Issue, error)
|
||||||
"Epic Link": a.Campaign.Jira.Epic,
|
"Epic Link": a.Campaign.Jira.Epic,
|
||||||
}
|
}
|
||||||
|
|
||||||
createMetaInfo, _, err := a.jiraClient.Issue.GetCreateMeta(a.Campaign.Jira.Project)
|
createMetaInfo, _, err := a.JiraClient.Issue.GetCreateMeta(a.Campaign.Jira.Project)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -92,7 +110,7 @@ func (a *App) PublishInJira(ticket *model.Ticket, dryRun bool) (*jira.Issue, err
|
||||||
return issue, nil
|
return issue, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
newIssue, _, err := a.jiraClient.Issue.Create(issue)
|
newIssue, _, err := a.JiraClient.Issue.Create(issue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -101,7 +119,7 @@ func (a *App) PublishInJira(ticket *model.Ticket, dryRun bool) (*jira.Issue, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) GetIssue(issueNo string) (*jira.Issue, error) {
|
func (a *App) GetIssue(issueNo string) (*jira.Issue, error) {
|
||||||
issue, _, err := a.jiraClient.Issue.Get(issueNo, nil)
|
issue, _, err := a.JiraClient.Issue.Get(issueNo, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -123,12 +141,12 @@ func (a *App) PublishNextInJira(dryRun bool) (bool, error) {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
issue, _, err = a.jiraClient.Issue.Get(issue.Key, nil)
|
issue, _, err = a.JiraClient.Issue.Get(issue.Key, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ticket.JiraLink = fmt.Sprintf("%s/browse/%s", a.Campaign.Jira.Url, issue.Key)
|
ticket.JiraLink = issue.Key
|
||||||
ticket.Summary = issue.Fields.Summary
|
ticket.Summary = issue.Fields.Summary
|
||||||
ticket.Description = issue.Fields.Description
|
ticket.Description = issue.Fields.Description
|
||||||
ticket.JiraStatus = issue.Fields.Status.Name
|
ticket.JiraStatus = issue.Fields.Status.Name
|
||||||
|
|
|
@ -127,3 +127,11 @@ func (c *Campaign) RepoComponents() (string, string) {
|
||||||
}
|
}
|
||||||
return "", ""
|
return "", ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Campaign) GetJiraUrl(ticket *Ticket) string {
|
||||||
|
return fmt.Sprintf("%s/browse/%s", c.Jira.Url, ticket.JiraLink)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Campaign) GetGithubUrl(ticket *Ticket) string {
|
||||||
|
return fmt.Sprintf("https://github.com/%s/issues/%d", c.Github.Repo, ticket.GithubLink)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue