fastlane-plugin-polidea 2.2.0.pre.1 → 3.0.0.pre.1
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_s3.rb +36 -28
- data/lib/fastlane/plugin/polidea/actions/release_notes.rb +1 -1
- data/lib/fastlane/plugin/polidea/helper/page_generator.rb +17 -56
- data/lib/fastlane/plugin/polidea/helper/qr_generator.rb +1 -1
- 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} +20 -25
- metadata +4 -105
- 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: 0e49b978d0f9ccc23f99bed241bf7c23c4a02a5742b8ef3497388268c267e245
|
4
|
+
data.tar.gz: 0b2a0731c0a81b86e32a37b46444f9d79f55758e86bb3b00e4c68f453dc2e83a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8efd5143e60704460f492e8c55fea1130005d20f4f57a1c1019155eed99d43f9d5e33096e59234bca9d3226106f801cc488aa45ed0b122e9f108b95d70baeaad
|
7
|
+
data.tar.gz: 47028dd656853ddebf7dc589a8bcfbd69f7f49603a1f65a8eeef6bf697aae41388178709a801750d8920820392b2ee8697ef077c982cfb32a3149db84c3616ee
|
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
|
```
|
@@ -12,22 +12,12 @@ module Fastlane
|
|
12
12
|
S3_DSYM_OUTPUT_PATH = :S3_DSYM_OUTPUT_PATH
|
13
13
|
S3_PLIST_OUTPUT_PATH = :S3_PLIST_OUTPUT_PATH
|
14
14
|
S3_APK_OUTPUT_PATH = :S3_APK_OUTPUT_PATH
|
15
|
+
S3_MAPPING_OUTPUT_PATH = :S3_MAPPING_OUTPUT_PATH
|
15
16
|
S3_HTML_OUTPUT_PATH = :S3_HTML_OUTPUT_PATH
|
16
17
|
S3_VERSION_OUTPUT_PATH = :S3_VERSION_OUTPUT_PATH
|
17
18
|
S3_ICON_OUTPUT_PATH = :S3_ICON_OUTPUT_PATH
|
18
19
|
end
|
19
20
|
|
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
21
|
class FotaS3Action < Action
|
32
22
|
def self.run(config)
|
33
23
|
Fastlane::Polidea.session.action_launched("fota_s3", config)
|
@@ -40,6 +30,7 @@ module Fastlane
|
|
40
30
|
params[:apk] = config[:apk]
|
41
31
|
params[:icon] = config[:icon]
|
42
32
|
params[:dsym] = config[:dsym]
|
33
|
+
params[:mapping] = config[:mapping]
|
43
34
|
params[:access_key] = config[:access_key]
|
44
35
|
params[:secret_access_key] = config[:secret_access_key]
|
45
36
|
params[:bucket] = config[:bucket]
|
@@ -52,7 +43,6 @@ module Fastlane
|
|
52
43
|
params[:version_template_path] = config[:version_template_path]
|
53
44
|
params[:version_file_name] = config[:version_file_name]
|
54
45
|
params[:acl] = config[:acl]
|
55
|
-
params[:installation_password] = config[:installation_password]
|
56
46
|
params[:release_notes] = config[:release_notes]
|
57
47
|
params[:treat_bucket_as_domain_name] = config[:treat_bucket_as_domain_name]
|
58
48
|
|
@@ -78,7 +68,6 @@ module Fastlane
|
|
78
68
|
icon_file = params[:icon]
|
79
69
|
dsym_file = params[:dsym]
|
80
70
|
acl = params[:acl]
|
81
|
-
installation_password = params[:installation_password]
|
82
71
|
release_notes = params[:release_notes]
|
83
72
|
treat_bucket_as_domain_name = params[:treat_bucket_as_domain_name]
|
84
73
|
|
@@ -121,9 +110,7 @@ module Fastlane
|
|
121
110
|
|
122
111
|
dsym_url = self.upload_file(bucket, dsym_file_name, dsym_file_data, acl, treat_bucket_as_domain_name)
|
123
112
|
|
124
|
-
|
125
|
-
Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH] = dsym_url
|
126
|
-
ENV[SharedValues::S3_DSYM_OUTPUT_PATH.to_s] = dsym_url
|
113
|
+
dsym_file_data.close
|
127
114
|
end
|
128
115
|
|
129
116
|
if params[:upload_metadata] == false
|
@@ -169,7 +156,6 @@ module Fastlane
|
|
169
156
|
# Creates html from template
|
170
157
|
html_render = PageGenerator.installation_page({
|
171
158
|
url: "itms-services://?action=download-manifest&url=#{URI.encode_www_form_component(plist_url)}",
|
172
|
-
installation_password: installation_password,
|
173
159
|
app_version: bundle_version,
|
174
160
|
build_number: build_number,
|
175
161
|
app_name: app_name,
|
@@ -224,6 +210,11 @@ module Fastlane
|
|
224
210
|
ENV[SharedValues::S3_ICON_OUTPUT_PATH.to_s] = icon_url
|
225
211
|
UI.success("Successfully uploaded icon file to '#{Actions.lane_context[SharedValues::S3_ICON_OUTPUT_PATH]}'")
|
226
212
|
end
|
213
|
+
if dsym_url
|
214
|
+
Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH] = dsym_url
|
215
|
+
ENV[SharedValues::S3_DSYM_OUTPUT_PATH.to_s] = dsym_url
|
216
|
+
UI.success("Successfully uploaded dsym file to '#{Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH]}'")
|
217
|
+
end
|
227
218
|
end
|
228
219
|
|
229
220
|
def self.upload_android(params)
|
@@ -234,8 +225,8 @@ module Fastlane
|
|
234
225
|
s3_bucket = params[:bucket]
|
235
226
|
apk_file = params[:apk]
|
236
227
|
icon_file = params[:icon]
|
228
|
+
mapping_file = params[:mapping]
|
237
229
|
acl = params[:acl]
|
238
|
-
installation_password = params[:installation_password]
|
239
230
|
release_notes = params[:release_notes]
|
240
231
|
treat_bucket_as_domain_name = params[:treat_bucket_as_domain_name]
|
241
232
|
|
@@ -266,9 +257,23 @@ module Fastlane
|
|
266
257
|
Actions.lane_context[SharedValues::S3_APK_OUTPUT_PATH] = apk_url
|
267
258
|
ENV[SharedValues::S3_APK_OUTPUT_PATH.to_s] = apk_url
|
268
259
|
|
260
|
+
if mapping_file
|
261
|
+
mapping_file_basename = File.basename(mapping_file)
|
262
|
+
mapping_file_name = "#{url_part}#{mapping_file_basename}"
|
263
|
+
mapping_file_data = File.open(mapping_file, 'rb')
|
264
|
+
|
265
|
+
mapping_url = self.upload_file(bucket, mapping_file_name, mapping_file_data, acl, treat_bucket_as_domain_name)
|
266
|
+
|
267
|
+
# Setting action and environment variables
|
268
|
+
Actions.lane_context[SharedValues::S3_MAPPING_OUTPUT_PATH] = mapping_url
|
269
|
+
ENV[SharedValues::S3_MAPPING_OUTPUT_PATH.to_s] = mapping_url
|
270
|
+
|
271
|
+
mapping_file_data.close
|
272
|
+
end
|
273
|
+
|
269
274
|
#####################################
|
270
275
|
#
|
271
|
-
# html
|
276
|
+
# html building
|
272
277
|
#
|
273
278
|
#####################################
|
274
279
|
|
@@ -283,7 +288,6 @@ module Fastlane
|
|
283
288
|
# Creates html from template
|
284
289
|
html_render = PageGenerator.installation_page({
|
285
290
|
url: apk_url,
|
286
|
-
installation_password: installation_password,
|
287
291
|
app_version: app_version,
|
288
292
|
build_number: build_number,
|
289
293
|
app_name: app_name,
|
@@ -306,6 +310,9 @@ module Fastlane
|
|
306
310
|
ENV[SharedValues::S3_ICON_OUTPUT_PATH.to_s] = icon_url
|
307
311
|
UI.success("Successfully uploaded icon file to '#{Actions.lane_context[SharedValues::S3_ICON_OUTPUT_PATH]}'")
|
308
312
|
end
|
313
|
+
if mapping_url
|
314
|
+
UI.success("Successfully uploaded mapping file to '#{Actions.lane_context[SharedValues::S3_MAPPING_OUTPUT_PATH]}'")
|
315
|
+
end
|
309
316
|
end
|
310
317
|
|
311
318
|
def self.validate(params)
|
@@ -446,19 +453,24 @@ module Fastlane
|
|
446
453
|
[
|
447
454
|
FastlaneCore::ConfigItem.new(key: :ipa,
|
448
455
|
env_name: "",
|
449
|
-
description: ".ipa file for the build
|
456
|
+
description: ".ipa file for the build",
|
450
457
|
optional: true,
|
451
458
|
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]),
|
452
459
|
FastlaneCore::ConfigItem.new(key: :dsym,
|
453
460
|
env_name: "",
|
454
|
-
description: "zipped .dsym package for the build
|
461
|
+
description: "zipped .dsym package for the build",
|
455
462
|
optional: true,
|
456
463
|
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]),
|
457
464
|
FastlaneCore::ConfigItem.new(key: :apk,
|
458
465
|
env_name: "",
|
459
|
-
description: ".apk file for the build
|
466
|
+
description: ".apk file for the build",
|
460
467
|
optional: true,
|
461
468
|
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]),
|
469
|
+
FastlaneCore::ConfigItem.new(key: :mapping,
|
470
|
+
env_name: "",
|
471
|
+
description: "The path to the mapping.txt file",
|
472
|
+
optional: true,
|
473
|
+
default_value: Actions.lane_context[SharedValues::GRADLE_MAPPING_TXT_OUTPUT_PATH]),
|
462
474
|
FastlaneCore::ConfigItem.new(key: :icon,
|
463
475
|
env_name: "",
|
464
476
|
description: "app icon file to upload",
|
@@ -515,11 +527,6 @@ module Fastlane
|
|
515
527
|
description: "Uploaded object permissions e.g public_read (default), private, public_read_write, authenticated_read ",
|
516
528
|
optional: true,
|
517
529
|
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
530
|
FastlaneCore::ConfigItem.new(key: :release_notes,
|
524
531
|
env_name: "S3_RELEASE_NOTES",
|
525
532
|
description: "Release notes",
|
@@ -540,6 +547,7 @@ module Fastlane
|
|
540
547
|
['S3_DSYM_OUTPUT_PATH', 'Direct HTTP link to the uploaded dsym file'],
|
541
548
|
['S3_PLIST_OUTPUT_PATH', 'Direct HTTP link to the uploaded plist file'],
|
542
549
|
['S3_APK_OUTPUT_PATH', 'Direct HTTP link to the uploaded apk file'],
|
550
|
+
['S3_MAPPING_OUTPUT_PATH', 'Direct HTTP link to the uploaded mapping.txt file'],
|
543
551
|
['S3_HTML_OUTPUT_PATH', 'Direct HTTP link to the uploaded HTML file'],
|
544
552
|
['S3_VERSION_OUTPUT_PATH', 'Direct HTTP link to the uploaded Version file'],
|
545
553
|
['S3_ICON_OUTPUT_PATH', 'Direct HTTP link to the uploaded icon file']
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'base64'
|
3
1
|
require 'json'
|
4
2
|
|
5
3
|
module Fastlane
|
@@ -7,12 +5,14 @@ module Fastlane
|
|
7
5
|
def self.mail(config)
|
8
6
|
UI.message("Generating e-mail...")
|
9
7
|
eth = Fastlane::ErbTemplateHelper
|
10
|
-
html_template = eth.load_from_path(
|
8
|
+
html_template = eth.load_from_path(
|
9
|
+
File.expand_path("templates/mail.erb", Polidea.root)
|
10
|
+
)
|
11
11
|
eth.render(html_template, {
|
12
12
|
author: config[:author],
|
13
13
|
last_commit: config[:last_commit],
|
14
14
|
is_android: config[:is_android],
|
15
|
-
app_icon: config[:app_icon]
|
15
|
+
app_icon: app_icon_or_placholder(config[:app_icon]),
|
16
16
|
app_name: config[:app_name],
|
17
17
|
app_version: config[:app_version],
|
18
18
|
build_number: config[:build_number],
|
@@ -26,68 +26,20 @@ module Fastlane
|
|
26
26
|
end
|
27
27
|
|
28
28
|
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
29
|
UI.message("Generating public installation page...")
|
57
30
|
eth = Fastlane::ErbTemplateHelper
|
58
|
-
html_template = eth.load_from_path(
|
31
|
+
html_template = eth.load_from_path(
|
32
|
+
File.expand_path("templates/install.erb", Polidea.root)
|
33
|
+
)
|
59
34
|
eth.render(html_template, {
|
60
35
|
url: config[:url],
|
61
36
|
app_version: config[:app_version],
|
62
37
|
build_number: config[:build_number],
|
63
38
|
app_name: config[:app_name],
|
64
|
-
app_icon: config[:app_icon],
|
65
|
-
platform: config[:platform],
|
39
|
+
app_icon: app_icon_or_placholder(config[:app_icon]),
|
66
40
|
release_notes: parse_release_notes(config[:release_notes])
|
67
41
|
})
|
68
42
|
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
43
|
|
92
44
|
def self.parse_release_notes(release_notes)
|
93
45
|
renderer = Redcarpet::Render::HTML.new({
|
@@ -103,5 +55,14 @@ module Fastlane
|
|
103
55
|
markdown.render(release_notes || "No release notes.")
|
104
56
|
end
|
105
57
|
private_class_method :parse_release_notes
|
58
|
+
|
59
|
+
def self.app_icon_or_placholder(app_icon)
|
60
|
+
if app_icon.nil?
|
61
|
+
"https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/icon-placeholder.jpg"
|
62
|
+
else
|
63
|
+
"cid:#{app_icon}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
private_class_method :app_icon_or_placholder
|
106
67
|
end
|
107
68
|
end
|
@@ -0,0 +1,238 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<title>Install <%= app_name %></title>
|
7
|
+
<link rel="icon"
|
8
|
+
type="image/png"
|
9
|
+
href="https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/favicon.ico">
|
10
|
+
<link
|
11
|
+
href="https://fonts.googleapis.com/css2?family=Overpass+Mono&display=swap"
|
12
|
+
rel="stylesheet"
|
13
|
+
/>
|
14
|
+
<link href="https://use.typekit.net/kdr8bbb.css" rel="stylesheet" />
|
15
|
+
|
16
|
+
<style>
|
17
|
+
html {
|
18
|
+
min-height: 100%;
|
19
|
+
}
|
20
|
+
body {
|
21
|
+
margin: 0;
|
22
|
+
font-family: "acumin-pro", Helvetica, Arial, sans-serif;
|
23
|
+
}
|
24
|
+
@media screen and (min-width: 960px) {
|
25
|
+
body {
|
26
|
+
background-image: url(https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/cover-polidea.jpg);
|
27
|
+
background-repeat: no-repeat;
|
28
|
+
background-size: cover;
|
29
|
+
background-position: center;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
.content {
|
34
|
+
background-color: white;
|
35
|
+
}
|
36
|
+
@media screen and (min-width: 960px) {
|
37
|
+
.content {
|
38
|
+
width: 700px;
|
39
|
+
margin: 48px auto;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
header {
|
44
|
+
padding: 20px 32px;
|
45
|
+
}
|
46
|
+
@media screen and (max-width: 959px) {
|
47
|
+
header {
|
48
|
+
padding: 16px 24px;
|
49
|
+
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
img.app-icon {
|
54
|
+
width: 64px;
|
55
|
+
height: 64px;
|
56
|
+
margin-right: 48px;
|
57
|
+
border-radius: 6px;
|
58
|
+
box-shadow: 0 2px 11px 0 #00000033;
|
59
|
+
background-color: white;
|
60
|
+
}
|
61
|
+
|
62
|
+
section.app-info {
|
63
|
+
padding: 16px 24px;
|
64
|
+
}
|
65
|
+
@media screen and (min-width: 960px) {
|
66
|
+
section.app-info {
|
67
|
+
padding: 16px 24px;
|
68
|
+
width: 560px;
|
69
|
+
margin: 0 auto;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
.app-header {
|
74
|
+
display: flex;
|
75
|
+
align-items: center;
|
76
|
+
flex-wrap: wrap;
|
77
|
+
}
|
78
|
+
|
79
|
+
.spacer {
|
80
|
+
flex: 1;
|
81
|
+
}
|
82
|
+
|
83
|
+
.app-name h2,
|
84
|
+
.app-name p {
|
85
|
+
margin: 0;
|
86
|
+
}
|
87
|
+
|
88
|
+
.app-name p {
|
89
|
+
font-size: 12px;
|
90
|
+
color: #333333;
|
91
|
+
}
|
92
|
+
|
93
|
+
h1 {
|
94
|
+
}
|
95
|
+
|
96
|
+
h2 {
|
97
|
+
font-size: 18px;
|
98
|
+
font-weight: 600;
|
99
|
+
line-height: 1.78;
|
100
|
+
}
|
101
|
+
|
102
|
+
p {
|
103
|
+
font-size: 16px;
|
104
|
+
line-height: 1.63;
|
105
|
+
}
|
106
|
+
|
107
|
+
.button {
|
108
|
+
background-color: #2924fb;
|
109
|
+
padding: 12px 30px;
|
110
|
+
margin: 32px 0 0;
|
111
|
+
color: white;
|
112
|
+
border: none;
|
113
|
+
border-radius: 30px;
|
114
|
+
font-family: "Overpass Mono", monospace;
|
115
|
+
font-size: 14px;
|
116
|
+
font-weight: bold;
|
117
|
+
text-decoration: none;
|
118
|
+
}
|
119
|
+
.button img {
|
120
|
+
margin-bottom: -3px;
|
121
|
+
}
|
122
|
+
|
123
|
+
.release-notes-section {
|
124
|
+
padding: 32px 0;
|
125
|
+
}
|
126
|
+
.release-notes-section > h2 {
|
127
|
+
font-family: "Overpass Mono", monospace;
|
128
|
+
font-size: 16px;
|
129
|
+
font-weight: bold;
|
130
|
+
color: #2924fb;
|
131
|
+
margin-bottom: 16px;
|
132
|
+
}
|
133
|
+
.release-notes {
|
134
|
+
padding: 24px;
|
135
|
+
color: black;
|
136
|
+
background-color: #f8f8f8;
|
137
|
+
font-size: 16px;
|
138
|
+
line-height: 1.44;
|
139
|
+
letter-spacing: normal;
|
140
|
+
color: #333333;
|
141
|
+
}
|
142
|
+
|
143
|
+
.release-notes ul {
|
144
|
+
padding: 0;
|
145
|
+
list-style-type: square;
|
146
|
+
list-style-position: inside;
|
147
|
+
}
|
148
|
+
|
149
|
+
.release-notes h1,
|
150
|
+
.release-notes h2,
|
151
|
+
.release-notes h3,
|
152
|
+
.release-notes h4,
|
153
|
+
.release-notes h5,
|
154
|
+
.release-notes h6 {
|
155
|
+
color: black;
|
156
|
+
margin-top: 24px;
|
157
|
+
margin-bottom: 16px;
|
158
|
+
}
|
159
|
+
|
160
|
+
.release-notes h1 {
|
161
|
+
font-size: 26px;
|
162
|
+
font-weight: bold;
|
163
|
+
line-height: 1.27;
|
164
|
+
}
|
165
|
+
|
166
|
+
.release-notes h2 {
|
167
|
+
font-size: 18px;
|
168
|
+
font-weight: 500;
|
169
|
+
line-height: 1.78;
|
170
|
+
}
|
171
|
+
|
172
|
+
.release-notes h3 {
|
173
|
+
font-size: 18px;
|
174
|
+
font-weight: bold;
|
175
|
+
line-height: 1.2;
|
176
|
+
}
|
177
|
+
|
178
|
+
.release-notes h4 {
|
179
|
+
font-weight: 500;
|
180
|
+
font-size: 16px1em;
|
181
|
+
}
|
182
|
+
|
183
|
+
.release-notes h5 {
|
184
|
+
font-weight: 500;
|
185
|
+
font-size: 14px;
|
186
|
+
}
|
187
|
+
|
188
|
+
.release-notes h6 {
|
189
|
+
font-weight: 500;
|
190
|
+
font-size: 13px;
|
191
|
+
}
|
192
|
+
|
193
|
+
.release-notes pre {
|
194
|
+
padding: 0;
|
195
|
+
margin: 0;
|
196
|
+
}
|
197
|
+
.release-notes pre code {
|
198
|
+
margin: 0;
|
199
|
+
padding: 0;
|
200
|
+
font-family: "Overpass Mono", monospace;
|
201
|
+
color: #424242;
|
202
|
+
font-size: 12px;
|
203
|
+
font-weight: bold;
|
204
|
+
line-height: 1.75;
|
205
|
+
}
|
206
|
+
</style>
|
207
|
+
</head>
|
208
|
+
<body>
|
209
|
+
<article class="content">
|
210
|
+
<header><img src="https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/polidea-logo.png" height="24" /></header>
|
211
|
+
<section class="app-info">
|
212
|
+
<div class="app-header">
|
213
|
+
<img class="app-icon" src="<%= app_icon %>" />
|
214
|
+
<div class="app-name">
|
215
|
+
<h2><%= app_name %></h2>
|
216
|
+
<p>Version <%= app_version %> (<%= build_number %>)</p>
|
217
|
+
</div>
|
218
|
+
<div class="spacer"></div>
|
219
|
+
|
220
|
+
<a class="button" href="<%= url %>">
|
221
|
+
<img
|
222
|
+
src="https://s3.eu-central-1.amazonaws.com/fota.polidea.com/mails/images/install-icon.png"
|
223
|
+
width="16"
|
224
|
+
height="16"
|
225
|
+
/>
|
226
|
+
Install
|
227
|
+
</a>
|
228
|
+
</div>
|
229
|
+
<section class="release-notes-section">
|
230
|
+
<h2>What’s new:</h2>
|
231
|
+
<div class="release-notes">
|
232
|
+
<%= release_notes %>
|
233
|
+
</div>
|
234
|
+
</section>
|
235
|
+
</section>
|
236
|
+
</article>
|
237
|
+
</body>
|
238
|
+
</html>
|