fastlane-plugin-jira_issues_release_notes 0.1.0 → 0.2.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 +4 -4
- data/lib/fastlane/plugin/jira_issues_release_notes/actions/branch_jira_issues_release_notes_action.rb +255 -0
- data/lib/fastlane/plugin/jira_issues_release_notes/helper/jira_issues_release_notes_helper.rb +5 -2
- data/lib/fastlane/plugin/jira_issues_release_notes/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8d5984ded8d97d30b8df79c68c103e923911c516829f203fd1d6b475368f783
|
4
|
+
data.tar.gz: b6262045d8f11134a0c1037004115b7c17a19e86f1264c2dc69b63d9173743ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e075f8823aad025a3280acab73817ef50161a14003f6dfa76f2a81f9b6ee2dc24664c94fc6345bd7e1d123fe58586f3624a7e8fd1ba44d851ada7f1003f3e7ae
|
7
|
+
data.tar.gz: 6c841d6bda953fabf5d2ff0f75d4f3e372c6e5b891179df98ca12f8246243d0fdef9f66910d1859fa20268a04b3bdfc00bdb59456f5f13c9d1df4259381d6048
|
@@ -0,0 +1,255 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require_relative '../helper/jira_issues_release_notes_helper'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
class BranchJiraIssuesReleaseNotesAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
branch = other_action.git_branch
|
9
|
+
regex = Regexp.new("(#{params[:ticket_prefix]}-\\d+)")
|
10
|
+
|
11
|
+
@format = params[:format]
|
12
|
+
@extra_fields = params[:extra_fields]
|
13
|
+
|
14
|
+
ticket_code = regex.match branch
|
15
|
+
|
16
|
+
return ticket_not_found unless ticket_code
|
17
|
+
|
18
|
+
UI.message "Found ticket code: #{ticket_code}"
|
19
|
+
|
20
|
+
|
21
|
+
@jira_helper = Helper::JiraIssuesReleaseNotesHelper.jira_helper(
|
22
|
+
host: params[:host],
|
23
|
+
username: params[:username],
|
24
|
+
password: params[:password],
|
25
|
+
context_path: params[:context_path],
|
26
|
+
disable_ssl_verification: params[:disable_ssl_verification]
|
27
|
+
)
|
28
|
+
|
29
|
+
issue = @jira_helper.get(issues: [ticket_code], extra_fields: @extra_fields.values).first
|
30
|
+
|
31
|
+
return ticket_not_found ticket_code unless issue
|
32
|
+
|
33
|
+
generate_message_with(issue: issue)
|
34
|
+
|
35
|
+
# tickets = tickets(commits: commits, regex: regex)
|
36
|
+
# UI.important("Jira tickets: #{tickets}")
|
37
|
+
|
38
|
+
# @jira_helper = Helper::JiraIssuesReleaseNotesHelper.jira_helper(
|
39
|
+
# host: params[:host],
|
40
|
+
# username: params[:username],
|
41
|
+
# password: params[:password],
|
42
|
+
# context_path: params[:context_path],
|
43
|
+
# disable_ssl_verification: params[:disable_ssl_verification]
|
44
|
+
# )
|
45
|
+
# issues = @jira_helper.get(issues: tickets)
|
46
|
+
|
47
|
+
# to_validate = issues.select { |issue| params[:to_validate_status].include?(issue.status.name) }
|
48
|
+
# validated = issues.select { |issue| params[:validated_status].include?(issue.status.name) }
|
49
|
+
|
50
|
+
# generate_changelog(to_validate: to_validate, validated: validated, format: params[:format], url: params[:build_url])
|
51
|
+
# end
|
52
|
+
|
53
|
+
# def self.generate_changelog(to_validate:, validated:, format:, url:)
|
54
|
+
# changelog = []
|
55
|
+
# changelog.concat(format_issues(label: 'Tasks to validate', issues: to_validate, format: format)) unless to_validate.empty?
|
56
|
+
# changelog.concat(['']) unless changelog.to_s.empty?
|
57
|
+
# changelog.concat(format_issues(label: 'Validated tasks', issues: validated, format: format)) unless validated.empty?
|
58
|
+
# # changes = format_issues(issues: issues)
|
59
|
+
# changelog = ['No changes included.'] if changelog.to_s.empty?
|
60
|
+
|
61
|
+
# changelog.join("\n")
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.ticket_not_found(ticket_code = "")
|
65
|
+
|
66
|
+
UI.important "No ticket code could be extracted from git branch name."
|
67
|
+
UI.message "Trying to use latest git commit"
|
68
|
+
last_commit = other_action.last_git_commit
|
69
|
+
return UI.error "There is no commit" unless last_commit
|
70
|
+
header_text = ticket_code ? "😅 Jira issue with key '#{ticket_code}' could not be found" : "😅 Jira issue could not be detected"
|
71
|
+
|
72
|
+
return [
|
73
|
+
style_text(text: header_text, style: 'heading'),
|
74
|
+
style_text(text: "► Latest Commit:", style: 'bold'),
|
75
|
+
last_commit[:message]
|
76
|
+
].join("\n")
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.style_text(text:, style:)
|
80
|
+
# formats the text according to the style we're looking to use
|
81
|
+
|
82
|
+
# Skips all styling
|
83
|
+
case style
|
84
|
+
when "title"
|
85
|
+
case @format
|
86
|
+
when "markdown"
|
87
|
+
"# #{text}"
|
88
|
+
when "slack"
|
89
|
+
"*#{text}*"
|
90
|
+
else
|
91
|
+
text
|
92
|
+
end
|
93
|
+
when "heading"
|
94
|
+
case format
|
95
|
+
when "markdown"
|
96
|
+
"### #{text}"
|
97
|
+
when "slack"
|
98
|
+
"*#{text}*"
|
99
|
+
else
|
100
|
+
"#{text}:"
|
101
|
+
end
|
102
|
+
when "bold"
|
103
|
+
case format
|
104
|
+
when "markdown"
|
105
|
+
"**#{text}**"
|
106
|
+
when "slack"
|
107
|
+
"*#{text}*"
|
108
|
+
else
|
109
|
+
text
|
110
|
+
end
|
111
|
+
else
|
112
|
+
text # catchall, shouldn't be needed
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.generate_message_with(issue:)
|
117
|
+
link = @jira_helper.url(issue: issue)
|
118
|
+
issue_type = issue.issuetype ? issue.issuetype.name : ''
|
119
|
+
status = issue.status.name
|
120
|
+
issue.attrs["fields"][:customfield_10040.to_s]
|
121
|
+
case @format
|
122
|
+
when "slack"
|
123
|
+
extra = @extra_fields.map { |key, value| ["", "*► #{key.to_s}*", issue.attrs["fields"][value.to_s]] }
|
124
|
+
[
|
125
|
+
"*► #{issue_type}: <#{link}|#{issue.summary}>* (#{status})",
|
126
|
+
issue.description,
|
127
|
+
extra.flatten!
|
128
|
+
]
|
129
|
+
.flatten!
|
130
|
+
.join("\n")
|
131
|
+
when "markdown"
|
132
|
+
extra = @extra_fields.map { |key, value| ["", "**► #{key.to_s}**", issue.attrs["fields"][value.to_s]] }
|
133
|
+
[
|
134
|
+
"**► #{issue_type}: [#{issue.summary}](#{link})** (#{status})",
|
135
|
+
issue.description,
|
136
|
+
extra.flatten!
|
137
|
+
]
|
138
|
+
.flatten!
|
139
|
+
.join("\n")
|
140
|
+
else
|
141
|
+
extra = @extra_fields.map { |key, value| ["", "► #{key.to_s}", issue.attrs["fields"][value.to_s]] }
|
142
|
+
[
|
143
|
+
"► #{issue_type}: #{issue.summary}(#{status}) #{link}",
|
144
|
+
issue.description,
|
145
|
+
extra.flatten!
|
146
|
+
]
|
147
|
+
.flatten!
|
148
|
+
.join("\n")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def self.description
|
153
|
+
"It generates a release note based on the issues keys found in branch name and descriptions found in the commits"
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.authors
|
157
|
+
["Erick Martins"]
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.return_value
|
161
|
+
# If your method provides a return value, you can describe here what it does
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.details
|
165
|
+
# Optional:
|
166
|
+
"It generates a release note based on the issues keys found in branch name and descriptions found in the commits"
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.available_options
|
170
|
+
[
|
171
|
+
FastlaneCore::ConfigItem.new(
|
172
|
+
key: :ticket_prefix,
|
173
|
+
env_name: 'FL_FIND_TICKETS_MATCHING',
|
174
|
+
description: 'regex to extract ticket numbers',
|
175
|
+
default_value: '[A-Z]+',
|
176
|
+
optional: true
|
177
|
+
),
|
178
|
+
FastlaneCore::ConfigItem.new(
|
179
|
+
key: :build_url,
|
180
|
+
env_name: 'FL_RELEASE_NOTES_BUILD_URL',
|
181
|
+
description: 'Link to the ci build',
|
182
|
+
optional: true,
|
183
|
+
default_value: ENV['BUILD_URL']
|
184
|
+
),
|
185
|
+
FastlaneCore::ConfigItem.new(
|
186
|
+
key: :format,
|
187
|
+
description: "You can use either markdown, slack or plain",
|
188
|
+
default_value: "markdown",
|
189
|
+
optional: true,
|
190
|
+
verify_block: proc do |value|
|
191
|
+
UI.user_error!("Invalid format! You can use either markdown, slack or plain") unless ['markdown', 'slack', 'plain'].include?(value)
|
192
|
+
end
|
193
|
+
),
|
194
|
+
FastlaneCore::ConfigItem.new(
|
195
|
+
key: :extra_fields,
|
196
|
+
description: "Extra jira fields",
|
197
|
+
type: Hash,
|
198
|
+
optional: true,
|
199
|
+
default_value: {},
|
200
|
+
),
|
201
|
+
|
202
|
+
# Jira Client options
|
203
|
+
FastlaneCore::ConfigItem.new(
|
204
|
+
key: :username,
|
205
|
+
env_name: 'FL_JIRA_USERNAME',
|
206
|
+
description: 'Jira user',
|
207
|
+
optional: false
|
208
|
+
),
|
209
|
+
FastlaneCore::ConfigItem.new(
|
210
|
+
key: :password,
|
211
|
+
env_name: 'FL_JIRA_PASSWORD',
|
212
|
+
description: 'Jira user',
|
213
|
+
optional: false
|
214
|
+
),
|
215
|
+
FastlaneCore::ConfigItem.new(
|
216
|
+
key: :host,
|
217
|
+
env_name: 'FL_JIRA_HOST',
|
218
|
+
description: 'Jira location',
|
219
|
+
optional: false
|
220
|
+
),
|
221
|
+
FastlaneCore::ConfigItem.new(
|
222
|
+
key: :context_path,
|
223
|
+
env_name: 'FL_JIRA_CONTEXT_PATH',
|
224
|
+
description: 'Jira context path',
|
225
|
+
optional: true,
|
226
|
+
default_value: ''
|
227
|
+
),
|
228
|
+
FastlaneCore::ConfigItem.new(
|
229
|
+
key: :disable_ssl_verification,
|
230
|
+
env_name: 'FL_JIRA_DISABLE_SSL_VERIFICATION',
|
231
|
+
description: 'Jira SSL Verification mode',
|
232
|
+
optional: true,
|
233
|
+
default_value: false,
|
234
|
+
type: Boolean
|
235
|
+
),
|
236
|
+
FastlaneCore::ConfigItem.new(
|
237
|
+
key: :debug,
|
238
|
+
description: "True if you want to log out a debug info",
|
239
|
+
default_value: false,
|
240
|
+
type: Boolean,
|
241
|
+
optional: true
|
242
|
+
)
|
243
|
+
]
|
244
|
+
end
|
245
|
+
|
246
|
+
def self.is_supported?(platform)
|
247
|
+
# Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
|
248
|
+
# See: https://docs.fastlane.tools/advanced/#control-configuration-by-lane-and-by-platform
|
249
|
+
#
|
250
|
+
# [:ios, :mac, :android].include?(platform)
|
251
|
+
true
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
data/lib/fastlane/plugin/jira_issues_release_notes/helper/jira_issues_release_notes_helper.rb
CHANGED
@@ -61,11 +61,14 @@ module Fastlane
|
|
61
61
|
@client = jira_client_helper
|
62
62
|
end
|
63
63
|
|
64
|
-
def get(issues:)
|
64
|
+
def get(issues:, extra_fields: [])
|
65
65
|
return [] if issues.to_a.empty?
|
66
66
|
|
67
|
+
fields = [:key, :summary, :status, :issuetype, :description]
|
68
|
+
fields.concat extra_fields
|
69
|
+
|
67
70
|
begin
|
68
|
-
@client.Issue.jql("KEY IN (#{issues.join(',')})", fields:
|
71
|
+
@client.Issue.jql("KEY IN (#{issues.join(',')})", fields: fields, validate_query: false)
|
69
72
|
rescue StandardError => e
|
70
73
|
UI.important('Jira Client: Failed to get issue.')
|
71
74
|
UI.important("Jira Client: Reason - #{e.message}")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-jira_issues_release_notes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erick Martins
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- LICENSE
|
160
160
|
- README.md
|
161
161
|
- lib/fastlane/plugin/jira_issues_release_notes.rb
|
162
|
+
- lib/fastlane/plugin/jira_issues_release_notes/actions/branch_jira_issues_release_notes_action.rb
|
162
163
|
- lib/fastlane/plugin/jira_issues_release_notes/actions/jira_issues_release_notes_action.rb
|
163
164
|
- lib/fastlane/plugin/jira_issues_release_notes/helper/jira_issues_release_notes_helper.rb
|
164
165
|
- lib/fastlane/plugin/jira_issues_release_notes/version.rb
|