fastlane-plugin-polidea 2.2.0.pre → 3.0.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_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 +1 -1
- 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 +10 -111
- 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: 2496e6471bff3fc0eddd90de1a381e635ac1682b867a6512b1c72b5581cb7d99
|
4
|
+
data.tar.gz: 6f8463f55cc6cc95938139fcbfb24bf830ba77ed59feb824a456f4db0c9efb62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61427c87fc09b20e799aabfdee82e77ccba2081b1d4cb371d3d97b12fdf0c098ad909b5cd1a6f0e4ab2724f74888b40f3f6a198aebc9babb2e01d6ff9373a108
|
7
|
+
data.tar.gz: 249482c6403cde339d2e8abcd1c182dee57d4e6e7a28aba34ede81339976c1f96393598b6b05dfadc98aa6c6426635c4283678f86a97d6ce65fa85cc4a70c4fe
|
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
|
```
|
@@ -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']
|
@@ -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
|
@@ -2,34 +2,22 @@ require 'rqrcode_png'
|
|
2
2
|
|
3
3
|
module Fastlane
|
4
4
|
class QRGenerator
|
5
|
-
def initialize(data,
|
5
|
+
def initialize(data, dark_color = ::ChunkyPNG::Color::BLACK)
|
6
6
|
@qr_code = RQRCode::QRCode.new(data, size: 10, level: :m)
|
7
|
-
@auto_awesome = auto_awesome
|
8
7
|
@dark_color = dark_color
|
8
|
+
@light_color = ::ChunkyPNG::Color::WHITE
|
9
9
|
|
10
10
|
@margin = 20
|
11
|
-
@image = ::ChunkyPNG::Image.new(2 * @margin + @qr_code.qrcode.module_count * 5, 2 * @margin + @qr_code.qrcode.module_count * 5,
|
12
|
-
|
13
|
-
@logo = ::ChunkyPNG::Image.from_file("#{path_to_resources}/polidea-logo.png")
|
14
|
-
@logo = @logo.resize(2 * @margin + @qr_code.qrcode.module_count * 5, 2 * @margin + @qr_code.qrcode.module_count * 5)
|
11
|
+
@image = ::ChunkyPNG::Image.new(2 * @margin + @qr_code.qrcode.module_count * 5, 2 * @margin + @qr_code.qrcode.module_count * 5, @light_color)
|
15
12
|
end
|
16
13
|
|
17
14
|
def generate(path)
|
18
|
-
white = ::ChunkyPNG::Color::WHITE
|
19
|
-
blue = ::ChunkyPNG::Color.rgb(26, 159, 217)
|
20
|
-
|
21
|
-
if !@auto_awesome
|
22
|
-
dark_color = @dark_color
|
23
|
-
else
|
24
|
-
dark_color = blue
|
25
|
-
end
|
26
|
-
|
27
15
|
@qr_code.modules.each_index do |row|
|
28
16
|
@qr_code.modules[row].each_index do |column|
|
29
17
|
if @qr_code.modules[row][column]
|
30
|
-
print_symbol(dark_color, column, row, (column < 8 && row < 8) || (column < 8 && row >= @qr_code.qrcode.module_count - 8) || (column >= @qr_code.qrcode.module_count - 8 && row < 8))
|
18
|
+
print_symbol(@dark_color, column, row, (column < 8 && row < 8) || (column < 8 && row >= @qr_code.qrcode.module_count - 8) || (column >= @qr_code.qrcode.module_count - 8 && row < 8))
|
31
19
|
else
|
32
|
-
print_symbol(
|
20
|
+
print_symbol(@light_color, column, row, (column < 8 && row < 8) || (column < 8 && row >= @qr_code.qrcode.module_count - 8) || (column >= @qr_code.qrcode.module_count - 8 && row < 8))
|
33
21
|
end
|
34
22
|
end
|
35
23
|
end
|
@@ -40,37 +28,14 @@ module Fastlane
|
|
40
28
|
|
41
29
|
def print_symbol(color, column, row, interpolate)
|
42
30
|
(0..4).each do |i|
|
43
|
-
|
44
|
-
print_symbol_row(interpolated_color(color, 5 * column + i, 5 * row, true), 5 * column + i, row, interpolate)
|
45
|
-
else
|
46
|
-
print_symbol_row(interpolated_color(color, 5 * column + i, 5 * row, interpolate), 5 * column + i, row, interpolate)
|
47
|
-
end
|
31
|
+
print_symbol_row(color, 5 * column + i, row, interpolate)
|
48
32
|
end
|
49
33
|
end
|
50
34
|
|
51
|
-
def interpolated_color(color, column, row, interpolate)
|
52
|
-
if !@auto_awesome
|
53
|
-
interpolated_color = color
|
54
|
-
elsif interpolate
|
55
|
-
interpolated_color = ::ChunkyPNG::Color.interpolate_quick(color, @logo[@margin + column, @margin + row], 255)
|
56
|
-
else
|
57
|
-
interpolated_color = ::ChunkyPNG::Color.interpolate_quick(color, @logo[@margin + column, @margin + row], 40)
|
58
|
-
end
|
59
|
-
interpolated_color
|
60
|
-
end
|
61
|
-
|
62
35
|
def print_symbol_row(color, column, row, interpolate)
|
63
36
|
(0..4).each do |i|
|
64
|
-
|
65
|
-
@image[@margin + column, @margin + 5 * row + i] = interpolated_color(color, column, 5 * row + i, true)
|
66
|
-
else
|
67
|
-
@image[@margin + column, @margin + 5 * row + i] = interpolated_color(color, column, 5 * row + i, interpolate)
|
68
|
-
end
|
37
|
+
@image[@margin + column, @margin + 5 * row + i] = color
|
69
38
|
end
|
70
39
|
end
|
71
|
-
|
72
|
-
def path_to_resources
|
73
|
-
File.expand_path "#{__dir__}/../templates/images"
|
74
|
-
end
|
75
40
|
end
|
76
41
|
end
|