fastlane-plugin-jira_issues_release_notes 0.4.0 → 1.0.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.
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module JiraIssuesReleaseNotes
3
- VERSION = "0.4.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,29 +1,29 @@
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.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erick Martins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-25 00:00:00.000000000 Z
11
+ date: 2021-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: jira-ruby
14
+ name: zk-jira-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '2.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -159,8 +159,12 @@ 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
163
- - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_issues_release_notes_action.rb
162
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_comment_action.rb
163
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_feature_validation_action.rb
164
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_issues_keys_from_commits_action.rb
165
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_release_changelog_action.rb
166
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_release_validation_action.rb
167
+ - lib/fastlane/plugin/jira_issues_release_notes/actions/jira_versions_action.rb
164
168
  - lib/fastlane/plugin/jira_issues_release_notes/helper/jira_issues_release_notes_helper.rb
165
169
  - lib/fastlane/plugin/jira_issues_release_notes/version.rb
166
170
  homepage: https://github.com/erick-martins/fastlane-plugin-jira_issues_release_notes
@@ -1,289 +0,0 @@
1
- require 'fastlane/action'
2
- require_relative '../helper/jira_issues_release_notes_helper'
3
-
4
- module Fastlane
5
- module Actions
6
- class JiraIssuesReleaseNotesAction < Action
7
- def self.get_last_tag(params)
8
- # Try to find the tag
9
- command = "git describe --tags --match=#{params[:match]}"
10
- Actions.sh(command, log: params[:debug])
11
- rescue StandardError
12
- UI.message("Tag was not found for match pattern - #{params[:match]}")
13
- ''
14
- end
15
-
16
- def self.get_last_tag_hash(params)
17
- command = "git rev-list -n 1 refs/tags/#{params[:tag_name]}"
18
- Actions.sh(command, log: params[:debug]).chomp
19
- end
20
-
21
- def self.get_commits_from_hash(params)
22
- Helper::JiraIssuesReleaseNotesHelper.git_log(
23
- pretty: '%s|%b|>',
24
- start: params[:hash],
25
- debug: params[:debug]
26
- )
27
- end
28
-
29
- def self.run(params)
30
-
31
- @format = params[:format]
32
- @format_line_break = @format === 'html' ? '<br />' : "\n"
33
-
34
- tag = get_last_tag(
35
- match: params[:tag_prefix],
36
- debug: params[:debug]
37
- )
38
-
39
- if tag.empty?
40
- UI.message("First commit of the branch is taken as a begining of next release")
41
- # If there is no tag found we taking the first commit of current branch
42
- hash = Actions.sh('git rev-list --max-parents=0 HEAD', log: params[:debug]).chomp
43
- else
44
- # Tag's format is v2.3.4-5-g7685948
45
- # Get a hash of last version tag
46
- tag_name = tag.split('-')[0...-2].join('-').strip
47
- parsed_version = tag_name.match(params[:tag_version_match])
48
-
49
- if parsed_version.nil?
50
- UI.user_error!("Error while parsing version from tag #{tag_name} by using tag_version_match - #{params[:tag_version_match]}. Please check if the tag contains version as you expect and if you are using single brackets for tag_version_match parameter.")
51
- end
52
-
53
- version = parsed_version[0]
54
-
55
- # Get a hash of last version tag
56
- hash = get_last_tag_hash(
57
- tag_name: tag_name,
58
- debug: params[:debug]
59
- )
60
-
61
- UI.message("Found a tag #{tag_name} associated with version #{version}")
62
- end
63
-
64
- # Get commits log between last version and head
65
- commits = get_commits_from_hash(
66
- hash: hash,
67
- debug: params[:debug]
68
- )
69
-
70
- regex = Regexp.new("(#{params[:ticket_prefix]}-\\d+)")
71
-
72
- tickets = tickets(commits: commits, regex: regex)
73
- UI.important("Jira tickets: #{tickets}")
74
-
75
- @jira_helper = Helper::JiraIssuesReleaseNotesHelper.jira_helper(
76
- host: params[:host],
77
- username: params[:username],
78
- password: params[:password],
79
- context_path: params[:context_path],
80
- disable_ssl_verification: params[:disable_ssl_verification]
81
- )
82
- issues = @jira_helper.get(issues: tickets)
83
-
84
- to_validate = issues.select { |issue| params[:to_validate_status].include?(issue.status.name) }
85
- validated = issues.select { |issue| params[:validated_status].include?(issue.status.name) }
86
-
87
- generate_changelog(to_validate: to_validate, validated: validated)
88
- end
89
-
90
- def self.generate_changelog(to_validate:, validated:)
91
- changelog = []
92
- changelog.concat(format_issues(label: 'Tasks to validate', issues: to_validate)) unless to_validate.empty?
93
- changelog.concat(['']) unless changelog.to_s.empty?
94
- changelog.concat(format_issues(label: 'Validated tasks', issues: validated)) unless validated.empty?
95
- # changes = format_issues(issues: issues)
96
- changelog = ['No changes included.'] if changelog.to_s.empty?
97
-
98
- changelog.join(@format_line_break)
99
- end
100
-
101
- def self.style_text(text:, style:)
102
- # formats the text according to the style we're looking to use
103
-
104
- # Skips all styling
105
- case style
106
- when "title"
107
- case @format
108
- when "markdown"
109
- "# #{text}"
110
- when "slack"
111
- "*#{text}*"
112
- when "html"
113
- "<h1>#{text}</h1>"
114
- else
115
- text
116
- end
117
- when "heading"
118
- case @format
119
- when "markdown"
120
- "### #{text}"
121
- when "slack"
122
- "*#{text}*"
123
- when "html"
124
- "<h3>#{text}</h3>"
125
- else
126
- "#{text}:"
127
- end
128
- when "bold"
129
- case @format
130
- when "markdown"
131
- "**#{text}**"
132
- when "slack"
133
- "*#{text}*"
134
- when "html"
135
- "<strong>#{text}</strong>"
136
- else
137
- text
138
- end
139
- else
140
- text # catchall, shouldn't be needed
141
- end
142
- end
143
-
144
- def self.format_issue_link(issue:)
145
- # formats the link according to the output format we need
146
- link = @jira_helper.url(issue: issue)
147
- case @format
148
- when "slack"
149
- "*<#{link}|#{issue.key}>*: #{issue.summary}"
150
- when "markdown"
151
- "- **[#{issue.key}](#{link})**: #{issue.summary}"
152
- when "html"
153
- "&nbsp;&nbsp;- <strong><a href=\"#{link}\" target=\"_blank\">#{issue.key}</a><strong>: #{issue.summary}"
154
- else
155
- "- #{issue.key}: #{issue.summary} (#{link})"
156
- end
157
- end
158
-
159
- def self.format_issues(label:, issues:)
160
- [
161
- style_text(text: "► #{label}", style: 'heading'),
162
- issues.map { |issue| format_issue_link(issue: issue) }
163
- ].flatten!
164
- end
165
-
166
- def self.tickets(commits:, regex:)
167
- commits
168
- .to_enum(:scan, regex)
169
- .map { $& }
170
- .reject(&:empty?)
171
- .uniq
172
- end
173
-
174
- def self.description
175
- "It generates a release note based on the issues keys and descriptions found in the commits"
176
- end
177
-
178
- def self.authors
179
- ["Erick Martins"]
180
- end
181
-
182
- def self.return_value
183
- # If your method provides a return value, you can describe here what it does
184
- end
185
-
186
- def self.details
187
- # Optional:
188
- "It generates a release note based on the issues keys and descriptions found in the commits"
189
- end
190
-
191
- def self.available_options
192
- [
193
- FastlaneCore::ConfigItem.new(
194
- key: :tag_prefix,
195
- description: "Match parameter of git describe. See man page of git describe for more info",
196
- verify_block: proc do |value|
197
- UI.user_error!("No match for analyze_commits action given, pass using `match: 'expr'`") unless value && !value.empty?
198
- end
199
- ),
200
- FastlaneCore::ConfigItem.new(
201
- key: :ticket_prefix,
202
- env_name: 'FL_FIND_TICKETS_MATCHING',
203
- description: 'regex to extract ticket numbers',
204
- default_value: '[A-Z]+',
205
- optional: true
206
- ),
207
- FastlaneCore::ConfigItem.new(
208
- key: :tag_version_match,
209
- description: "To parse version number from tag name",
210
- default_value: '\d+\.\d+\.\d+'
211
- ),
212
- FastlaneCore::ConfigItem.new(
213
- key: :validated_status,
214
- env_name: 'FL_JIRA_VALIDATED_STATUS',
215
- description: 'List of jira issues status already validated',
216
- optional: false,
217
- type: Array
218
- ),
219
- FastlaneCore::ConfigItem.new(
220
- key: :to_validate_status,
221
- env_name: 'FL_JIRA_TO_VALIDATE_STATUS',
222
- description: 'List of jira issues status to be validated',
223
- optional: false,
224
- type: Array
225
- ),
226
- FastlaneCore::ConfigItem.new(
227
- key: :format,
228
- description: "You can use either markdown, slack, html or plain",
229
- default_value: "markdown",
230
- optional: true,
231
- verify_block: proc do |value|
232
- UI.user_error!("Invalid format! You can use either markdown, slack, html or plain") unless ['markdown', 'html', 'slack', 'plain'].include?(value)
233
- end
234
- ),
235
-
236
- # Jira Client options
237
- FastlaneCore::ConfigItem.new(
238
- key: :username,
239
- env_name: 'FL_JIRA_USERNAME',
240
- description: 'Jira user',
241
- optional: false
242
- ),
243
- FastlaneCore::ConfigItem.new(
244
- key: :password,
245
- env_name: 'FL_JIRA_PASSWORD',
246
- description: 'Jira user password',
247
- optional: false
248
- ),
249
- FastlaneCore::ConfigItem.new(
250
- key: :host,
251
- env_name: 'FL_JIRA_HOST',
252
- description: 'Jira location',
253
- optional: false
254
- ),
255
- FastlaneCore::ConfigItem.new(
256
- key: :context_path,
257
- env_name: 'FL_JIRA_CONTEXT_PATH',
258
- description: 'Jira context path',
259
- optional: true,
260
- default_value: ''
261
- ),
262
- FastlaneCore::ConfigItem.new(
263
- key: :disable_ssl_verification,
264
- env_name: 'FL_JIRA_DISABLE_SSL_VERIFICATION',
265
- description: 'Jira SSL Verification mode',
266
- optional: true,
267
- default_value: false,
268
- type: Boolean
269
- ),
270
- FastlaneCore::ConfigItem.new(
271
- key: :debug,
272
- description: "True if you want to log out a debug info",
273
- default_value: false,
274
- type: Boolean,
275
- optional: true
276
- )
277
- ]
278
- end
279
-
280
- def self.is_supported?(platform)
281
- # Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
282
- # See: https://docs.fastlane.tools/advanced/#control-configuration-by-lane-and-by-platform
283
- #
284
- # [:ios, :mac, :android].include?(platform)
285
- true
286
- end
287
- end
288
- end
289
- end