diff --git a/app/app.go b/app/app.go index 8fe7bc4..76b5aeb 100644 --- a/app/app.go +++ b/app/app.go @@ -15,8 +15,8 @@ import ( type App struct { Path string - jiraClient *jira.Client - githubClient *github.Client + JiraClient *jira.Client + GithubClient *github.Client Campaign *model.Campaign } diff --git a/app/github.go b/app/github.go index 61f6e43..f7aef72 100644 --- a/app/github.go +++ b/app/github.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "os" "text/template" "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}) tc := oauth2.NewClient(ctx, ts) - a.githubClient = github.NewClient(tc) + a.GithubClient = github.NewClient(tc) return nil } @@ -63,7 +64,7 @@ func (a *App) PublishInGithub(ticket *model.Ticket, dryRun bool) (*github.Issue, } 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 { return nil, err } @@ -93,6 +94,13 @@ func (a *App) PublishNextInGithub(dryRun bool) (bool, error) { if err := a.Save(); err != nil { 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 } diff --git a/app/jira.go b/app/jira.go index 860251f..db1bfa8 100644 --- a/app/jira.go +++ b/app/jira.go @@ -11,6 +11,8 @@ import ( jira "gopkg.in/andygrunwald/go-jira.v1" ) +const GithubIssueJiraField = "customfield_11106" + func (a *App) InitJiraClient() error { tp := jira.BasicAuthTransport{ Username: a.Campaign.Jira.Username, @@ -22,10 +24,26 @@ func (a *App) InitJiraClient() error { return err } - a.jiraClient = client + a.JiraClient = client 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) { summaryTmpl, err := template.New("").Parse(a.Campaign.Summary) if err != nil { @@ -57,7 +75,7 @@ func (a *App) GetJiraIssueFromTicket(ticket *model.Ticket) (*jira.Issue, error) "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 { return nil, err } @@ -92,7 +110,7 @@ func (a *App) PublishInJira(ticket *model.Ticket, dryRun bool) (*jira.Issue, err return issue, nil } - newIssue, _, err := a.jiraClient.Issue.Create(issue) + newIssue, _, err := a.JiraClient.Issue.Create(issue) if err != nil { 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) { - issue, _, err := a.jiraClient.Issue.Get(issueNo, nil) + issue, _, err := a.JiraClient.Issue.Get(issueNo, nil) if err != nil { return nil, err } @@ -123,12 +141,12 @@ func (a *App) PublishNextInJira(dryRun bool) (bool, error) { return true, nil } - issue, _, err = a.jiraClient.Issue.Get(issue.Key, nil) + issue, _, err = a.JiraClient.Issue.Get(issue.Key, nil) if err != nil { 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.Description = issue.Fields.Description ticket.JiraStatus = issue.Fields.Status.Name diff --git a/model/campaign.go b/model/campaign.go index 9849bff..9d8f844 100644 --- a/model/campaign.go +++ b/model/campaign.go @@ -127,3 +127,11 @@ func (c *Campaign) RepoComponents() (string, string) { } 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) +}