fastlane-plugin-aws_s3 1.8.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 594f0be26c1299aa2e30916f9cd14fa27f0018577ed7f1a57bc85c925c265e09
4
- data.tar.gz: aac3d5fcd0522cf8c1a92b6ef31cfed1183b915eb06f3ff193b41ac1187c8f23
3
+ metadata.gz: fa270593b8070859b409a3123921341f44e46a750aadd42df7c958c3946529b5
4
+ data.tar.gz: 3e37babdac81f10057af2d113423351332fcfe34406b78dd7ffce249ac9bbfd3
5
5
  SHA512:
6
- metadata.gz: a125b9f244360d5ffecc66121765a2e764c02af654de7237260ca6ae1a5d8322decec7cfd77543135ca90d661efeb67e9e49b212d19889cb612903dba3794b9f
7
- data.tar.gz: 47cd761ae03280ad801e95f30b3aeefc40d7e27593d10ec561b38a7e5f49f7b1a9f793515db2789cfdfecf2619663143300733b47f40127cbfea15fc6360a383
6
+ metadata.gz: 944b7f4fda0f8963f5896f4edcb973bbd6d8ef2a3931268455404fcd3696897339f3daa6c810b8a3d3a4e2ef35ee909f6b5441547b7a06d26439946b62131a4d
7
+ data.tar.gz: 537580be8d808a2458ca5df1209406b8b01ba1855e30ded8d10c42897e79f791fa18389cff8d15e3cadcf486c034160421fc61dda7b86f5c5d6ad0459eb2927b
@@ -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]
@@ -79,25 +84,14 @@ module Fastlane
79
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
80
85
 
81
86
  require 'aws-sdk-s3'
82
- if s3_profile
83
- creds = Aws::SharedCredentials.new(profile_name: s3_profile);
84
- elsif s3_access_key.to_s.length > 0 && s3_secret_access_key.to_s.length > 0
85
- creds = Aws::Credentials.new(s3_access_key, s3_secret_access_key)
86
- else
87
- UI.important("No S3 access key or S3 secret access key given, using S3 instance profile by default.")
88
- UI.important("If you want to use specific creds to S3 access, you can pass using `access_key: 'key'` and `secret_access_key: 'secret key'` (or use `aws_profile: 'profile'`)")
89
- creds = Aws::InstanceProfileCredentials.new()
90
- end
91
- Aws.config.update({
92
- region: s3_region,
93
- credentials: creds
94
- })
95
87
 
96
- s3_client = if s3_endpoint
97
- Aws::S3::Client.new(endpoint: s3_endpoint)
98
- else
99
- Aws::S3::Client.new
100
- end
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
- html_file_name = "#{url_part}#{html_file_name}" if generate_html_in_folder
253
- html_url = self.upload_file(s3_client, s3_bucket, app_directory, html_file_name, html_render, acl, server_side_encryption) unless skip_html
254
- version_url = self.upload_file(s3_client, s3_bucket, app_directory, version_file_name, version_render, acl, server_side_encryption)
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 = "#{version_code}_#{version_name}/" unless 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
- html_file_name = "#{url_part}#{html_file_name}" if generate_html_in_folder
380
- html_url = self.upload_file(s3_client, s3_bucket, app_directory, html_file_name, html_render, acl, server_side_encryption) unless skip_html
381
- version_url = self.upload_file(s3_client, s3_bucket, app_directory, version_file_name, version_render, acl, server_side_encryption)
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
- source_url = self.upload_file(s3_client, s3_bucket, app_directory, zip_file_name, output_path_data, acl, server_side_encryption)
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
@@ -494,13 +552,11 @@ module Fastlane
494
552
  file_name = url_part + '/' + file_relative_path_to_folder
495
553
 
496
554
  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, '')
555
+ Actions.lane_context[SharedValues::S3_FOLDER_OUTPUT_PATH] = CGI.unescape(file_url).gsub('/' + file_relative_path_to_folder, '')
498
556
  end
499
557
  end
500
558
 
501
-
502
-
503
- def self.upload_file(s3_client, bucket_name, app_directory, file_name, file_data, acl, server_side_encryption)
559
+ 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
560
 
505
561
  if app_directory
506
562
  file_name = "#{app_directory}/#{file_name}"
@@ -525,7 +581,14 @@ module Fastlane
525
581
  end
526
582
 
527
583
  # Return public url
528
- obj.public_url.to_s
584
+ url = obj.public_url.to_s
585
+
586
+ # if a download endpoint is provided, then swap it in before returning
587
+ if download_endpoint
588
+ url = url.gsub(Regexp.new(download_endpoint_replacement_regex), download_endpoint)
589
+ end
590
+
591
+ return url
529
592
  end
530
593
 
531
594
  #
@@ -551,6 +614,12 @@ module Fastlane
551
614
  return path
552
615
  end
553
616
 
617
+ def self.expand_path_with_substitutions_with_versions(version_code, version_name, path)
618
+ path.gsub!(/\{version_code\}/, version_code.to_s) if version_code
619
+ path.gsub!(/\{version_name\}/, version_name) if version_name
620
+ return path
621
+ end
622
+
554
623
  def self.description
555
624
  "Generates a plist file and uploads all to AWS S3"
556
625
  end
@@ -616,10 +685,28 @@ module Fastlane
616
685
  is_string: false),
617
686
  FastlaneCore::ConfigItem.new(key: :html_in_folder,
618
687
  env_name: "",
619
- description: "move the uploaded html file into the version folder",
688
+ description: "upload the html file into the version folder",
620
689
  optional: true,
621
690
  default_value: false,
622
691
  is_string: false),
692
+ FastlaneCore::ConfigItem.new(key: :html_in_root,
693
+ env_name: "",
694
+ description: "upload the html file into the 'root' folder",
695
+ optional: true,
696
+ default_value: true,
697
+ is_string: false),
698
+ FastlaneCore::ConfigItem.new(key: :version_in_folder,
699
+ env_name: "",
700
+ description: "upload the version file into the version folder",
701
+ optional: true,
702
+ default_value: false,
703
+ is_string: false),
704
+ FastlaneCore::ConfigItem.new(key: :version_in_root,
705
+ env_name: "",
706
+ description: "upload the html file into the 'root' folder",
707
+ optional: true,
708
+ default_value: true,
709
+ is_string: false),
623
710
  FastlaneCore::ConfigItem.new(key: :version_template_path,
624
711
  env_name: "",
625
712
  description: "version erb template path",
@@ -685,6 +772,16 @@ module Fastlane
685
772
  description: "The base endpoint for your S3 bucket",
686
773
  optional: true,
687
774
  default_value: nil),
775
+ FastlaneCore::ConfigItem.new(key: :download_endpoint,
776
+ env_name: "S3_DOWNLOAD_ENDPOINT",
777
+ description: "The endpoint for downloads from your S3 bucket",
778
+ optional: true,
779
+ default_value: nil),
780
+ FastlaneCore::ConfigItem.new(key: :download_endpoint_replacement_regex,
781
+ env_name: "S3_DOWNLOAD_ENDPOINT_REPLACEMENT_REGEX",
782
+ description: "A regex used to determine which part of the S3 URL to replace with S3_DOWNLOAD_ENDPOINT",
783
+ optional: true,
784
+ default_value: '^https?://[^/]*'),
688
785
  FastlaneCore::ConfigItem.new(key: :override_file_name,
689
786
  env_name: "",
690
787
  description: "Optional override ipa/apk uploaded file name",
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module AwsS3
3
- VERSION = "1.8.0"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-aws_s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 2.0.0
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: 2020-04-27 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-s3
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.144.0
111
- description:
111
+ description:
112
112
  email: josh@rokkincat.com
113
113
  executables: []
114
114
  extensions: []
@@ -129,7 +129,7 @@ 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,8 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  requirements: []
147
- rubygems_version: 3.0.6
148
- signing_key:
147
+ rubygems_version: 3.0.3
148
+ signing_key:
149
149
  specification_version: 4
150
150
  summary: Upload IPA and APK to S3
151
151
  test_files: []