fastlane-plugin-polidea 2.2.0.pre.1 → 3.0.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.
- 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
|
-
[](https://gitlab.polidea.com/Shuttle/fastlane-plugin-polidea/pipelines)
|
|
4
4
|
[](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>
|