class Danger::DangerJiraIssueLinks
Collect issue mentions from git commit messages. Results are passed out as a table in markdown.
@example Find issues, obtain types and titles from Jira, and make links to site.
jira_issue_links.print_links_with_titles
@example Find issues and make links to Jira site.
jira_issue_links.print_links_only
@see github.com/RedMadRobot/danger-jira_issue_links @tags jira, issue, task
Constants
- JiraIssue
Private struct
Attributes
If `true` then in report will be added “Resolves” keyword for automatic resolve issue in jira. @see docs.gitlab.com/ee/user/project/integrations/jira.html Default - false
@return [Bool]
Jira context path Default - empty string
@return [String]
Jira password
@return [String]
Jira site url
@return [String]
Jira username
@return [String]
Public Instance Methods
Find all issue references in commit messages. Message should starts with pattern: `[TASK-123]` @return [Array<String>]
# File lib/jira_issue_links/plugin.rb, line 55 def collect_issues_from_commits git.commits .flat_map { |c| c.message.match(/^\[(\w+-\d+)\]/)&.captures } .compact .uniq end
Generates a `markdown` list of issues with links No required access to Jira, needs only base url - `jira_site`.
@return [void]
# File lib/jira_issue_links/plugin.rb, line 103 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| if include_resolves_keyword message << "Resolves " end message << "[#{issue_id}](#{jira_site}/browse/#{issue_id})\n\n" end markdown message end
Generates a `markdown` table of issues with type, title and link. Required access to Jira site.
@return [void]
# File lib/jira_issue_links/plugin.rb, line 66 def print_links_with_titles found_issues = collect_issues_from_commits return if found_issues.empty? message = "## Jira issues\n\n" if include_resolves_keyword message << "| | | |\n" message << "| --- | --- | ----- |\n" else message << "| | |\n" message << "| --- | ----- |\n" end begin found_issues.each do |issue_id| issue = obtain_issue(issue_id) return if issue.nil? description = issue.summary description = description.gsub(/[<|>\[\]]/) { |bracket| "\\#{bracket}" } message << " | " if include_resolves_keyword message << "Resolves #{issue_id} | " end message << "[#{description}](#{jira_site}/browse/#{issue_id})\n" end rescue JIRA::HTTPError => e print e.message end markdown message end
Private Instance Methods
# File lib/jira_issue_links/plugin.rb, line 121 def jira_client jira_context_path = '' if jira_context_path.nil? @jira_client = JIRA::Client.new( username: jira_username, password: jira_password, site: jira_site, context_path: jira_context_path, auth_type: :basic ) if @jira_client.nil? return @jira_client end
# File lib/jira_issue_links/plugin.rb, line 133 def obtain_issue(issue_id) issue = jira_client.Issue.jql("ID = '#{issue_id}'").first return if issue.nil? return JiraIssue.new(issue_id, issue.summary, issue.issuetype.name, issue.issuetype.iconUrl) end