fastlane-plugin-polidea 1.0.0.pre → 2.2.0.pre.1

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.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -3
  3. data/lib/fastlane/plugin/polidea.rb +7 -0
  4. data/lib/fastlane/plugin/polidea/actions/add_prefix_schema.rb +3 -0
  5. data/lib/fastlane/plugin/polidea/actions/extract_app_icon.rb +4 -0
  6. data/lib/fastlane/plugin/polidea/actions/extract_app_info.rb +11 -8
  7. data/lib/fastlane/plugin/polidea/actions/extract_app_name.rb +3 -0
  8. data/lib/fastlane/plugin/polidea/actions/extract_version.rb +4 -0
  9. data/lib/fastlane/plugin/polidea/actions/fota_mail.rb +14 -16
  10. data/lib/fastlane/plugin/polidea/actions/fota_s3.rb +28 -33
  11. data/lib/fastlane/plugin/polidea/actions/get_binary_size.rb +4 -0
  12. data/lib/fastlane/plugin/polidea/actions/import_provisioning.rb +5 -0
  13. data/lib/fastlane/plugin/polidea/actions/release_notes.rb +5 -0
  14. data/lib/fastlane/plugin/polidea/actions/release_notes_from_commits.rb +54 -0
  15. data/lib/fastlane/plugin/polidea/actions/shuttle.rb +6 -38
  16. data/lib/fastlane/plugin/polidea/helper/analytics.rb +43 -0
  17. data/lib/fastlane/plugin/polidea/helper/mime.rb +22 -0
  18. data/lib/fastlane/plugin/polidea/helper/page_generator.rb +39 -3
  19. data/lib/fastlane/plugin/polidea/helper/qr_generator.rb +7 -7
  20. data/lib/fastlane/plugin/polidea/helper/shuttle.rb +39 -0
  21. data/lib/fastlane/plugin/polidea/templates/download.erb +481 -0
  22. data/lib/fastlane/plugin/polidea/templates/images/cover-shuttle.jpg +0 -0
  23. data/lib/fastlane/plugin/polidea/templates/images/icon-placeholder.png +0 -0
  24. data/lib/fastlane/plugin/polidea/templates/images/polidea-logo.png +0 -0
  25. data/lib/fastlane/plugin/polidea/templates/images/social-behance.png +0 -0
  26. data/lib/fastlane/plugin/polidea/templates/images/social-dribbble.png +0 -0
  27. data/lib/fastlane/plugin/polidea/templates/images/social-facebook.png +0 -0
  28. data/lib/fastlane/plugin/polidea/templates/images/social-github.png +0 -0
  29. data/lib/fastlane/plugin/polidea/templates/images/social-instagram.png +0 -0
  30. data/lib/fastlane/plugin/polidea/templates/images/social-linkedin.png +0 -0
  31. data/lib/fastlane/plugin/polidea/templates/images/social-twitter.png +0 -0
  32. data/lib/fastlane/plugin/polidea/templates/installation-page/css/installation-page.css +2835 -1082
  33. data/lib/fastlane/plugin/polidea/templates/installation_template.erb +3 -7
  34. data/lib/fastlane/plugin/polidea/templates/mailgun_template.erb +56 -24
  35. data/lib/fastlane/plugin/polidea/templates/secure_installation_template.erb +6 -10
  36. data/lib/fastlane/plugin/polidea/version.rb +1 -1
  37. metadata +97 -20
  38. data/lib/fastlane/plugin/polidea/actions/polidea_store.rb +0 -255
  39. data/lib/fastlane/plugin/polidea/templates/images/logo.png +0 -0
  40. data/lib/fastlane/plugin/polidea/templates/images/polidea-facebook-icon.png +0 -0
  41. data/lib/fastlane/plugin/polidea/templates/images/polidea-github-icon.png +0 -0
  42. data/lib/fastlane/plugin/polidea/templates/images/polidea-twitter-icon.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 24cb6b4990f9df96baf13a4d87042c29c0d58511
4
- data.tar.gz: d821ae3f09c6f3a26aff561f0b1f96676fc5e6bb
2
+ SHA256:
3
+ metadata.gz: 3a200dfe6c81fc0c43478b1092c96b60a4bb2d516128b8d6e3e82d244b0f0278
4
+ data.tar.gz: 9bfa26033bfbe2bdae07e37c2fcd3271f2e0eb897c6a586b4d12430f7922d192
5
5
  SHA512:
6
- metadata.gz: bb90f970a5776ffd5ed4d73eacc46e5221c304b195af7060ecb3ad0f95590e18680dca39f0385d00aac31b9f4ec9385114c6d40076e803dd439a272acaf144d1
7
- data.tar.gz: b6e8ce80330823d299e937e2fe78eee9722247fc182a0d7c2fb3a1c45c665772f5b319a83b7a64d9dc6093f52337063d021ae00d8d4d3790a57be3d4bae36465
6
+ metadata.gz: 2e1c8608894077d23abd728f70c020af492b2a83d0d1202e9374815336946694bb1b6b75308219258c4d99337b6c84839012ddfa06b5e9832845c53c055939f8
7
+ data.tar.gz: a15a41c923351da5092cd8c4bf1b8f32c537a159c3128317c569a87457b3e0c3c96bd778f757c0a756d798c58face121aa526e31eb6bcbef77e07b984a1d5117
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # fastlane-plugin-polidea
2
2
 
3
- [![build status](https://gitlab2.polidea.com/CI/fastlane-plugin-polidea/badges/master/build.svg)](https://gitlab2.polidea.com/CI/fastlane-plugin-polidea)
3
+ [![build status](https://gitlab.polidea.com/CICD/fastlane-plugin-polidea/badges/master/pipeline.svg)](https://gitlab.polidea.com/CICD/fastlane-plugin-polidea/pipelines)
4
4
  [![Gem](https://img.shields.io/gem/v/fastlane-plugin-polidea.svg?style=flat)](http://rubygems.org/gems/fastlane-plugin-polidea)
5
5
 
6
6
 
@@ -21,7 +21,6 @@ Plugin contains following actions:
21
21
  - `get_binary_size`: Measures binary size in bytes
22
22
  - `s3`: Custom version of s3 action with Polidea's installation page
23
23
  - `fota_mail`: Custom version of mailgun action with Polidea's mail template
24
- - `polidea_store`: Notifies Polidea Store about new app version
25
24
 
26
25
  See more details [here](https://gitlab2.polidea.com/CI/fastlane-plugin-polidea/blob/master/docs/Actions.md).
27
26
  To list all available actions run:
@@ -39,7 +38,6 @@ lane :deploy do
39
38
  extract_version
40
39
  get_binary_size
41
40
  s3
42
- polidea_store
43
41
  fota_mail(
44
42
  to: "piotr.dubiel@polidea.com"
45
43
  )
@@ -1,4 +1,5 @@
1
1
  require 'fastlane/plugin/polidea/version'
2
+ require 'fastlane/plugin/polidea/helper/analytics'
2
3
 
3
4
  module Fastlane
4
5
  module Polidea
@@ -6,6 +7,12 @@ module Fastlane
6
7
  def self.all_classes
7
8
  Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
9
  end
10
+
11
+ def self.session
12
+ require 'securerandom'
13
+ @session_id ||= SecureRandom.uuid
14
+ @session ||= Analytics.new(@session_id)
15
+ end
9
16
  end
10
17
  end
11
18
 
@@ -8,6 +8,8 @@ module Fastlane
8
8
 
9
9
  class AddPrefixSchemaAction < Action
10
10
  def self.run(config)
11
+ Fastlane::Polidea.session.action_launched("add_prefix_schema", config)
12
+
11
13
  prefix_schema = generate_url_scheme
12
14
 
13
15
  info_plists = Dir.glob(File.join(config[:path], "**/*.plist"))
@@ -18,6 +20,7 @@ module Fastlane
18
20
 
19
21
  Actions.lane_context[SharedValues::PREFIX_SCHEMA] = prefix_schema
20
22
 
23
+ Fastlane::Polidea.session.action_completed("add_prefix_schema")
21
24
  prefix_schema
22
25
  end
23
26
 
@@ -10,6 +10,8 @@ module Fastlane
10
10
 
11
11
  class ExtractAppIconAction < Action
12
12
  def self.run(config)
13
+ Fastlane::Polidea.session.action_launched("extract_app_icon", config)
14
+
13
15
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym
14
16
  icon_output_path = config[:icon_output_path]
15
17
 
@@ -24,6 +26,8 @@ module Fastlane
24
26
  else
25
27
  UI.important("No icon found.")
26
28
  end
29
+
30
+ Fastlane::Polidea.session.action_completed("extract_app_icon")
27
31
  end
28
32
 
29
33
  def self.extract_icon(platform, config)
@@ -15,6 +15,8 @@ module Fastlane
15
15
 
16
16
  class ExtractAppInfoAction < Action
17
17
  def self.run(config)
18
+ Fastlane::Polidea.session.action_launched("extract_app_info", config)
19
+
18
20
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym
19
21
 
20
22
  icon_output_path = config[:icon_output_path]
@@ -34,6 +36,8 @@ module Fastlane
34
36
  SharedValues::APP_VERSION => app_version,
35
37
  SharedValues::BUILD_NUMBER => build_number
36
38
  )
39
+
40
+ Fastlane::Polidea.session.action_completed("extract_app_info")
37
41
  end
38
42
 
39
43
  def self.validate(platform, config)
@@ -133,7 +137,7 @@ module Fastlane
133
137
  info = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(ipa_file)
134
138
  icon_files = ipa_icon_files(info)
135
139
  return if icon_files.empty?
136
- icon_file_name = icon_files.first
140
+ icon_file_name = icon_files.sort.last
137
141
  Zip::File.open(ipa_file) do |zipfile|
138
142
  icon_file = self.largest_ios_icon(zipfile.glob("**/Payload/**/#{icon_file_name}*.png"))
139
143
  return nil unless icon_file
@@ -145,13 +149,12 @@ module Fastlane
145
149
  end
146
150
 
147
151
  def self.ipa_icon_files(info)
148
- icons = info['CFBundleIcons']
149
- unless icons.nil?
150
- primary_icon = icons['CFBundlePrimaryIcon']
151
- unless primary_icon.nil?
152
- return primary_icon['CFBundleIconFiles']
153
- end
154
- end
152
+ # try iPhone
153
+ icons = info.dig('CFBundleIcons', 'CFBundlePrimaryIcon', 'CFBundleIconFiles')
154
+ return icons unless icons.nil?
155
+ # try iPad
156
+ icons = info.dig('CFBundleIcons~ipad', 'CFBundlePrimaryIcon', 'CFBundleIconFiles')
157
+ return icons unless icons.nil?
155
158
  []
156
159
  end
157
160
 
@@ -10,6 +10,8 @@ module Fastlane
10
10
 
11
11
  class ExtractAppNameAction < Action
12
12
  def self.run(config)
13
+ Fastlane::Polidea.session.action_launched("extract_app_name", config)
14
+
13
15
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym
14
16
 
15
17
  # Gets name from ipa/apk
@@ -20,6 +22,7 @@ module Fastlane
20
22
 
21
23
  UI.success("Successfully extracted app name: '#{Actions.lane_context[SharedValues::APP_NAME]}'")
22
24
 
25
+ Fastlane::Polidea.session.action_completed("extract_app_name")
23
26
  app_name
24
27
  end
25
28
 
@@ -11,6 +11,8 @@ module Fastlane
11
11
 
12
12
  class ExtractVersionAction < Action
13
13
  def self.run(config)
14
+ Fastlane::Polidea.session.action_launched("extract_version", config)
15
+
14
16
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym
15
17
 
16
18
  # Gets version from ipa/apk
@@ -24,6 +26,8 @@ module Fastlane
24
26
 
25
27
  UI.success("Successfully extracted app version: '#{Actions.lane_context[SharedValues::APP_VERSION]}', build number: #{Actions.lane_context[SharedValues::BUILD_NUMBER]}")
26
28
 
29
+ Fastlane::Polidea.session.action_completed("extract_version")
30
+
27
31
  return app_version, build_number
28
32
  end
29
33
 
@@ -1,4 +1,5 @@
1
1
  # rubocop:disable Metrics/MethodLength
2
+ require 'redcarpet'
2
3
  require 'fastlane/erb_template_helper'
3
4
 
4
5
  module Fastlane
@@ -9,10 +10,14 @@ module Fastlane
9
10
  end
10
11
 
11
12
  def self.run(options)
13
+ Fastlane::Polidea.session.action_launched("fota_mail", options)
14
+
12
15
  Actions.verify_gem!('premailer')
13
16
  require 'premailer'
14
17
  inline_images(options)
15
18
  mailgunit(options)
19
+
20
+ Fastlane::Polidea.session.action_completed("fota_mail")
16
21
  UI.success "Mail sent!"
17
22
  end
18
23
 
@@ -105,24 +110,15 @@ module Fastlane
105
110
  end
106
111
 
107
112
  def self.inline_images(options)
108
- base_path = "#{__dir__}/../templates/images"
109
113
  options[:inline] = [
110
114
  qr_code(options[:installation_link])
111
115
  ]
112
116
  options[:inline] << File.new(options[:app_icon]) if options[:app_icon]
113
- images = [
114
- "polidea-facebook-icon.png",
115
- "polidea-github-icon.png",
116
- "polidea-logo.png",
117
- "polidea-twitter-icon.png"
118
- ]
119
- images << "icon-placeholder.png" unless options[:app_icon]
120
- options[:inline].concat(images.map { |image| File.new("#{base_path}/#{image}") })
121
117
  end
122
118
 
123
119
  def self.qr_code(installation_link)
124
120
  qr_code_path = "/tmp/qr_code.png"
125
- QRGenerator.new(installation_link, false, ::ChunkyPNG::Color.rgb(103, 103, 103)).generate(qr_code_path)
121
+ QRGenerator.new(installation_link, false, ::ChunkyPNG::Color.rgb(21, 18, 126)).generate(qr_code_path)
126
122
  File.new(qr_code_path)
127
123
  end
128
124
 
@@ -150,25 +146,27 @@ module Fastlane
150
146
  app_version: options[:app_version],
151
147
  build_number: options[:build_number],
152
148
  installation_link: options[:installation_link],
153
- release_notes: (options[:release_notes] || "").split("\n"),
149
+ release_notes: options[:release_notes],
154
150
  platform: options[:platform],
155
151
  release_date: DateTime.now.strftime('%b %d, %Y'),
156
- binary_size: (options[:binary_size] / 1024.0 / 1024.0).round(2).to_s
152
+ binary_size: (options[:binary_size] / 1024.0 / 1024.0).round(2).to_s,
153
+ qr_code: "qr_code.png"
157
154
  }
158
155
  hash[:success] = options[:success]
159
156
  hash[:ci_build_link] = options[:ci_build_link]
160
157
 
161
- # grabs module
162
- eth = Fastlane::ErbTemplateHelper
163
158
  # create html from template
164
159
  html_template_path = options[:template_path]
165
160
  if html_template_path && File.exist?(html_template_path)
161
+ eth = Fastlane::ErbTemplateHelper
166
162
  html_template = eth.load_from_path(html_template_path)
163
+ mail_html = eth.render(html_template, hash)
167
164
  else
168
- html_template = eth.load_from_path("#{__dir__}/../templates/mailgun_template.erb")
165
+ mail_html = PageGenerator.mail(hash)
169
166
  end
167
+
170
168
  premailer = Premailer.new(
171
- eth.render(html_template, hash),
169
+ mail_html,
172
170
  { warn_level: Premailer::Warnings::SAFE, with_html_string: true }
173
171
  )
174
172
  premailer.to_inline_css
@@ -30,6 +30,8 @@ module Fastlane
30
30
 
31
31
  class FotaS3Action < Action
32
32
  def self.run(config)
33
+ Fastlane::Polidea.session.action_launched("fota_s3", config)
34
+
33
35
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym
34
36
 
35
37
  # Calling fetch on config so that default values will be used
@@ -61,6 +63,7 @@ module Fastlane
61
63
  upload_android(params)
62
64
  end
63
65
 
66
+ Fastlane::Polidea.session.action_completed("fota_s3")
64
67
  return true
65
68
  end
66
69
 
@@ -164,7 +167,7 @@ module Fastlane
164
167
  icon_url = self.upload_icon(icon_file, url_part, bucket, acl, treat_bucket_as_domain_name)
165
168
 
166
169
  # Creates html from template
167
- html_render = PageGenerator.generate({
170
+ html_render = PageGenerator.installation_page({
168
171
  url: "itms-services://?action=download-manifest&url=#{URI.encode_www_form_component(plist_url)}",
169
172
  installation_password: installation_password,
170
173
  app_version: bundle_version,
@@ -278,7 +281,7 @@ module Fastlane
278
281
  icon_url = self.upload_icon(icon_file, url_part, bucket, acl, treat_bucket_as_domain_name)
279
282
 
280
283
  # Creates html from template
281
- html_render = PageGenerator.generate({
284
+ html_render = PageGenerator.installation_page({
282
285
  url: apk_url,
283
286
  installation_password: installation_password,
284
287
  app_version: app_version,
@@ -321,20 +324,21 @@ module Fastlane
321
324
  end
322
325
 
323
326
  def self.get_bucket(s3_access_key, s3_secret_access_key, s3_region, s3_bucket)
324
- self.s3_client(s3_access_key, s3_secret_access_key, s3_region).buckets[s3_bucket]
327
+ self.s3_client(s3_access_key, s3_secret_access_key, s3_region).bucket(s3_bucket)
325
328
  end
326
329
 
327
330
  def self.s3_client(s3_access_key, s3_secret_access_key, s3_region)
328
- Actions.verify_gem!('aws-sdk')
329
- require 'aws-sdk'
331
+ Actions.verify_gem!('aws-sdk-s3')
332
+ require 'aws-sdk-s3'
333
+
330
334
  if s3_region
331
- s3_client = AWS::S3.new(
335
+ s3_client = Aws::S3::Resource.new(
332
336
  access_key_id: s3_access_key,
333
337
  secret_access_key: s3_secret_access_key,
334
338
  region: s3_region
335
339
  )
336
340
  else
337
- s3_client = AWS::S3.new(
341
+ s3_client = Aws::S3::Resource.new(
338
342
  access_key_id: s3_access_key,
339
343
  secret_access_key: s3_secret_access_key
340
344
  )
@@ -343,13 +347,18 @@ module Fastlane
343
347
  end
344
348
 
345
349
  def self.upload_file(bucket, file_name, file_data, acl, treat_bucket_as_domain_name)
346
- obj = bucket.objects.create(file_name, file_data, acl: acl, content_type: content_type_for_file(file_name))
350
+ obj = bucket.put_object({
351
+ key: file_name,
352
+ body: file_data,
353
+ acl: acl,
354
+ content_type: Mime.content_type_for_file(file_name)
355
+ })
347
356
 
348
357
  # When you enable versioning on a S3 bucket,
349
358
  # writing to an object will create an object version
350
359
  # instead of replacing the existing object.
351
360
  # http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/ObjectVersion.html
352
- if obj.kind_of? AWS::S3::ObjectVersion
361
+ if obj.kind_of? Aws::S3::ObjectVersion
353
362
  obj = obj.object
354
363
  end
355
364
 
@@ -367,8 +376,13 @@ module Fastlane
367
376
  files.each do |file|
368
377
  local_path = directory_path + file
369
378
  s3_path = directory_name + file
370
- obj = bucket.objects[s3_path]
371
- obj.write(file: local_path, content_type: content_type_for_file(local_path), acl: "public_read")
379
+
380
+ bucket.put_object({
381
+ key: s3_path,
382
+ body: File.open(local_path),
383
+ acl: acl,
384
+ content_type: Mime.content_type_for_file(local_path)
385
+ })
372
386
  end
373
387
  end
374
388
 
@@ -388,25 +402,6 @@ module Fastlane
388
402
  return files
389
403
  end
390
404
 
391
- def self.content_type_for_file(file)
392
- file_extension = File.extname(file)
393
- extensions_to_type = {
394
- ".html" => "text/html",
395
- ".png" => "image/png",
396
- ".jpg" => "text/jpeg",
397
- ".gif" => "image/gif",
398
- ".svg" => "image/svg+xml",
399
- ".log" => "text/plain",
400
- ".css" => "text/css",
401
- ".js" => "application/javascript"
402
- }
403
- if extensions_to_type[file_extension].nil?
404
- "application/octet-stream"
405
- else
406
- extensions_to_type[file_extension]
407
- end
408
- end
409
-
410
405
  #
411
406
  # NOT a fan of this as this was taken straight from Shenzhen
412
407
  # https://github.com/nomad/shenzhen/blob/986792db5d4d16a80c865a2748ee96ba63644821/lib/shenzhen/plugins/s3.rb#L32
@@ -519,7 +514,7 @@ module Fastlane
519
514
  env_name: "S3_ACL",
520
515
  description: "Uploaded object permissions e.g public_read (default), private, public_read_write, authenticated_read ",
521
516
  optional: true,
522
- default_value: "public_read"),
517
+ default_value: "public-read"),
523
518
  FastlaneCore::ConfigItem.new(key: :installation_password,
524
519
  env_name: "INSTALLATION_PASSWORD",
525
520
  description: "Password for installation page",
@@ -528,9 +523,9 @@ module Fastlane
528
523
  FastlaneCore::ConfigItem.new(key: :release_notes,
529
524
  env_name: "S3_RELEASE_NOTES",
530
525
  description: "Release notes",
531
- type: Array,
526
+ type: String,
532
527
  optional: true,
533
- default_value: Actions.lane_context[SharedValues::RELEASE_NOTES] ? Actions.lane_context[SharedValues::RELEASE_NOTES].split("\n") : nil),
528
+ default_value: Actions.lane_context[SharedValues::RELEASE_NOTES]),
534
529
  FastlaneCore::ConfigItem.new(key: :treat_bucket_as_domain_name,
535
530
  description: "If it's true, it transforms all urls from https://s3.amazonaws.com/BUCKET_NAME to https://BUCKET_NAME",
536
531
  is_string: false,
@@ -6,6 +6,8 @@ module Fastlane
6
6
 
7
7
  class GetBinarySizeAction < Action
8
8
  def self.run(config)
9
+ Fastlane::Polidea.session.action_launched("get_binary_size", config)
10
+
9
11
  binary_file = config[:binary]
10
12
 
11
13
  UI.user_error!("No IPA or APK file path given, pass using `binary: 'ipa or apk path'`") unless binary_file.to_s.length > 0
@@ -18,6 +20,8 @@ module Fastlane
18
20
 
19
21
  UI.success("Size of #{binary_file} is #{binary_size_in_mb} MB (#{binary_size} bytes)")
20
22
 
23
+ Fastlane::Polidea.session.action_completed("get_binary_size")
24
+
21
25
  binary_size
22
26
  end
23
27
 
@@ -2,6 +2,8 @@ module Fastlane
2
2
  module Actions
3
3
  class ImportProvisioningAction < Action
4
4
  def self.run(config)
5
+ Fastlane::Polidea.session.action_launched("import_provisioning", config)
6
+
5
7
  path = config[:path]
6
8
  profiles = Dir.glob File.join(path, "*.mobileprovision")
7
9
 
@@ -10,6 +12,9 @@ module Fastlane
10
12
  FastlaneCore::ProvisioningProfile.install(profile)
11
13
  end
12
14
  UI.success "Successfully imported:\n#{profiles.join("\n")}"
15
+
16
+ Fastlane::Polidea.session.action_completed("import_provisioning")
17
+
13
18
  true
14
19
  end
15
20
 
@@ -6,12 +6,17 @@ module Fastlane
6
6
 
7
7
  class ReleaseNotesAction < Action
8
8
  def self.run(config)
9
+ Fastlane::Polidea.session.action_launched("release_notes", config)
10
+
9
11
  current_tag = sh "git describe --exact-match --tags HEAD"
10
12
  tag_info = sh "git cat-file -p #{current_tag}"
11
13
  release_notes = tag_info.split("\n").drop(5).join("\n")
12
14
  UI.success "Extracted release notes:\n#{release_notes}"
13
15
  Actions.lane_context[SharedValues::RELEASE_NOTES] = release_notes
14
16
  ENV[SharedValues::RELEASE_NOTES.to_s] = release_notes
17
+
18
+ Fastlane::Polidea.session.action_completed("release_notes")
19
+
15
20
  release_notes
16
21
  end
17
22