danger-jira 0.5.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +5 -3
- data/danger-jira.gemspec +2 -2
- data/lib/jira/gem_version.rb +1 -1
- data/lib/jira/plugin.rb +46 -12
- data/spec/jira_spec.rb +65 -1
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7287a448b908b4d6879ac9b84f23eca2d36d5d9dd054a0825f29ea710a7de426
|
4
|
+
data.tar.gz: d15208bc1856e2aca33a38f507b1d49b1dca882d21a3f7d8571b57b93ab29b3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86772d0e7840a1c448e5d94d2e5df3c8b5a73190a3d17b961686b4e054008d3c2094e4364c8fc7c474818f305e685e0b108baf28673080129bfec24a05ad9686
|
7
|
+
data.tar.gz: ccb68490a542b183a1cfa62ea8dca9dd20dee815eeadfc6c7ff2711c13181c7ac9c460ea40a19b4e9e7fc80e9f185bd4c1b03ec65c9317da949a00ea2ceb3c57
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[](LICENSE.txt)
|
4
4
|
[](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,9 +22,11 @@ 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
|
28
30
|
)
|
29
31
|
```
|
30
32
|
|
@@ -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
|
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', '~>
|
25
|
-
spec.add_development_dependency 'rake', '~>
|
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'
|
data/lib/jira/gem_version.rb
CHANGED
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
|
-
|
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
|
@@ -64,7 +74,21 @@ module Danger
|
|
64
74
|
|
65
75
|
private
|
66
76
|
|
67
|
-
def
|
77
|
+
def vcs_host
|
78
|
+
return gitlab if defined? @dangerfile.gitlab
|
79
|
+
return github
|
80
|
+
end
|
81
|
+
|
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)
|
68
92
|
# Support multiple JIRA projects
|
69
93
|
keys = key.kind_of?(Array) ? key.join("|") : key
|
70
94
|
jira_key_regex_string = "((?:#{keys})-[0-9]+)"
|
@@ -73,7 +97,7 @@ module Danger
|
|
73
97
|
jira_issues = []
|
74
98
|
|
75
99
|
if search_title
|
76
|
-
|
100
|
+
vcs_host.pr_title.gsub(regexp) do |match|
|
77
101
|
jira_issues << match
|
78
102
|
end
|
79
103
|
end
|
@@ -86,8 +110,14 @@ module Danger
|
|
86
110
|
end
|
87
111
|
end
|
88
112
|
|
89
|
-
if
|
90
|
-
|
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
|
120
|
+
vcs_host.pr_body.gsub(regexp) do |match|
|
91
121
|
jira_issues << match
|
92
122
|
end
|
93
123
|
end
|
@@ -95,16 +125,20 @@ module Danger
|
|
95
125
|
end
|
96
126
|
|
97
127
|
def should_skip_jira?(search_title: true)
|
98
|
-
# Consider first occurrence of 'no-jira'
|
99
|
-
regexp = Regexp.new("no-jira", true)
|
128
|
+
# Consider first occurrence of 'no-jira' or nojira
|
129
|
+
regexp = Regexp.new("(no-jira|nojira)", true)
|
100
130
|
|
101
131
|
if search_title
|
102
|
-
|
132
|
+
vcs_host.pr_title.gsub(regexp) do |match|
|
103
133
|
return true unless match.empty?
|
104
134
|
end
|
105
135
|
end
|
106
136
|
|
107
|
-
|
137
|
+
vcs_host.pr_body.gsub(regexp) do |match|
|
138
|
+
return true unless match.empty?
|
139
|
+
end
|
140
|
+
|
141
|
+
vcs_host.branch_for_head.gsub(regexp) do |match|
|
108
142
|
return true unless match.empty?
|
109
143
|
end
|
110
144
|
|
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.
|
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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
|
-
|
195
|
-
|
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:
|