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