Class: Danger::DangerJiraIssueLinks

Inherits:
Plugin
  • Object
show all
Defined in:
lib/jira_issue_links/plugin.rb

Overview

Collect issue mentions from git commit messages. Results are passed out as a table in markdown.

Examples:

Find issues, obtain types and titles from Jira, and make links to site.


jira_issue_links.print_links_with_titles

Find issues and make links to Jira site.


jira_issue_links.print_links_only

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#jira_context_pathString

Jira context path Default - empty string

Returns:

  • (String)


40
41
42
# File 'lib/jira_issue_links/plugin.rb', line 40

def jira_context_path
  @jira_context_path
end

#jira_passwordString

Jira password

Returns:

  • (String)


29
30
31
# File 'lib/jira_issue_links/plugin.rb', line 29

def jira_password
  @jira_password
end

#jira_siteString

Jira site url

Returns:

  • (String)


34
35
36
# File 'lib/jira_issue_links/plugin.rb', line 34

def jira_site
  @jira_site
end

#jira_usernameString

Jira username

Returns:

  • (String)


24
25
26
# File 'lib/jira_issue_links/plugin.rb', line 24

def jira_username
  @jira_username
end

Instance Method Details

#collect_issues_from_commitsArray<String>

Find all issue references in commit messages. Message should starts with pattern: ‘[TASK-123]`

Returns:

  • (Array<String>)


46
47
48
49
50
51
52
53
54
55
# File 'lib/jira_issue_links/plugin.rb', line 46

def collect_issues_from_commits 
  all_issues = []
  git.commits.each do |c|
      captures = c.message.match(/^\[(\w+-\d+)\]*./)&.captures
      if captures
        all_issues.push(captures[0])
      end
  end
  all_issues.uniq
end

This method returns an undefined value.

Generates a ‘markdown` list of issues with links No required access to Jira, needs only base url - `jira_site`.



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/jira_issue_links/plugin.rb', line 99

def print_links_only
  found_issues = collect_issues_from_commits
  return if found_issues.empty?

  message = "### Jira issues\n\n"
  found_issues.each do |issue_id| 
    message << "[#{issue_id}](#{jira_site}/browse/#{issue_id})\n\n" 
  end

  markdown message
end

This method returns an undefined value.

Generates a ‘markdown` table of issues with type, title and link. Required access to Jira site.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/jira_issue_links/plugin.rb', line 61

def print_links_with_titles
  found_issues = collect_issues_from_commits
  return if found_issues.empty?

  jira_context_path = '' if jira_context_path.nil?
  client = JIRA::Client.new(
      username:     jira_username,
      password:     jira_password,
      site:         jira_site,
      context_path: jira_context_path,
      auth_type:    :basic
  )

  message = "## Jira issues\n\n"
  message << "| | |\n"
  message << "| --- | ----- |\n"

  begin
    found_issues.each do |issue_id| 
      issue = client.Issue.jql("ID = '#{issue_id}'").first
      return if issue.nil?
      description = issue.summary
      description = description.gsub(/[<|>\[\]]/) { |bracket| "\\#{bracket}" }
      message << "![#{issue.issuetype.name}](#{issue.issuetype.iconUrl}) | "
      message << "[#{description}](#{jira_site}/browse/#{issue_id})\n" 
    end
  rescue JIRA::HTTPError => e
    print e.message
  end

  markdown message
end