lib/jira/plugin.rb in danger-jira-0.3.0 vs lib/jira/plugin.rb in danger-jira-0.4.0
- old
+ new
@@ -18,39 +18,54 @@
# The JIRA url hosted instance.
#
# @param [String] emoji
# The emoji you want to display in the message.
#
+ # @param [Boolean] search_title
+ # Option to search JIRA issues from PR title
+ #
+ # @param [Boolean] search_commits
+ # Option to search JIRA issues from commit messages
+ #
# @param [Boolean] fail_on_warning
- # Option to fail danger if no JIRA issue found in PR title
+ # Option to fail danger if no JIRA issue found
#
+ # @param [Boolean] report_missing
+ # Option to report if no JIRA issue was found
+ #
# @return [void]
#
- def check(key: nil, url: nil, emoji: ":link:", fail_on_warning: false)
+ def check(key: nil, url: nil, emoji: ":link:", search_title: true, search_commits: false, fail_on_warning: false, report_missing: true)
throw Error("'key' missing - must supply JIRA issue key") if key.nil?
throw Error("'url' missing - must supply JIRA installation URL") if url.nil?
# Support multiple JIRA projects
keys = key.kind_of?(Array) ? key.join("|") : key
- jira_key_regex_string = "((#{keys})-[0-9]+)"
+ jira_key_regex_string = "((?:#{keys})-[0-9]+)"
regexp = Regexp.new(/#{jira_key_regex_string}/)
jira_issues = []
- github.pr_title.gsub(regexp) do |match|
- jira_issues << match
+
+ if search_title
+ jira_issues << github.pr_title.scan(regexp)
end
+ if search_commits
+ jira_issues << git.commits.map { |commit| commit.message.scan(regexp) }.compact
+ end
+ jira_issues.flatten.uniq
+
if jira_issues.empty?
github.pr_body.gsub(regexp) do |match|
jira_issues << match
end
end
if !jira_issues.empty?
jira_urls = jira_issues.map { |issue| link(href: ensure_url_ends_with_slash(url), issue: issue) }.join(", ")
message("#{emoji} #{jira_urls}")
- else
- msg = "This PR does not contain a JIRA issue key in the PR title (e.g. KEY-123)"
+ elsif report_missing
+ msg = "This PR does not contain any JIRA issue keys in the PR title or commit messages (e.g. KEY-123)"
if fail_on_warning
fail(msg)
else
warn(msg)
end