fastlane-plugin-aws_s3 1.6.0 → 2.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 +5 -5
- data/README.md +6 -9
- data/lib/assets/s3_android_html_template.erb +8 -18
- data/lib/assets/s3_android_version_template.erb +1 -1
- data/lib/assets/s3_ios_html_template.erb +8 -25
- data/lib/assets/s3_ios_version_template.erb +1 -1
- data/lib/fastlane/plugin/aws_s3/actions/aws_s3_action.rb +145 -42
- data/lib/fastlane/plugin/aws_s3/version.rb +1 -1
- metadata +15 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 733d4e8ad5102e8eb943a08a22ceceff539415ec8cdd888780537294165f2c67
|
4
|
+
data.tar.gz: 47a788ae5954bd3fc3a9188debf847ba9b975fdeff29adb77badf170038f3b23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4f503580810e56959001b855fc677185a4acf240c5618f5d6ad9d871fb2277d0711b1ac93ff855817ef9073f7943d5cef4f98526d80763c31397c323b7f435f
|
7
|
+
data.tar.gz: c30c426048d89bbb43566057ee7d90c05684581ae1d8bfe6f6bd78fd9e625e403a746ccb5d680c4eed7ef7bc76ffec2b002297b8f6407eb5f3f1cfa6b619605b
|
data/README.md
CHANGED
@@ -32,13 +32,13 @@ You can also customize a lot of options:
|
|
32
32
|
```ruby
|
33
33
|
aws_s3(
|
34
34
|
# All of these are used to make Shenzhen's `ipa distribute:s3` command
|
35
|
-
access_key: ENV['S3_ACCESS_KEY'], #
|
36
|
-
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'], #
|
37
|
-
aws_profile: ENV['AWS_PROFILE']
|
35
|
+
access_key: ENV['S3_ACCESS_KEY'], # Optional - defaults to AWS Instance Profile Creds.
|
36
|
+
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'], # Optional - defaults to AWS Instance Profile Creds.
|
37
|
+
aws_profile: ENV['AWS_PROFILE'], # Optional - defaults to AWS Instance Profile Creds. (overrides if access_key and secret_access_key specified)
|
38
38
|
bucket: ENV['S3_BUCKET'], # Required from user.
|
39
39
|
region: ENV['S3_REGION'], # Required from user.
|
40
40
|
acl: ENV['S3_ACL'], # Optional - defaults to 'public-read'
|
41
|
-
server_side_encryption: ENV['S3_SERVER_SIDE_ENCRYPTION'] # Optional
|
41
|
+
server_side_encryption: ENV['S3_SERVER_SIDE_ENCRYPTION'], # Optional
|
42
42
|
|
43
43
|
endpoint: 'https://s3-us-west-1.amazonaws.com', # Optional, for buckets that require a specific endpoint
|
44
44
|
ipa: 'AppName.ipa', # Required (if not uploading an APK).
|
@@ -55,7 +55,7 @@ aws_s3(
|
|
55
55
|
)
|
56
56
|
```
|
57
57
|
|
58
|
-
It is recommended to **not** store the AWS access keys in the `Fastfile`.
|
58
|
+
It is recommended to **not** store the AWS access keys in the `Fastfile`. You can use [AWS Instance Profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) by attaching IAM roles to your EC2 configurations.
|
59
59
|
|
60
60
|
The uploaded `version.json` file provides an easy way for apps to poll if a new update is available. The JSON looks like:
|
61
61
|
|
@@ -84,7 +84,4 @@ For more information about how the `fastlane` plugin system works, check out the
|
|
84
84
|
|
85
85
|
## Author
|
86
86
|
|
87
|
-
Josh Holtz,
|
88
|
-
|
89
|
-
I'm available for freelance work (Fastlane, iOS, and Android development) :muscle:
|
90
|
-
Feel free to contact me :rocket:
|
87
|
+
Josh Holtz, me@joshholtz.com, [@joshdholtz](https://twitter.com/joshdholtz)
|
@@ -43,6 +43,11 @@
|
|
43
43
|
a:hover {
|
44
44
|
text-decoration: underline;
|
45
45
|
}
|
46
|
+
#os-message {
|
47
|
+
text-align: center;
|
48
|
+
color: #737373;
|
49
|
+
font-size: 14px;
|
50
|
+
}
|
46
51
|
#footnote {
|
47
52
|
color: #737373;
|
48
53
|
font-size: 14px;
|
@@ -58,7 +63,6 @@
|
|
58
63
|
<h1 style="text-align: center;"><%= title %></h1>
|
59
64
|
<h2><%= version_name %> (<%= version_code %>)</h2>
|
60
65
|
<p><em>Built on <%= Time.now.strftime('%a, %e %b %Y %H:%M %p') %></em></p>
|
61
|
-
<!-- <img src="app_icon.png" id="appIcon"> -->
|
62
66
|
|
63
67
|
<div class="oneRow">
|
64
68
|
<span class="download" id="android">
|
@@ -70,31 +74,17 @@
|
|
70
74
|
<span class="info">
|
71
75
|
<p><%= release_notes %></p>
|
72
76
|
</span>
|
73
|
-
|
74
|
-
<!-- <span class="download" id="android">
|
75
|
-
</span> -->
|
76
77
|
</div>
|
77
78
|
|
78
|
-
<h3 id="
|
79
|
+
<h3 id="os-message">Please open this page on your Android device!</h3>
|
79
80
|
|
80
81
|
<p id="finished">
|
81
82
|
App is being installed. You might have to close the browser.
|
82
83
|
</p>
|
83
84
|
|
84
85
|
<p id="footnote">
|
85
|
-
This is a beta version and is not
|
86
|
+
This is a beta version and is not intended for public sharing.
|
86
87
|
</p>
|
87
|
-
<img src="https://
|
88
|
+
<img src="https://fastlane.tools/assets/images/fastlane-logo-lockup.png" id="fastlaneLogo" />
|
88
89
|
</body>
|
89
|
-
|
90
|
-
<script type='text/javascript'>
|
91
|
-
if (/Android/i.test(navigator.userAgent))
|
92
|
-
{
|
93
|
-
document.getElementById("desktop").remove()
|
94
|
-
}
|
95
|
-
else
|
96
|
-
{
|
97
|
-
document.getElementById("android").remove()
|
98
|
-
}
|
99
|
-
</script>
|
100
90
|
</html>
|
@@ -43,6 +43,11 @@
|
|
43
43
|
a:hover {
|
44
44
|
text-decoration: underline;
|
45
45
|
}
|
46
|
+
#os-message {
|
47
|
+
text-align: center;
|
48
|
+
color: #737373;
|
49
|
+
font-size: 14px;
|
50
|
+
}
|
46
51
|
#footnote {
|
47
52
|
color: #737373;
|
48
53
|
font-size: 14px;
|
@@ -58,7 +63,6 @@
|
|
58
63
|
<h1 style="text-align: center;"><%= title %></h1>
|
59
64
|
<h2><%= bundle_version %> (<%= build_num %>)</h2>
|
60
65
|
<p><em>Built on <%= Time.now.strftime('%a, %e %b %Y %H:%M %p') %></em></p>
|
61
|
-
<!-- <img src="app_icon.png" id="appIcon"> -->
|
62
66
|
|
63
67
|
<div class="oneRow">
|
64
68
|
|
@@ -71,38 +75,17 @@
|
|
71
75
|
<span class="info">
|
72
76
|
<p><%= release_notes %></p>
|
73
77
|
</span>
|
74
|
-
|
75
|
-
<!-- <span class="download" id="android">
|
76
|
-
</span> -->
|
77
78
|
</div>
|
78
79
|
|
79
|
-
<h3 id="
|
80
|
+
<h3 id="os-message">Please open this page on your iOS device!</h3>
|
80
81
|
|
81
82
|
<p id="finished">
|
82
83
|
App is being installed. Close Safari using the home button.
|
83
84
|
</p>
|
84
85
|
|
85
86
|
<p id="footnote">
|
86
|
-
This is a beta version and is not
|
87
|
+
This is a beta version and is not intended for public sharing.
|
87
88
|
</p>
|
88
|
-
<img src="https://
|
89
|
+
<img src="https://fastlane.tools/assets/images/fastlane-logo-lockup.png" id="fastlaneLogo" />
|
89
90
|
</body>
|
90
|
-
|
91
|
-
<script type='text/javascript'>
|
92
|
-
// if (/Android/i.test(navigator.userAgent))
|
93
|
-
// {
|
94
|
-
// document.getElementById("ios").remove()
|
95
|
-
// document.getElementById("desktop").remove()
|
96
|
-
// }
|
97
|
-
if (/iPhone|iPad|iPod/i.test(navigator.userAgent))
|
98
|
-
{
|
99
|
-
// document.getElementById("android").remove()
|
100
|
-
document.getElementById("desktop").remove()
|
101
|
-
}
|
102
|
-
else
|
103
|
-
{
|
104
|
-
document.getElementById("ios").remove()
|
105
|
-
// document.getElementById("android").remove()
|
106
|
-
}
|
107
|
-
</script>
|
108
91
|
</html>
|
@@ -35,6 +35,8 @@ module Fastlane
|
|
35
35
|
params[:aws_profile] = config[:aws_profile]
|
36
36
|
params[:bucket] = config[:bucket]
|
37
37
|
params[:endpoint] = config[:endpoint]
|
38
|
+
params[:download_endpoint] = config[:download_endpoint]
|
39
|
+
params[:download_endpoint_replacement_regex] = config[:download_endpoint_replacement_regex]
|
38
40
|
params[:region] = config[:region]
|
39
41
|
params[:app_directory] = config[:app_directory]
|
40
42
|
params[:acl] = config[:acl]
|
@@ -49,6 +51,9 @@ module Fastlane
|
|
49
51
|
params[:html_file_name] = config[:html_file_name]
|
50
52
|
params[:skip_html_upload] = config[:skip_html_upload]
|
51
53
|
params[:html_in_folder] = config[:html_in_folder]
|
54
|
+
params[:html_in_root] = config[:html_in_root]
|
55
|
+
params[:version_in_folder] = config[:version_in_folder]
|
56
|
+
params[:version_in_root] = config[:version_in_root]
|
52
57
|
params[:version_template_path] = config[:version_template_path]
|
53
58
|
params[:version_file_name] = config[:version_file_name]
|
54
59
|
params[:version_template_params] = config[:version_template_params]
|
@@ -74,30 +79,19 @@ module Fastlane
|
|
74
79
|
acl = params[:acl].to_sym
|
75
80
|
server_side_encryption = params[:server_side_encryption]
|
76
81
|
|
77
|
-
unless s3_profile
|
78
|
-
UI.user_error!("No S3 access key given, pass using `access_key: 'key'` (or use `aws_profile: 'profile'`)") unless s3_access_key.to_s.length > 0
|
79
|
-
UI.user_error!("No S3 secret access key given, pass using `secret_access_key: 'secret key'` (or use `aws_profile: 'profile'`)") unless s3_secret_access_key.to_s.length > 0
|
80
|
-
end
|
81
82
|
UI.user_error!("No S3 bucket given, pass using `bucket: 'bucket'`") unless s3_bucket.to_s.length > 0
|
82
83
|
UI.user_error!("No IPA, APK file, folder or files paths given, pass using `ipa: 'ipa path'` or `apk: 'apk path'` or `folder: 'folder path' or files: [`file path1`, `file path 2`]") if ipa_file.to_s.length == 0 && apk_file.to_s.length == 0 && files.to_a.count == 0 && folder.to_s.length == 0
|
83
84
|
UI.user_error!("Please only give IPA path or APK path (not both)") if ipa_file.to_s.length > 0 && apk_file.to_s.length > 0
|
84
85
|
|
85
|
-
require 'aws-sdk'
|
86
|
-
if s3_profile
|
87
|
-
creds = Aws::SharedCredentials.new(profile_name: s3_profile);
|
88
|
-
else
|
89
|
-
creds = Aws::Credentials.new(s3_access_key, s3_secret_access_key)
|
90
|
-
end
|
91
|
-
Aws.config.update({
|
92
|
-
region: s3_region,
|
93
|
-
credentials: creds
|
94
|
-
})
|
86
|
+
require 'aws-sdk-s3'
|
95
87
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
88
|
+
client_cfg = {}
|
89
|
+
client_cfg[:region] = s3_region if s3_region
|
90
|
+
client_cfg[:endpoint] = s3_endpoint if s3_endpoint
|
91
|
+
client_cfg[:profile] = s3_profile if s3_profile
|
92
|
+
client_cfg[:credentials] = Aws::Credentials.new(s3_access_key, s3_secret_access_key) if s3_access_key && s3_secret_access_key
|
93
|
+
|
94
|
+
s3_client = Aws::S3::Client.new(client_cfg)
|
101
95
|
|
102
96
|
if xcarchive_file.nil?
|
103
97
|
xcarchive_file = Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE]
|
@@ -124,18 +118,22 @@ module Fastlane
|
|
124
118
|
html_template_params = params[:html_template_params] || {}
|
125
119
|
html_file_name = params[:html_file_name]
|
126
120
|
generate_html_in_folder = params[:html_in_folder]
|
121
|
+
generate_html_in_root = params[:html_in_root]
|
122
|
+
generate_version_in_folder = params[:version_in_folder]
|
123
|
+
generate_version_in_root = params[:version_in_root]
|
127
124
|
version_template_path = params[:version_template_path]
|
128
125
|
version_template_params = params[:version_template_params] || {}
|
129
126
|
version_file_name = params[:version_file_name]
|
130
127
|
override_file_name = params[:override_file_name]
|
131
|
-
|
128
|
+
download_endpoint = params[:download_endpoint]
|
129
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
132
130
|
url_part = self.expand_path_with_substitutions_from_ipa_plist(ipa_file, s3_path)
|
133
131
|
|
134
132
|
ipa_file_basename = File.basename(ipa_file)
|
135
133
|
ipa_file_name = "#{url_part}#{override_file_name ? override_file_name : ipa_file_basename}"
|
136
134
|
ipa_file_data = File.open(ipa_file, 'rb')
|
137
135
|
|
138
|
-
ipa_url = self.upload_file(s3_client, s3_bucket, app_directory, ipa_file_name, ipa_file_data, acl, server_side_encryption)
|
136
|
+
ipa_url = self.upload_file(s3_client, s3_bucket, app_directory, ipa_file_name, ipa_file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
139
137
|
|
140
138
|
# Setting action and environment variables
|
141
139
|
Actions.lane_context[SharedValues::S3_IPA_OUTPUT_PATH] = ipa_url
|
@@ -146,7 +144,7 @@ module Fastlane
|
|
146
144
|
dsym_file_name = "#{url_part}#{dsym_file_basename}"
|
147
145
|
dsym_file_data = File.open(dsym_file, 'rb')
|
148
146
|
|
149
|
-
dsym_url = self.upload_file(s3_client, s3_bucket, app_directory, dsym_file_name, dsym_file_data, acl, server_side_encryption)
|
147
|
+
dsym_url = self.upload_file(s3_client, s3_bucket, app_directory, dsym_file_name, dsym_file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
150
148
|
|
151
149
|
# Setting action and environment variables
|
152
150
|
Actions.lane_context[SharedValues::S3_DSYM_OUTPUT_PATH] = dsym_url
|
@@ -207,7 +205,7 @@ module Fastlane
|
|
207
205
|
# plist uploading
|
208
206
|
#
|
209
207
|
#####################################
|
210
|
-
plist_url = self.upload_file(s3_client, s3_bucket, app_directory, plist_file_name, plist_render, acl, server_side_encryption)
|
208
|
+
plist_url = self.upload_file(s3_client, s3_bucket, app_directory, plist_file_name, plist_render, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
211
209
|
|
212
210
|
# Creates html from template
|
213
211
|
if html_template_path && File.exist?(html_template_path)
|
@@ -249,9 +247,34 @@ module Fastlane
|
|
249
247
|
#####################################
|
250
248
|
|
251
249
|
skip_html = params[:skip_html_upload]
|
252
|
-
|
253
|
-
|
254
|
-
|
250
|
+
|
251
|
+
html_file_names = []
|
252
|
+
version_file_names = []
|
253
|
+
|
254
|
+
unless skip_html
|
255
|
+
if generate_html_in_root
|
256
|
+
html_file_names << html_file_name
|
257
|
+
end
|
258
|
+
if generate_html_in_folder
|
259
|
+
html_file_names << "#{url_part}#{html_file_name}"
|
260
|
+
end
|
261
|
+
end
|
262
|
+
if generate_version_in_root
|
263
|
+
version_file_names << version_file_name
|
264
|
+
end
|
265
|
+
if generate_version_in_folder
|
266
|
+
version_file_names << "#{url_part}#{version_file_name}"
|
267
|
+
end
|
268
|
+
|
269
|
+
html_url = nil
|
270
|
+
version_url = nil
|
271
|
+
|
272
|
+
html_file_names.each do |html_file_name|
|
273
|
+
html_url = self.upload_file(s3_client, s3_bucket, app_directory, html_file_name, html_render, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
274
|
+
end
|
275
|
+
version_file_names.each do |version_file_name|
|
276
|
+
version_url = self.upload_file(s3_client, s3_bucket, app_directory, version_file_name, version_render, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
277
|
+
end
|
255
278
|
|
256
279
|
# Setting action and environment variables
|
257
280
|
Actions.lane_context[SharedValues::S3_PLIST_OUTPUT_PATH] = plist_url
|
@@ -283,8 +306,10 @@ module Fastlane
|
|
283
306
|
sh("zip -r '#{archive_zip}' '#{archive}'")
|
284
307
|
full_archive_zip_name = "#{url_part}#{archive_zip_name}"
|
285
308
|
archive_zip_data = File.open(archive_zip, 'rb')
|
309
|
+
download_endpoint = params[:download_endpoint]
|
310
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
286
311
|
|
287
|
-
archive_url = self.upload_file(s3_client, s3_bucket, app_directory, full_archive_zip_name, archive_zip_data, acl, server_side_encryption)
|
312
|
+
archive_url = self.upload_file(s3_client, s3_bucket, app_directory, full_archive_zip_name, archive_zip_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
288
313
|
|
289
314
|
Actions.lane_context[SharedValues::S3_XCARCHIVE_OUTPUT_PATH] = archive_url
|
290
315
|
ENV[SharedValues::S3_XCARCHIVE_OUTPUT_PATH.to_s] = archive_url
|
@@ -299,7 +324,7 @@ module Fastlane
|
|
299
324
|
version_name = version[1]
|
300
325
|
title = version[2]
|
301
326
|
|
302
|
-
s3_path = "
|
327
|
+
s3_path = "v{version_name}_b{version_code}/" unless s3_path
|
303
328
|
|
304
329
|
app_directory = params[:app_directory]
|
305
330
|
|
@@ -307,18 +332,23 @@ module Fastlane
|
|
307
332
|
html_template_params = params[:html_template_params] || {}
|
308
333
|
html_file_name = params[:html_file_name]
|
309
334
|
generate_html_in_folder = params[:html_in_folder]
|
335
|
+
generate_html_in_root = params[:html_in_root]
|
336
|
+
generate_version_in_folder = params[:version_in_folder]
|
337
|
+
generate_version_in_root = params[:version_in_root]
|
310
338
|
version_template_path = params[:version_template_path]
|
311
339
|
version_template_params = params[:version_template_params] || {}
|
312
340
|
version_file_name = params[:version_file_name]
|
313
341
|
override_file_name = params[:override_file_name]
|
342
|
+
download_endpoint = params[:download_endpoint]
|
343
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
314
344
|
|
315
|
-
url_part = s3_path
|
345
|
+
url_part = self.expand_path_with_substitutions_with_versions(version_code, version_name, s3_path)
|
316
346
|
|
317
347
|
apk_file_basename = File.basename(apk_file)
|
318
348
|
apk_file_name = "#{url_part}#{override_file_name ? override_file_name : apk_file_basename}"
|
319
349
|
apk_file_data = File.open(apk_file, 'rb')
|
320
350
|
|
321
|
-
apk_url = self.upload_file(s3_client, s3_bucket, app_directory, apk_file_name, apk_file_data, acl, server_side_encryption)
|
351
|
+
apk_url = self.upload_file(s3_client, s3_bucket, app_directory, apk_file_name, apk_file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
322
352
|
|
323
353
|
# Setting action and environment variables
|
324
354
|
Actions.lane_context[SharedValues::S3_APK_OUTPUT_PATH] = apk_url
|
@@ -376,9 +406,35 @@ module Fastlane
|
|
376
406
|
#####################################
|
377
407
|
|
378
408
|
skip_html = params[:skip_html_upload]
|
379
|
-
|
380
|
-
|
381
|
-
|
409
|
+
|
410
|
+
html_file_names = []
|
411
|
+
version_file_names = []
|
412
|
+
|
413
|
+
unless skip_html
|
414
|
+
if generate_html_in_root
|
415
|
+
html_file_names << html_file_name
|
416
|
+
end
|
417
|
+
if generate_html_in_folder
|
418
|
+
html_file_names << "#{url_part}#{html_file_name}"
|
419
|
+
end
|
420
|
+
end
|
421
|
+
if generate_version_in_root
|
422
|
+
version_file_names << version_file_name
|
423
|
+
end
|
424
|
+
if generate_version_in_folder
|
425
|
+
version_file_names << "#{url_part}#{version_file_name}"
|
426
|
+
end
|
427
|
+
|
428
|
+
html_url = nil
|
429
|
+
version_url = nil
|
430
|
+
|
431
|
+
html_file_names.each do |html_file_name|
|
432
|
+
html_url = self.upload_file(s3_client, s3_bucket, app_directory, html_file_name, html_render, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
433
|
+
end
|
434
|
+
|
435
|
+
version_file_names do |version_file_name|
|
436
|
+
version_url = self.upload_file(s3_client, s3_bucket, app_directory, version_file_name, version_render, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
437
|
+
end
|
382
438
|
|
383
439
|
Actions.lane_context[SharedValues::S3_HTML_OUTPUT_PATH] = html_url unless skip_html
|
384
440
|
ENV[SharedValues::S3_HTML_OUTPUT_PATH.to_s] = html_url unless skip_html
|
@@ -408,7 +464,9 @@ module Fastlane
|
|
408
464
|
zip_file_name = "#{url_part}source.zip"
|
409
465
|
|
410
466
|
output_path_data = File.open("#{output_file_path}", 'rb')
|
411
|
-
|
467
|
+
download_endpoint = params[:download_endpoint]
|
468
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
469
|
+
source_url = self.upload_file(s3_client, s3_bucket, app_directory, zip_file_name, output_path_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
412
470
|
|
413
471
|
Actions.lane_context[SharedValues::S3_SOURCE_OUTPUT_PATH] = source_url
|
414
472
|
ENV[SharedValues::S3_SOURCE_OUTPUT_PATH.to_s] = source_url
|
@@ -462,13 +520,16 @@ module Fastlane
|
|
462
520
|
app_directory = params[:app_directory]
|
463
521
|
url_part = s3_path
|
464
522
|
|
523
|
+
download_endpoint = params[:download_endpoint]
|
524
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
525
|
+
|
465
526
|
Actions.lane_context[SharedValues::S3_FILES_OUTPUT_PATHS] = []
|
466
527
|
files.each do |file|
|
467
528
|
file_basename = File.basename(file)
|
468
529
|
file_data = File.open(file, 'rb')
|
469
530
|
file_name = url_part + '/' + file_basename
|
470
531
|
|
471
|
-
file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption)
|
532
|
+
file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
472
533
|
|
473
534
|
# Setting action and environment variables
|
474
535
|
Actions.lane_context[SharedValues::S3_FILES_OUTPUT_PATHS] << file_url
|
@@ -483,6 +544,9 @@ module Fastlane
|
|
483
544
|
url_part = s3_path
|
484
545
|
app_directory = params[:app_directory]
|
485
546
|
|
547
|
+
download_endpoint = params[:download_endpoint]
|
548
|
+
download_endpoint_replacement_regex = params[:download_endpoint_replacement_regex]
|
549
|
+
|
486
550
|
unless File.directory?(folder)
|
487
551
|
UI.user_error!("Invalid folder parameter. `#{File.expand_path(folder)} is not a directory!")
|
488
552
|
end
|
@@ -493,14 +557,12 @@ module Fastlane
|
|
493
557
|
file_relative_path_to_folder = Pathname.new(File.expand_path(file)).relative_path_from(Pathname.new(File.expand_path(folder))).to_s
|
494
558
|
file_name = url_part + '/' + file_relative_path_to_folder
|
495
559
|
|
496
|
-
file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption)
|
497
|
-
Actions.lane_context[SharedValues::S3_FOLDER_OUTPUT_PATH] = file_url.gsub('/' + file_relative_path_to_folder, '')
|
560
|
+
file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
561
|
+
Actions.lane_context[SharedValues::S3_FOLDER_OUTPUT_PATH] = CGI.unescape(file_url).gsub('/' + file_relative_path_to_folder, '')
|
498
562
|
end
|
499
563
|
end
|
500
564
|
|
501
|
-
|
502
|
-
|
503
|
-
def self.upload_file(s3_client, bucket_name, app_directory, file_name, file_data, acl, server_side_encryption)
|
565
|
+
def self.upload_file(s3_client, bucket_name, app_directory, file_name, file_data, acl, server_side_encryption, download_endpoint, download_endpoint_replacement_regex)
|
504
566
|
|
505
567
|
if app_directory
|
506
568
|
file_name = "#{app_directory}/#{file_name}"
|
@@ -525,7 +587,14 @@ module Fastlane
|
|
525
587
|
end
|
526
588
|
|
527
589
|
# Return public url
|
528
|
-
obj.public_url.to_s
|
590
|
+
url = obj.public_url.to_s
|
591
|
+
|
592
|
+
# if a download endpoint is provided, then swap it in before returning
|
593
|
+
if download_endpoint
|
594
|
+
url = url.gsub(Regexp.new(download_endpoint_replacement_regex), download_endpoint)
|
595
|
+
end
|
596
|
+
|
597
|
+
return url
|
529
598
|
end
|
530
599
|
|
531
600
|
#
|
@@ -551,6 +620,12 @@ module Fastlane
|
|
551
620
|
return path
|
552
621
|
end
|
553
622
|
|
623
|
+
def self.expand_path_with_substitutions_with_versions(version_code, version_name, path)
|
624
|
+
path.gsub!(/\{version_code\}/, version_code.to_s) if version_code
|
625
|
+
path.gsub!(/\{version_name\}/, version_name) if version_name
|
626
|
+
return path
|
627
|
+
end
|
628
|
+
|
554
629
|
def self.description
|
555
630
|
"Generates a plist file and uploads all to AWS S3"
|
556
631
|
end
|
@@ -616,10 +691,28 @@ module Fastlane
|
|
616
691
|
is_string: false),
|
617
692
|
FastlaneCore::ConfigItem.new(key: :html_in_folder,
|
618
693
|
env_name: "",
|
619
|
-
description: "
|
694
|
+
description: "upload the html file into the version folder",
|
695
|
+
optional: true,
|
696
|
+
default_value: false,
|
697
|
+
is_string: false),
|
698
|
+
FastlaneCore::ConfigItem.new(key: :html_in_root,
|
699
|
+
env_name: "",
|
700
|
+
description: "upload the html file into the 'root' folder",
|
701
|
+
optional: true,
|
702
|
+
default_value: true,
|
703
|
+
is_string: false),
|
704
|
+
FastlaneCore::ConfigItem.new(key: :version_in_folder,
|
705
|
+
env_name: "",
|
706
|
+
description: "upload the version file into the version folder",
|
620
707
|
optional: true,
|
621
708
|
default_value: false,
|
622
709
|
is_string: false),
|
710
|
+
FastlaneCore::ConfigItem.new(key: :version_in_root,
|
711
|
+
env_name: "",
|
712
|
+
description: "upload the html file into the 'root' folder",
|
713
|
+
optional: true,
|
714
|
+
default_value: true,
|
715
|
+
is_string: false),
|
623
716
|
FastlaneCore::ConfigItem.new(key: :version_template_path,
|
624
717
|
env_name: "",
|
625
718
|
description: "version erb template path",
|
@@ -685,6 +778,16 @@ module Fastlane
|
|
685
778
|
description: "The base endpoint for your S3 bucket",
|
686
779
|
optional: true,
|
687
780
|
default_value: nil),
|
781
|
+
FastlaneCore::ConfigItem.new(key: :download_endpoint,
|
782
|
+
env_name: "S3_DOWNLOAD_ENDPOINT",
|
783
|
+
description: "The endpoint for downloads from your S3 bucket",
|
784
|
+
optional: true,
|
785
|
+
default_value: nil),
|
786
|
+
FastlaneCore::ConfigItem.new(key: :download_endpoint_replacement_regex,
|
787
|
+
env_name: "S3_DOWNLOAD_ENDPOINT_REPLACEMENT_REGEX",
|
788
|
+
description: "A regex used to determine which part of the S3 URL to replace with S3_DOWNLOAD_ENDPOINT",
|
789
|
+
optional: true,
|
790
|
+
default_value: '^https?://[^/]*'),
|
688
791
|
FastlaneCore::ConfigItem.new(key: :override_file_name,
|
689
792
|
env_name: "",
|
690
793
|
description: "Optional override ipa/apk uploaded file name",
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-aws_s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtz
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: aws-sdk
|
14
|
+
name: aws-sdk-s3
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: apktools
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
47
|
+
version: '3.3'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
54
|
+
version: '3.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,15 +100,15 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 2.144.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
description:
|
110
|
+
version: 2.144.0
|
111
|
+
description:
|
112
112
|
email: josh@rokkincat.com
|
113
113
|
executables: []
|
114
114
|
extensions: []
|
@@ -125,11 +125,11 @@ files:
|
|
125
125
|
- lib/fastlane/plugin/aws_s3/actions/aws_s3_action.rb
|
126
126
|
- lib/fastlane/plugin/aws_s3/helper/aws_s3_helper.rb
|
127
127
|
- lib/fastlane/plugin/aws_s3/version.rb
|
128
|
-
homepage: https://github.com/
|
128
|
+
homepage: https://github.com/fastlane-community/fastlane-plugin-s3
|
129
129
|
licenses:
|
130
130
|
- MIT
|
131
131
|
metadata: {}
|
132
|
-
post_install_message:
|
132
|
+
post_install_message:
|
133
133
|
rdoc_options: []
|
134
134
|
require_paths:
|
135
135
|
- lib
|
@@ -144,9 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
|
-
|
148
|
-
|
149
|
-
signing_key:
|
147
|
+
rubygems_version: 3.0.3
|
148
|
+
signing_key:
|
150
149
|
specification_version: 4
|
151
150
|
summary: Upload IPA and APK to S3
|
152
151
|
test_files: []
|