fastlane-plugin-polidea 2.1.1.pre.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -13
- data/lib/fastlane/plugin/polidea.rb +4 -0
- data/lib/fastlane/plugin/polidea/actions/fota_mail.rb +13 -3
- data/lib/fastlane/plugin/polidea/actions/fota_s3.rb +36 -29
- data/lib/fastlane/plugin/polidea/actions/release_notes.rb +1 -1
- data/lib/fastlane/plugin/polidea/actions/release_notes_from_commits.rb +54 -0
- data/lib/fastlane/plugin/polidea/helper/page_generator.rb +28 -56
- data/lib/fastlane/plugin/polidea/helper/qr_generator.rb +7 -42
- data/lib/fastlane/plugin/polidea/version.rb +1 -1
- data/templates/install.erb +238 -0
- data/{lib/fastlane/plugin/polidea/templates/download.erb → templates/mail.erb} +18 -23
- metadata +7 -107
- data/lib/fastlane/plugin/polidea/actions/extract_app_icon.rb +0 -172
- data/lib/fastlane/plugin/polidea/actions/extract_app_name.rb +0 -100
- data/lib/fastlane/plugin/polidea/actions/extract_version.rb +0 -106
- data/lib/fastlane/plugin/polidea/actions/get_binary_size.rb +0 -57
- data/lib/fastlane/plugin/polidea/templates/images/cover-shuttle.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/icon-placeholder.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/polidea-logo.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-behance.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-dribbble.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-facebook.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-github.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-instagram.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-linkedin.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/images/social-twitter.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/css/installation-page.css +0 -4895
- data/lib/fastlane/plugin/polidea/templates/installation-page/css/installation-page.css.map +0 -7
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/bg.png +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_1024.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_1280.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_1360.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_1440.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_1680.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_768.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_ipad_1024.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/jenkins_bg_ipad_768.jpg +0 -0
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/logo.svg +0 -32
- data/lib/fastlane/plugin/polidea/templates/installation-page/img/logo_square.svg +0 -12
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation.min.js +0 -10
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.abide.js +0 -294
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.accordion.js +0 -65
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.alert.js +0 -43
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.clearing.js +0 -558
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.dropdown.js +0 -313
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.equalizer.js +0 -74
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.interchange.js +0 -344
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.joyride.js +0 -915
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.js +0 -625
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.magellan.js +0 -189
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.offcanvas.js +0 -139
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.orbit.js +0 -472
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.reveal.js +0 -443
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.slider.js +0 -231
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.tab.js +0 -167
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.tooltip.js +0 -298
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/foundation/foundation.topbar.js +0 -436
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/aes.js +0 -35
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/enc-base64-min.js +0 -8
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/fastclick.js +0 -9
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/jquery.cookie.js +0 -8
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/jquery.js +0 -26
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/modernizr.js +0 -8
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/pbkdf2.js +0 -19
- data/lib/fastlane/plugin/polidea/templates/installation-page/js/vendor/placeholder.js +0 -2
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/fonts.scss +0 -64
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation.scss +0 -45
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/_functions.scss +0 -101
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/_settings.scss +0 -1441
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_accordion.scss +0 -156
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_alert-boxes.scss +0 -126
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_block-grid.scss +0 -132
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_breadcrumbs.scss +0 -132
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_button-groups.scss +0 -200
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_buttons.scss +0 -252
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_clearing.scss +0 -247
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_dropdown-buttons.scss +0 -129
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_dropdown.scss +0 -248
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_flex-video.scss +0 -51
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_forms.scss +0 -570
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_global.scss +0 -447
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_grid.scss +0 -275
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_icon-bar.scss +0 -293
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_inline-lists.scss +0 -57
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_joyride.scss +0 -222
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_keystrokes.scss +0 -61
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_labels.scss +0 -105
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_magellan.scss +0 -34
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_offcanvas.scss +0 -510
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_orbit.scss +0 -368
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_pagination.scss +0 -162
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_panels.scss +0 -93
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_pricing-tables.scss +0 -150
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_progress-bars.scss +0 -79
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_range-slider.scss +0 -168
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_reveal.scss +0 -220
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_side-nav.scss +0 -116
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_split-buttons.scss +0 -191
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_sub-nav.scss +0 -125
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_switches.scss +0 -226
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_tables.scss +0 -135
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_tabs.scss +0 -123
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_thumbs.scss +0 -66
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_toolbar.scss +0 -70
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_tooltips.scss +0 -142
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_top-bar.scss +0 -676
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_type.scss +0 -523
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/foundation/components/_visibility.scss +0 -408
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/installation-page.scss +0 -171
- data/lib/fastlane/plugin/polidea/templates/installation-page/sass/normalize.scss +0 -425
- data/lib/fastlane/plugin/polidea/templates/installation_template.erb +0 -54
- data/lib/fastlane/plugin/polidea/templates/mailgun_template.erb +0 -1257
- data/lib/fastlane/plugin/polidea/templates/secure_installation_template.erb +0 -130
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47c06814e51a640fb88049a4cfc3f5ab117b6a7e4a7998fad230acf2cb4e36c2
|
4
|
+
data.tar.gz: 295b9efce8dda96c0a86366052b96934303fe3aadebda7e7aef28aec880fd170
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12749757a7e39a57565db274c5c98145beec26cccc97d1fbde01c29bb76e2089a71392580e87d6863baf3b1e243fbd7ab092dc57813f36d0d5169d156c05bca6
|
7
|
+
data.tar.gz: 96257d4d5193d777c73622d576012e016e9d7b4192a87bcbba4f1c166feea9f4db32d8bf5817121996855fc4ba1151ff3593bf7684207f7182ef70701fde7f36
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# fastlane-plugin-polidea
|
2
2
|
|
3
|
-
[![build status](https://gitlab.polidea.com/
|
3
|
+
[![build status](https://gitlab.polidea.com/Shuttle/fastlane-plugin-polidea/badges/master/pipeline.svg)](https://gitlab.polidea.com/Shuttle/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
|
|
@@ -15,14 +15,13 @@ fastlane add_plugin polidea
|
|
15
15
|
## Available actions
|
16
16
|
|
17
17
|
Plugin contains following actions:
|
18
|
-
- `
|
19
|
-
- `
|
20
|
-
- `
|
21
|
-
- `get_binary_size`: Measures binary size in bytes
|
22
|
-
- `s3`: Custom version of s3 action with Polidea's installation page
|
18
|
+
- `extract_app_info`: Extracts application name, icon, version, binary size from .apk/.ipa
|
19
|
+
- `release_notes`: Extracts release notes from git tag message
|
20
|
+
- `fota_s3`: Custom version of s3 action with Polidea's installation page
|
23
21
|
- `fota_mail`: Custom version of mailgun action with Polidea's mail template
|
22
|
+
- `shuttle`: Upload new app to Shuttle
|
24
23
|
|
25
|
-
See more details [here](
|
24
|
+
See more details [here](./docs/Actions.md).
|
26
25
|
To list all available actions run:
|
27
26
|
```bash
|
28
27
|
fastlane actions
|
@@ -33,13 +32,10 @@ fastlane actions
|
|
33
32
|
```ruby
|
34
33
|
lane :deploy do
|
35
34
|
(some actions that produces .ipa/.apk)
|
36
|
-
|
37
|
-
|
38
|
-
extract_version
|
39
|
-
get_binary_size
|
40
|
-
s3
|
35
|
+
extract_app_info
|
36
|
+
fota_s3
|
41
37
|
fota_mail(
|
42
|
-
to: "
|
38
|
+
to: "hey@polidea.com"
|
43
39
|
)
|
44
40
|
end
|
45
41
|
```
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# rubocop:disable Metrics/MethodLength
|
2
1
|
require 'redcarpet'
|
3
2
|
require 'fastlane/erb_template_helper'
|
4
3
|
|
@@ -118,7 +117,7 @@ module Fastlane
|
|
118
117
|
|
119
118
|
def self.qr_code(installation_link)
|
120
119
|
qr_code_path = "/tmp/qr_code.png"
|
121
|
-
QRGenerator.new(installation_link,
|
120
|
+
QRGenerator.new(installation_link, ::ChunkyPNG::Color.rgb(21, 18, 126)).generate(qr_code_path)
|
122
121
|
File.new(qr_code_path)
|
123
122
|
end
|
124
123
|
|
@@ -130,7 +129,7 @@ module Fastlane
|
|
130
129
|
https://api.mailgun.net/v3/#{sandbox_domain}/messages \
|
131
130
|
-F from='#{options[:from]} <#{options[:postmaster]}>' \
|
132
131
|
-F to='#{options[:to]}' \
|
133
|
-
-F subject='#{options[:app_name]} #{options[:app_version]} (#{options[:build_number]}) for #{options[:platform]} is ready to install' \
|
132
|
+
-F subject='#{options[:app_name]} #{options[:app_version]} (#{options[:build_number]}) for #{human_platform(options[:platform])} is ready to install' \
|
134
133
|
--form-string html=#{Shellwords.escape(body)} \ """ + options[:inline].map { |file| "-F inline=@#{file.path}" }.join(" "), print_command: false, print_command_output: false
|
135
134
|
|
136
135
|
return body
|
@@ -171,6 +170,17 @@ module Fastlane
|
|
171
170
|
)
|
172
171
|
premailer.to_inline_css
|
173
172
|
end
|
173
|
+
|
174
|
+
def self.human_platform(platform)
|
175
|
+
case platform
|
176
|
+
when :ios
|
177
|
+
"iOS"
|
178
|
+
when :android
|
179
|
+
"Android"
|
180
|
+
else
|
181
|
+
platform.to_s
|
182
|
+
end
|
183
|
+
end
|
174
184
|
end
|
175
185
|
end
|
176
186
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# rubocop:disable Metrics/AbcSize
|
2
|
-
# rubocop:disable Metrics/MethodLength
|
3
2
|
# rubocop:disable Metrics/ClassLength
|
4
3
|
require 'fastlane/erb_template_helper'
|
5
4
|
require 'ostruct'
|
@@ -12,22 +11,12 @@ module Fastlane
|
|
12
11
|
S3_DSYM_OUTPUT_PATH = :S3_DSYM_OUTPUT_PATH
|
13
12
|
S3_PLIST_OUTPUT_PATH = :S3_PLIST_OUTPUT_PATH
|
14
13
|
S3_APK_OUTPUT_PATH = :S3_APK_OUTPUT_PATH
|
14
|
+
S3_MAPPING_OUTPUT_PATH = :S3_MAPPING_OUTPUT_PATH
|
15
15
|
S3_HTML_OUTPUT_PATH = :S3_HTML_OUTPUT_PATH
|
16
16
|
S3_VERSION_OUTPUT_PATH = :S3_VERSION_OUTPUT_PATH
|
17
17
|
S3_ICON_OUTPUT_PATH = :S3_ICON_OUTPUT_PATH
|
18
18
|
end
|
19
19
|
|
20
|
-
S3_ARGS_MAP = {
|
21
|
-
ipa: '-f',
|
22
|
-
dsym: '-d',
|
23
|
-
access_key: '-a',
|
24
|
-
secret_access_key: '-s',
|
25
|
-
bucket: '-b',
|
26
|
-
region: '-r',
|
27
|
-
acl: '--acl',
|
28
|
-
path: '-P'
|
29
|
-
}
|
30
|
-
|
31
20
|
class FotaS3Action < Action
|
32
21
|
def self.run(config)
|
33
22
|
Fastlane::Polidea.session.action_launched("fota_s3", config)
|
@@ -40,6 +29,7 @@ module Fastlane
|
|
40
29
|
params[:apk] = config[:apk]
|
41
30
|
params[:icon] = config[:icon]
|
42
31
|
params[:dsym] = config[:dsym]
|
32
|
+
params[:mapping] = config[:mapping]
|
43
33
|
params[:access_key] = config[:access_key]
|
44
34
|
params[:secret_access_key] = config[:secret_access_key]
|
45
35
|
params[:bucket] = config[:bucket]
|
@@ -52,7 +42,6 @@ module Fastlane
|
|
52
42
|
params[:version_template_path] = config[:version_template_path]
|
53
43
|
params[:version_file_name] = config[:version_file_name]
|
54
44
|
params[:acl] = config[:acl]
|
55
|
-
params[:installation_password] = config[:installation_password]
|
56
45
|
params[:release_notes] = config[:release_notes]
|
57
46
|
params[:treat_bucket_as_domain_name] = config[:treat_bucket_as_domain_name]
|
58
47
|
|
@@ -78,7 +67,6 @@ module Fastlane
|
|
78
67
|
icon_file = params[:icon]
|
79
68
|
dsym_file = params[:dsym]
|
80
69
|
acl = params[:acl]
|
81
|
-
installation_password = params[:installation_password]
|
82
70
|
release_notes = params[:release_notes]
|
83
71
|
treat_bucket_as_domain_name = params[:treat_bucket_as_domain_name]
|
84
72
|
|
@@ -121,9 +109,7 @@ module Fastlane
|
|
121
109
|
|
122
110
|
dsym_url = self.upload_file(bucket, dsym_file_name, dsym_file_data, acl, treat_bucket_as_domain_name)
|
123
111
|
|
124
|
-
|
125
|
-
Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH] = dsym_url
|
126
|
-
ENV[SharedValues::S3_DSYM_OUTPUT_PATH.to_s] = dsym_url
|
112
|
+
dsym_file_data.close
|
127
113
|
end
|
128
114
|
|
129
115
|
if params[:upload_metadata] == false
|
@@ -169,7 +155,6 @@ module Fastlane
|
|
169
155
|
# Creates html from template
|
170
156
|
html_render = PageGenerator.installation_page({
|
171
157
|
url: "itms-services://?action=download-manifest&url=#{URI.encode_www_form_component(plist_url)}",
|
172
|
-
installation_password: installation_password,
|
173
158
|
app_version: bundle_version,
|
174
159
|
build_number: build_number,
|
175
160
|
app_name: app_name,
|
@@ -224,6 +209,11 @@ module Fastlane
|
|
224
209
|
ENV[SharedValues::S3_ICON_OUTPUT_PATH.to_s] = icon_url
|
225
210
|
UI.success("Successfully uploaded icon file to '#{Actions.lane_context[SharedValues::S3_ICON_OUTPUT_PATH]}'")
|
226
211
|
end
|
212
|
+
if dsym_url
|
213
|
+
Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH] = dsym_url
|
214
|
+
ENV[SharedValues::S3_DSYM_OUTPUT_PATH.to_s] = dsym_url
|
215
|
+
UI.success("Successfully uploaded dsym file to '#{Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH]}'")
|
216
|
+
end
|
227
217
|
end
|
228
218
|
|
229
219
|
def self.upload_android(params)
|
@@ -234,8 +224,8 @@ module Fastlane
|
|
234
224
|
s3_bucket = params[:bucket]
|
235
225
|
apk_file = params[:apk]
|
236
226
|
icon_file = params[:icon]
|
227
|
+
mapping_file = params[:mapping]
|
237
228
|
acl = params[:acl]
|
238
|
-
installation_password = params[:installation_password]
|
239
229
|
release_notes = params[:release_notes]
|
240
230
|
treat_bucket_as_domain_name = params[:treat_bucket_as_domain_name]
|
241
231
|
|
@@ -266,9 +256,23 @@ module Fastlane
|
|
266
256
|
Actions.lane_context[SharedValues::S3_APK_OUTPUT_PATH] = apk_url
|
267
257
|
ENV[SharedValues::S3_APK_OUTPUT_PATH.to_s] = apk_url
|
268
258
|
|
259
|
+
if mapping_file
|
260
|
+
mapping_file_basename = File.basename(mapping_file)
|
261
|
+
mapping_file_name = "#{url_part}#{mapping_file_basename}"
|
262
|
+
mapping_file_data = File.open(mapping_file, 'rb')
|
263
|
+
|
264
|
+
mapping_url = self.upload_file(bucket, mapping_file_name, mapping_file_data, acl, treat_bucket_as_domain_name)
|
265
|
+
|
266
|
+
# Setting action and environment variables
|
267
|
+
Actions.lane_context[SharedValues::S3_MAPPING_OUTPUT_PATH] = mapping_url
|
268
|
+
ENV[SharedValues::S3_MAPPING_OUTPUT_PATH.to_s] = mapping_url
|
269
|
+
|
270
|
+
mapping_file_data.close
|
271
|
+
end
|
272
|
+
|
269
273
|
#####################################
|
270
274
|
#
|
271
|
-
# html
|
275
|
+
# html building
|
272
276
|
#
|
273
277
|
#####################################
|
274
278
|
|
@@ -283,7 +287,6 @@ module Fastlane
|
|
283
287
|
# Creates html from template
|
284
288
|
html_render = PageGenerator.installation_page({
|
285
289
|
url: apk_url,
|
286
|
-
installation_password: installation_password,
|
287
290
|
app_version: app_version,
|
288
291
|
build_number: build_number,
|
289
292
|
app_name: app_name,
|
@@ -306,6 +309,9 @@ module Fastlane
|
|
306
309
|
ENV[SharedValues::S3_ICON_OUTPUT_PATH.to_s] = icon_url
|
307
310
|
UI.success("Successfully uploaded icon file to '#{Actions.lane_context[SharedValues::S3_ICON_OUTPUT_PATH]}'")
|
308
311
|
end
|
312
|
+
if mapping_url
|
313
|
+
UI.success("Successfully uploaded mapping file to '#{Actions.lane_context[SharedValues::S3_MAPPING_OUTPUT_PATH]}'")
|
314
|
+
end
|
309
315
|
end
|
310
316
|
|
311
317
|
def self.validate(params)
|
@@ -446,19 +452,24 @@ module Fastlane
|
|
446
452
|
[
|
447
453
|
FastlaneCore::ConfigItem.new(key: :ipa,
|
448
454
|
env_name: "",
|
449
|
-
description: ".ipa file for the build
|
455
|
+
description: ".ipa file for the build",
|
450
456
|
optional: true,
|
451
457
|
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]),
|
452
458
|
FastlaneCore::ConfigItem.new(key: :dsym,
|
453
459
|
env_name: "",
|
454
|
-
description: "zipped .dsym package for the build
|
460
|
+
description: "zipped .dsym package for the build",
|
455
461
|
optional: true,
|
456
462
|
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]),
|
457
463
|
FastlaneCore::ConfigItem.new(key: :apk,
|
458
464
|
env_name: "",
|
459
|
-
description: ".apk file for the build
|
465
|
+
description: ".apk file for the build",
|
460
466
|
optional: true,
|
461
467
|
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]),
|
468
|
+
FastlaneCore::ConfigItem.new(key: :mapping,
|
469
|
+
env_name: "",
|
470
|
+
description: "The path to the mapping.txt file",
|
471
|
+
optional: true,
|
472
|
+
default_value: Actions.lane_context[SharedValues::GRADLE_MAPPING_TXT_OUTPUT_PATH]),
|
462
473
|
FastlaneCore::ConfigItem.new(key: :icon,
|
463
474
|
env_name: "",
|
464
475
|
description: "app icon file to upload",
|
@@ -515,11 +526,6 @@ module Fastlane
|
|
515
526
|
description: "Uploaded object permissions e.g public_read (default), private, public_read_write, authenticated_read ",
|
516
527
|
optional: true,
|
517
528
|
default_value: "public-read"),
|
518
|
-
FastlaneCore::ConfigItem.new(key: :installation_password,
|
519
|
-
env_name: "INSTALLATION_PASSWORD",
|
520
|
-
description: "Password for installation page",
|
521
|
-
optional: true,
|
522
|
-
default_value: nil),
|
523
529
|
FastlaneCore::ConfigItem.new(key: :release_notes,
|
524
530
|
env_name: "S3_RELEASE_NOTES",
|
525
531
|
description: "Release notes",
|
@@ -540,6 +546,7 @@ module Fastlane
|
|
540
546
|
['S3_DSYM_OUTPUT_PATH', 'Direct HTTP link to the uploaded dsym file'],
|
541
547
|
['S3_PLIST_OUTPUT_PATH', 'Direct HTTP link to the uploaded plist file'],
|
542
548
|
['S3_APK_OUTPUT_PATH', 'Direct HTTP link to the uploaded apk file'],
|
549
|
+
['S3_MAPPING_OUTPUT_PATH', 'Direct HTTP link to the uploaded mapping.txt file'],
|
543
550
|
['S3_HTML_OUTPUT_PATH', 'Direct HTTP link to the uploaded HTML file'],
|
544
551
|
['S3_VERSION_OUTPUT_PATH', 'Direct HTTP link to the uploaded Version file'],
|
545
552
|
['S3_ICON_OUTPUT_PATH', 'Direct HTTP link to the uploaded icon file']
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
RELEASE_NOTES = :RELEASE_NOTES
|
5
|
+
end
|
6
|
+
|
7
|
+
class ReleaseNotesFromCommitsAction < Action
|
8
|
+
def self.run(config)
|
9
|
+
Fastlane::Polidea.session.action_launched("release_notes_from_commits", config)
|
10
|
+
|
11
|
+
current_version = config[:current_version]
|
12
|
+
previous_version = sh("git describe --abbrev=0 --tags #{current_version}^").strip
|
13
|
+
messages = sh("git log --oneline --pretty=format:'%s' #{previous_version}..#{current_version} | grep -Ev '^Merge'").strip
|
14
|
+
release_notes = messages.split("\n").map { |note| "- #{note}" }.join("\n")
|
15
|
+
|
16
|
+
UI.success "Extracted release notes:\n#{release_notes}"
|
17
|
+
Actions.lane_context[SharedValues::RELEASE_NOTES] = release_notes
|
18
|
+
ENV[SharedValues::RELEASE_NOTES.to_s] = release_notes
|
19
|
+
|
20
|
+
Fastlane::Polidea.session.action_completed("release_notes_from_commits")
|
21
|
+
|
22
|
+
release_notes
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.description
|
26
|
+
"Extracts release notes from git commit messages since last tag"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.available_options
|
30
|
+
[
|
31
|
+
FastlaneCore::ConfigItem.new(key: :current_version,
|
32
|
+
env_name: "",
|
33
|
+
description: "Git ref of current version",
|
34
|
+
optional: true,
|
35
|
+
default_value: 'HEAD')
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.output
|
40
|
+
[
|
41
|
+
['RELEASE_NOTES', 'Release notes extracted from git commits']
|
42
|
+
]
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.author
|
46
|
+
"Piotrek Dubiel"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.is_supported?(platform)
|
50
|
+
true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,18 +1,20 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'base64'
|
3
1
|
require 'json'
|
4
2
|
|
5
3
|
module Fastlane
|
6
4
|
module PageGenerator
|
5
|
+
PLACEHOLDER_URL = "https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/icon-placeholder.jpg"
|
6
|
+
|
7
7
|
def self.mail(config)
|
8
8
|
UI.message("Generating e-mail...")
|
9
9
|
eth = Fastlane::ErbTemplateHelper
|
10
|
-
html_template = eth.load_from_path(
|
10
|
+
html_template = eth.load_from_path(
|
11
|
+
File.expand_path("templates/mail.erb", Polidea.root)
|
12
|
+
)
|
11
13
|
eth.render(html_template, {
|
12
14
|
author: config[:author],
|
13
15
|
last_commit: config[:last_commit],
|
14
16
|
is_android: config[:is_android],
|
15
|
-
app_icon: config[:app_icon]
|
17
|
+
app_icon: mail_app_icon_or_placholder(config[:app_icon]),
|
16
18
|
app_name: config[:app_name],
|
17
19
|
app_version: config[:app_version],
|
18
20
|
build_number: config[:build_number],
|
@@ -26,68 +28,20 @@ module Fastlane
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def self.installation_page(config)
|
29
|
-
if config[:installation_password]
|
30
|
-
generate_private(config)
|
31
|
-
else
|
32
|
-
generate_public(config)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.generate_private(config)
|
37
|
-
UI.message("Generating private installation page with password `#{config[:installation_password]}`...")
|
38
|
-
eth = Fastlane::ErbTemplateHelper
|
39
|
-
html_template = eth.load_from_path("#{__dir__}/../templates/secure_installation_template.erb")
|
40
|
-
installation_link, salt, iv = encrypt(config[:url], config[:installation_password])
|
41
|
-
eth.render(html_template, {
|
42
|
-
url: installation_link,
|
43
|
-
salt: salt,
|
44
|
-
iv: iv,
|
45
|
-
app_version: config[:app_version],
|
46
|
-
build_number: config[:build_number],
|
47
|
-
app_name: config[:app_name],
|
48
|
-
app_icon: config[:app_icon],
|
49
|
-
platform: config[:platform],
|
50
|
-
release_notes: parse_release_notes(config[:release_notes])
|
51
|
-
})
|
52
|
-
end
|
53
|
-
private_class_method :generate_private
|
54
|
-
|
55
|
-
def self.generate_public(config)
|
56
31
|
UI.message("Generating public installation page...")
|
57
32
|
eth = Fastlane::ErbTemplateHelper
|
58
|
-
html_template = eth.load_from_path(
|
33
|
+
html_template = eth.load_from_path(
|
34
|
+
File.expand_path("templates/install.erb", Polidea.root)
|
35
|
+
)
|
59
36
|
eth.render(html_template, {
|
60
37
|
url: config[:url],
|
61
38
|
app_version: config[:app_version],
|
62
39
|
build_number: config[:build_number],
|
63
40
|
app_name: config[:app_name],
|
64
|
-
app_icon: config[:app_icon],
|
65
|
-
platform: config[:platform],
|
41
|
+
app_icon: app_icon_or_placholder(config[:app_icon]),
|
66
42
|
release_notes: parse_release_notes(config[:release_notes])
|
67
43
|
})
|
68
44
|
end
|
69
|
-
private_class_method :generate_public
|
70
|
-
|
71
|
-
def self.encrypt(url, password)
|
72
|
-
salt = OpenSSL::Random.random_bytes(32)
|
73
|
-
iter = 128
|
74
|
-
key_len = 32
|
75
|
-
key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(password, salt, iter, key_len)
|
76
|
-
|
77
|
-
cipher = OpenSSL::Cipher::AES256.new(:CBC)
|
78
|
-
cipher.encrypt
|
79
|
-
cipher.key = key
|
80
|
-
|
81
|
-
random_iv = cipher.random_iv
|
82
|
-
iv = Base64.encode64(random_iv).delete "\n"
|
83
|
-
to_json = { url: url.to_s }.to_json
|
84
|
-
var = cipher.update(to_json.to_s) + cipher.final
|
85
|
-
|
86
|
-
installation_link = Base64.encode64(var).delete "\n"
|
87
|
-
salt = Base64.encode64(salt).delete "\n"
|
88
|
-
return installation_link, salt, iv
|
89
|
-
end
|
90
|
-
private_class_method :encrypt
|
91
45
|
|
92
46
|
def self.parse_release_notes(release_notes)
|
93
47
|
renderer = Redcarpet::Render::HTML.new({
|
@@ -103,5 +57,23 @@ module Fastlane
|
|
103
57
|
markdown.render(release_notes || "No release notes.")
|
104
58
|
end
|
105
59
|
private_class_method :parse_release_notes
|
60
|
+
|
61
|
+
def self.mail_app_icon_or_placholder(app_icon)
|
62
|
+
if app_icon.nil?
|
63
|
+
PLACEHOLDER_URL
|
64
|
+
else
|
65
|
+
"cid:#{app_icon}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
private_class_method :mail_app_icon_or_placholder
|
69
|
+
|
70
|
+
def self.app_icon_or_placholder(app_icon)
|
71
|
+
if app_icon.nil?
|
72
|
+
PLACEHOLDER_URL
|
73
|
+
else
|
74
|
+
app_icon
|
75
|
+
end
|
76
|
+
end
|
77
|
+
private_class_method :app_icon_or_placholder
|
106
78
|
end
|
107
79
|
end
|