danger-jira 0.6.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6e814fdd90d673e94f5fd1c01babfebca57b337e
4
- data.tar.gz: fbafb6db77c0cbaefe974e9185420c8783a934a6
2
+ SHA256:
3
+ metadata.gz: 7287a448b908b4d6879ac9b84f23eca2d36d5d9dd054a0825f29ea710a7de426
4
+ data.tar.gz: d15208bc1856e2aca33a38f507b1d49b1dca882d21a3f7d8571b57b93ab29b3d
5
5
  SHA512:
6
- metadata.gz: 75c425fc0e37f98c6d79443f60806e95f076e13fe8f16ba071502be7632c49aad3b382a2baf147590aefaadcd7c9f026e99c6e728a4a780edf358a5a082885e7
7
- data.tar.gz: f1391bf30950a3501c7fb8335d6ce3cb1951e50523666279081689ab99e74b1e3c19002180e64301af5e4aea34d37e6fa1f2eb5fcf58436ecb84225d49f01b9a
6
+ metadata.gz: 86772d0e7840a1c448e5d94d2e5df3c8b5a73190a3d17b961686b4e054008d3c2094e4364c8fc7c474818f305e685e0b108baf28673080129bfec24a05ad9686
7
+ data.tar.gz: ccb68490a542b183a1cfa62ea8dca9dd20dee815eeadfc6c7ff2711c13181c7ac9c460ea40a19b4e9e7fc80e9f185bd4c1b03ec65c9317da949a00ea2ceb3c57
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE.txt)
4
4
  [![Gem](https://img.shields.io/gem/v/danger-jira.svg?style=flat)](https://rubygems.org/gems/danger-jira)
5
5
 
6
- A [Danger](https://github.com/danger/danger) plugin for that links JIRA issues to pull requests. Inspired by [danger-plugin-jira-issue](https://github.com/macklinu/danger-plugin-jira-issue)
6
+ A [Danger](https://github.com/danger/danger) plugin for that links JIRA issues to pull requests for both GitHub and GitLab. Inspired by [danger-plugin-jira-issue](https://github.com/macklinu/danger-plugin-jira-issue)
7
7
 
8
8
  ## Installation
9
9
 
@@ -22,6 +22,8 @@ jira.check(
22
22
  url: "https://myjira.atlassian.net/browse",
23
23
  search_title: true,
24
24
  search_commits: false,
25
+ search_branch: false,
26
+ search_body: false,
25
27
  fail_on_warning: false,
26
28
  report_missing: true,
27
29
  skippable: true
@@ -51,7 +53,7 @@ With "KEY-123" in the PR title or PR body, Danger will comment with:
51
53
 
52
54
  ## Skipping
53
55
 
54
- You can skip danger checking for a JIRA issue by having `[no-jira]` in your title or PR body.
56
+ You can skip danger checking for a JIRA issue by if `no-jira` is provided on the PR title, description or commits. `nojira` is also allowed on branch names.
55
57
 
56
58
  ## License
57
59
 
data/danger-jira.gemspec CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0'
22
22
 
23
23
  # General ruby development
24
- spec.add_development_dependency 'bundler', '~> 1.3'
25
- spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'bundler', '~> 2.4'
25
+ spec.add_development_dependency 'rake', '~> 13.0'
26
26
 
27
27
  # Testing support
28
28
  spec.add_development_dependency 'rspec', '~> 3.4'
@@ -1,3 +1,3 @@
1
1
  module Jira
2
- VERSION = "0.6.0".freeze
2
+ VERSION = "0.9.0".freeze
3
3
  end
data/lib/jira/plugin.rb CHANGED
@@ -26,6 +26,9 @@ module Danger
26
26
  # @param [Boolean] search_commits
27
27
  # Option to search JIRA issues from commit messages
28
28
  #
29
+ # @param [Boolean] search_branch
30
+ # Option to search JIRA issues from the name of the PR branch
31
+ #
29
32
  # @param [Boolean] fail_on_warning
30
33
  # Option to fail danger if no JIRA issue found
31
34
  #
@@ -33,11 +36,11 @@ module Danger
33
36
  # Option to report if no JIRA issue was found
34
37
  #
35
38
  # @param [Boolean] skippable
36
- # Option to skip the report if 'no-jira' is provided on the PR title, description or commits
39
+ # Option to skip the report if 'no-jira' is provided on the PR title, description or commits. 'nojira' is also allowed on branch names.
37
40
  #
38
41
  # @return [void]
39
42
  #
40
- def check(key: nil, url: nil, emoji: ":link:", search_title: true, search_commits: false, fail_on_warning: false, report_missing: true, skippable: true)
43
+ def check(key: nil, url: nil, emoji: ":link:", search_title: true, search_commits: false, search_branch: false, search_body: false, fail_on_warning: false, report_missing: true, skippable: true)
41
44
  throw Error("'key' missing - must supply JIRA issue key") if key.nil?
42
45
  throw Error("'url' missing - must supply JIRA installation URL") if url.nil?
43
46
 
@@ -46,14 +49,21 @@ module Danger
46
49
  jira_issues = find_jira_issues(
47
50
  key: key,
48
51
  search_title: search_title,
49
- search_commits: search_commits
52
+ search_commits: search_commits,
53
+ search_branch: search_branch,
54
+ search_body: search_body
50
55
  )
51
56
 
52
57
  if !jira_issues.empty?
53
58
  jira_urls = jira_issues.map { |issue| link(href: ensure_url_ends_with_slash(url), issue: issue) }.join(", ")
54
59
  message("#{emoji} #{jira_urls}")
55
60
  elsif report_missing
56
- msg = "This PR does not contain any JIRA issue keys in the PR title or commit messages (e.g. KEY-123)"
61
+ msg = error_message_for(
62
+ search_title,
63
+ search_commits,
64
+ search_branch,
65
+ search_body
66
+ )
57
67
  if fail_on_warning
58
68
  fail(msg)
59
69
  else
@@ -69,7 +79,16 @@ module Danger
69
79
  return github
70
80
  end
71
81
 
72
- def find_jira_issues(key: nil, search_title: true, search_commits: false)
82
+ def error_message_for(search_title, search_commits, search_branch, search_body)
83
+ error_string = ""
84
+ error_string += ", title" if search_title
85
+ error_string += ", commit messages" if search_commits
86
+ error_string += ", branch name" if search_branch
87
+ error_string += ", body" if search_body
88
+ return "This PR does not contain any JIRA issue keys in the PR" + error_string[1..-1] + " (e.g. KEY-123)"
89
+ end
90
+
91
+ def find_jira_issues(key: nil, search_title: true, search_commits: false, search_branch: false, search_body: false)
73
92
  # Support multiple JIRA projects
74
93
  keys = key.kind_of?(Array) ? key.join("|") : key
75
94
  jira_key_regex_string = "((?:#{keys})-[0-9]+)"
@@ -91,7 +110,13 @@ module Danger
91
110
  end
92
111
  end
93
112
 
94
- if jira_issues.empty?
113
+ if search_branch
114
+ vcs_host.branch_for_head.gsub(regexp) do |match|
115
+ jira_issues << match
116
+ end
117
+ end
118
+
119
+ if search_body
95
120
  vcs_host.pr_body.gsub(regexp) do |match|
96
121
  jira_issues << match
97
122
  end
@@ -100,8 +125,8 @@ module Danger
100
125
  end
101
126
 
102
127
  def should_skip_jira?(search_title: true)
103
- # Consider first occurrence of 'no-jira'
104
- regexp = Regexp.new("no-jira", true)
128
+ # Consider first occurrence of 'no-jira' or nojira
129
+ regexp = Regexp.new("(no-jira|nojira)", true)
105
130
 
106
131
  if search_title
107
132
  vcs_host.pr_title.gsub(regexp) do |match|
@@ -113,6 +138,10 @@ module Danger
113
138
  return true unless match.empty?
114
139
  end
115
140
 
141
+ vcs_host.branch_for_head.gsub(regexp) do |match|
142
+ return true unless match.empty?
143
+ end
144
+
116
145
  return false
117
146
  end
118
147
 
data/spec/jira_spec.rb CHANGED
@@ -37,16 +37,54 @@ module Danger
37
37
  expect(issues).to eq(["WEB-125"])
38
38
  end
39
39
 
40
+ it "can find jira issues via branch name" do
41
+ allow(@jira).to receive_message_chain("github.branch_for_head").and_return("bugfix/WEB-126")
42
+ issues = @jira.find_jira_issues(
43
+ key: "WEB",
44
+ search_title: false,
45
+ search_commits: false,
46
+ search_branch: true
47
+ )
48
+ expect(issues).to eq(["WEB-126"])
49
+ end
50
+
40
51
  it "can find jira issues in pr body" do
41
52
  allow(@jira).to receive_message_chain("github.pr_body").and_return("[WEB-126]")
42
53
  issues = @jira.find_jira_issues(
43
54
  key: "WEB",
44
55
  search_title: false,
45
- search_commits: false
56
+ search_commits: false,
57
+ search_branch: false,
58
+ search_body: true
46
59
  )
47
60
  expect(issues).to eq(["WEB-126"])
48
61
  end
49
62
 
63
+ it "outputs error message for title" do
64
+ error_string = @jira.error_message_for(true, false, false, false)
65
+ expect(error_string).to eq("This PR does not contain any JIRA issue keys in the PR title (e.g. KEY-123)")
66
+ end
67
+
68
+ it "outputs error message for title, commits" do
69
+ error_string = @jira.error_message_for(true, true, false, false)
70
+ expect(error_string).to eq("This PR does not contain any JIRA issue keys in the PR title, commit messages (e.g. KEY-123)")
71
+ end
72
+
73
+ it "outputs error message for title, commits, branch" do
74
+ error_string = @jira.error_message_for(true, true, true, false)
75
+ expect(error_string).to eq("This PR does not contain any JIRA issue keys in the PR title, commit messages, branch name (e.g. KEY-123)")
76
+ end
77
+
78
+ it "outputs error message for title, commits, branch, body" do
79
+ error_string = @jira.error_message_for(true, true, true, true)
80
+ expect(error_string).to eq("This PR does not contain any JIRA issue keys in the PR title, commit messages, branch name, body (e.g. KEY-123)")
81
+ end
82
+
83
+ it "outputs error message for title, branch" do
84
+ error_string = @jira.error_message_for(true, false, true, false)
85
+ expect(error_string).to eq("This PR does not contain any JIRA issue keys in the PR title, branch name (e.g. KEY-123)")
86
+ end
87
+
50
88
  it "can find no-jira in pr body" do
51
89
  allow(@jira).to receive_message_chain("github.pr_body").and_return("[no-jira] Ticket doesn't need a jira but [WEB-123] WEB-123")
52
90
  result = @jira.should_skip_jira?(search_title: false)
@@ -59,6 +97,32 @@ module Danger
59
97
  expect(result).to be(true)
60
98
  end
61
99
 
100
+ it "can find no-jira in branch name" do
101
+ allow(@jira).to receive_message_chain("github.pr_body").and_return("")
102
+ allow(@jira).to receive_message_chain("github.branch_for_head").and_return("feat/no-jira/somefeature")
103
+ result = @jira.should_skip_jira?(search_title: false)
104
+ expect(result).to be(true)
105
+ end
106
+
107
+ it "can find nojira in pr body" do
108
+ allow(@jira).to receive_message_chain("github.pr_body").and_return("[nojira] Ticket doesn't need a jira but [WEB-123] WEB-123")
109
+ result = @jira.should_skip_jira?(search_title: false)
110
+ expect(result).to be(true)
111
+ end
112
+
113
+ it "can find nojira in title" do
114
+ allow(@jira).to receive_message_chain("github.pr_title").and_return("[nojira] Ticket doesn't need jira but [WEB-123] and WEB-123")
115
+ result = @jira.should_skip_jira?
116
+ expect(result).to be(true)
117
+ end
118
+
119
+ it "can find nojira in branch name" do
120
+ allow(@jira).to receive_message_chain("github.pr_body").and_return("")
121
+ allow(@jira).to receive_message_chain("github.branch_for_head").and_return("feat/nojira/somefeature")
122
+ result = @jira.should_skip_jira?(search_title: false)
123
+ expect(result).to be(true)
124
+ end
125
+
62
126
  it "can remove duplicates" do
63
127
  allow(@jira).to receive_message_chain("github.pr_title").and_return("Ticket [WEB-123] and WEB-123")
64
128
  issues = @jira.find_jira_issues(key: "WEB")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-jira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RestlessThinker
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-16 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danger-plugin-api
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '2.4'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '2.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +176,7 @@ homepage: https://github.com/RestlessThinker/danger-jira
176
176
  licenses:
177
177
  - MIT
178
178
  metadata: {}
179
- post_install_message:
179
+ post_install_message:
180
180
  rdoc_options: []
181
181
  require_paths:
182
182
  - lib
@@ -191,9 +191,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
191
  - !ruby/object:Gem::Version
192
192
  version: '0'
193
193
  requirements: []
194
- rubyforge_project:
195
- rubygems_version: 2.6.12
196
- signing_key:
194
+ rubygems_version: 3.4.10
195
+ signing_key:
197
196
  specification_version: 4
198
197
  summary: A Danger plugin to link JIRA issues to a pull request.
199
198
  test_files: