fastlane-plugin-aws_s3 1.1.1 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5fcc69803ced2ff28803e66247d27c4da02eae9a
4
- data.tar.gz: 10a950c014047044367c46fb6fe93f1c15a14eb5
3
+ metadata.gz: a63c90d33759731e791a4ea1896a666b157a6fc6
4
+ data.tar.gz: 47c38a853a9af3e88d3fb5ae30f167a49b7d1a01
5
5
  SHA512:
6
- metadata.gz: 37bae18ce15c6e3d8aa3a40c278479315847ebd0f367728b943fd780ada7c02bc5976dbd0828d15fadd8a0e0dce598be407b0cbd6c37ac8f0797735584f99269
7
- data.tar.gz: b2047e37eb9818efa09c7e627e6e7fdb474e54640f80f801b27963b691719d88043adf5eaac4b92ecfaf6a35336de3af85441b3032b84eb67b257a10872bd792
6
+ metadata.gz: 9945bedf3f4fa8a7c905fddfdd42f450d2deaec314eeaeef885fa861136b6ef94ff5bd6c7ccd05afb23c14ce9b01b4f20941b2c43df89f88bfd86ba57303cc58
7
+ data.tar.gz: 99462a92926e3e0b167713541560c0b4530d9d1aa62fa283eb32854684faf3c17934812164191d1067e3a5c54fda28d791e921cbeb13efccec1df765d08957f9
@@ -4,6 +4,7 @@ include ERB::Util
4
4
  require 'ostruct'
5
5
  require 'cgi'
6
6
  require 'mime-types'
7
+ require 'pathname'
7
8
 
8
9
  module Fastlane
9
10
  module Actions
@@ -15,6 +16,9 @@ module Fastlane
15
16
  S3_HTML_OUTPUT_PATH ||= :S3_HTML_OUTPUT_PATH
16
17
  S3_VERSION_OUTPUT_PATH ||= :S3_VERSION_OUTPUT_PATH
17
18
  S3_SOURCE_OUTPUT_PATH ||= :S3_SOURCE_OUTPUT_PATH
19
+ S3_XCARCHIVE_OUTPUT_PATH ||= :S3_XCARCHIVE_OUTPUT_PATH
20
+ S3_FILES_OUTPUT_PATHS ||= :S3_FILES_OUTPUT_PATHS
21
+ S3_FOLDER_OUTPUT_PATH ||= :S3_FOLDER_OUTPUT_PATH
18
22
  end
19
23
 
20
24
  class AwsS3Action < Action
@@ -23,6 +27,7 @@ module Fastlane
23
27
  params = {}
24
28
  params[:apk] = config[:apk]
25
29
  params[:ipa] = config[:ipa]
30
+ params[:xcarchive] = config[:xcarchive]
26
31
  params[:dsym] = config[:dsym]
27
32
  params[:access_key] = config[:access_key]
28
33
  params[:secret_access_key] = config[:secret_access_key]
@@ -45,7 +50,10 @@ module Fastlane
45
50
  params[:html_in_folder] = config[:html_in_folder]
46
51
  params[:version_template_path] = config[:version_template_path]
47
52
  params[:version_file_name] = config[:version_file_name]
53
+ params[:version_template_params] = config[:version_template_params]
48
54
  params[:override_file_name] = config[:override_file_name]
55
+ params[:files] = config[:files]
56
+ params[:folder] = config[:folder]
49
57
 
50
58
  # Pulling parameters for other uses
51
59
  s3_region = params[:region]
@@ -56,6 +64,9 @@ module Fastlane
56
64
  s3_endpoint = params[:endpoint]
57
65
  apk_file = params[:apk]
58
66
  ipa_file = params[:ipa]
67
+ xcarchive_file = params[:xcarchive]
68
+ files = params[:files]
69
+ folder = params[:folder]
59
70
  dsym_file = params[:dsym]
60
71
  s3_path = params[:path]
61
72
  acl = params[:acl].to_sym
@@ -66,7 +77,7 @@ module Fastlane
66
77
  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
67
78
  end
68
79
  UI.user_error!("No S3 bucket given, pass using `bucket: 'bucket'`") unless s3_bucket.to_s.length > 0
69
- UI.user_error!("No IPA or APK file path given, pass using `ipa: 'ipa path'` or `apk: 'apk path'`") if ipa_file.to_s.length == 0 && apk_file.to_s.length == 0
80
+ 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
70
81
  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
71
82
 
72
83
  require 'aws-sdk'
@@ -76,18 +87,21 @@ module Fastlane
76
87
  creds = Aws::Credentials.new(s3_access_key, s3_secret_access_key)
77
88
  end
78
89
  Aws.config.update({
79
- region: s3_region,
80
- credentials: creds
90
+ region: s3_region,
91
+ credentials: creds
81
92
  })
82
93
 
83
94
  s3_client = if s3_endpoint
84
- Aws::S3::Client.new(endpoint: s3_endpoint)
85
- else
86
- Aws::S3::Client.new
87
- end
95
+ Aws::S3::Client.new(endpoint: s3_endpoint)
96
+ else
97
+ Aws::S3::Client.new
98
+ end
88
99
 
89
100
  upload_ipa(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, ipa_file, dsym_file, s3_path, acl, server_side_encryption) if ipa_file.to_s.length > 0
90
101
  upload_apk(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, apk_file, s3_path, acl, server_side_encryption) if apk_file.to_s.length > 0
102
+ upload_xcarchive(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, ipa_file, xcarchive_file, s3_path, acl, server_side_encryption) if xcarchive_file.to_s.length > 0
103
+ upload_files(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, files, s3_path, acl, server_side_encryption) if files.to_a.count > 0
104
+ upload_folder(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, folder, s3_path, acl, server_side_encryption) if folder.to_s.length > 0
91
105
 
92
106
  return true
93
107
  end
@@ -105,6 +119,7 @@ module Fastlane
105
119
  html_file_name = params[:html_file_name]
106
120
  generate_html_in_folder = params[:html_in_folder]
107
121
  version_template_path = params[:version_template_path]
122
+ version_template_params = params[:version_template_params] || {}
108
123
  version_file_name = params[:version_file_name]
109
124
  override_file_name = params[:override_file_name]
110
125
 
@@ -149,7 +164,7 @@ module Fastlane
149
164
  build_num = info['CFBundleVersion']
150
165
  bundle_id = info['CFBundleIdentifier']
151
166
  bundle_version = info['CFBundleShortVersionString']
152
- title = CGI.escapeHTML(info['CFBundleName'])
167
+ title = CGI.escapeHTML(info['CFBundleDisplayName'])
153
168
  full_version = "#{bundle_version}.#{build_num}"
154
169
 
155
170
  # Creating plist and html names
@@ -213,7 +228,7 @@ module Fastlane
213
228
  build_num: build_num,
214
229
  bundle_version: bundle_version,
215
230
  full_version: full_version
216
- })
231
+ }.merge(version_template_params))
217
232
 
218
233
  #####################################
219
234
  #
@@ -242,6 +257,29 @@ module Fastlane
242
257
  UI.success("iOS app can be downloaded at '#{Actions.lane_context[SharedValues::S3_HTML_OUTPUT_PATH]}'") unless skip_html
243
258
  end
244
259
 
260
+ def self.upload_xcarchive(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, ipa_file, archive, s3_path, acl, server_side_encryption)
261
+
262
+ s3_path = "v{CFBundleShortVersionString}_b{CFBundleVersion}/" unless s3_path
263
+
264
+ app_directory = params[:app_directory]
265
+
266
+ url_part = self.expand_path_with_substitutions_from_ipa_plist(ipa_file, s3_path)
267
+
268
+ archive_name = archive.gsub(' ','_')
269
+ archive_zip = "#{archive_name}.zip"
270
+ archive_zip_name = File.basename(archive_zip)
271
+ sh "zip -r #{archive_zip} \'#{archive}\'"
272
+ full_archive_zip_name = "#{url_part}#{archive_zip_name}"
273
+ archive_zip_data = File.open(archive_zip, 'rb')
274
+
275
+ archive_url = self.upload_file(s3_client, s3_bucket, app_directory, full_archive_zip_name, archive_zip_data, acl, server_side_encryption)
276
+
277
+ Actions.lane_context[SharedValues::S3_XCARCHIVE_OUTPUT_PATH] = archive_url
278
+ ENV[SharedValues::S3_XCARCHIVE_OUTPUT_PATH.to_s] = archive_url
279
+
280
+ UI.success("Successfully uploaded archive file to '#{Actions.lane_context[SharedValues::S3_XCARCHIVE_OUTPUT_PATH]}'")
281
+ end
282
+
245
283
  def self.upload_apk(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, apk_file, s3_path, acl, server_side_encryption)
246
284
  version = get_apk_version(apk_file)
247
285
 
@@ -258,6 +296,7 @@ module Fastlane
258
296
  html_file_name = params[:html_file_name]
259
297
  generate_html_in_folder = params[:html_in_folder]
260
298
  version_template_path = params[:version_template_path]
299
+ version_template_params = params[:version_template_params] || {}
261
300
  version_file_name = params[:version_file_name]
262
301
  override_file_name = params[:override_file_name]
263
302
 
@@ -314,7 +353,7 @@ module Fastlane
314
353
  version_code: version_code,
315
354
  version_name: version_name,
316
355
  full_version: "#{version_code}_#{version_name}"
317
- })
356
+ }.merge(version_template_params))
318
357
 
319
358
  #####################################
320
359
  #
@@ -402,6 +441,51 @@ module Fastlane
402
441
  [versionCode, versionName, name]
403
442
  end
404
443
 
444
+ def self.upload_files(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, files, s3_path, acl, server_side_encryption)
445
+
446
+ s3_path = "files" unless s3_path
447
+
448
+ app_directory = params[:app_directory]
449
+ url_part = s3_path
450
+
451
+ Actions.lane_context[SharedValues::S3_FILES_OUTPUT_PATHS] = []
452
+ files.each do |file|
453
+ file_basename = File.basename(file)
454
+ file_data = File.open(file, 'rb')
455
+ file_name = url_part + '/' + file_basename
456
+
457
+ file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption)
458
+
459
+ # Setting action and environment variables
460
+ Actions.lane_context[SharedValues::S3_FILES_OUTPUT_PATHS] << file_url
461
+ end
462
+ end
463
+
464
+ def self.upload_folder(s3_client, params, s3_region, s3_access_key, s3_secret_access_key, s3_bucket, folder, s3_path, acl, server_side_encryption)
465
+
466
+ s3_path = "files" unless s3_path
467
+
468
+ s3_path = s3_path.to_s + '/' + File.basename(folder)
469
+ url_part = s3_path
470
+ app_directory = params[:app_directory]
471
+
472
+ unless File.directory?(folder)
473
+ UI.user_error!("Invalid folder parameter. `#{File.expand_path(folder)} is not a directory!")
474
+ end
475
+
476
+ Dir.glob("#{folder}/**/*") do |file|
477
+ next if File.directory?(file)
478
+ file_data = File.open(file, 'rb')
479
+ file_relative_path_to_folder = Pathname.new(File.expand_path(file)).relative_path_from(Pathname.new(File.expand_path(folder))).to_s
480
+ file_name = url_part + '/' + file_relative_path_to_folder
481
+
482
+ file_url = self.upload_file(s3_client, s3_bucket, app_directory, file_name, file_data, acl, server_side_encryption)
483
+ Actions.lane_context[SharedValues::S3_FOLDER_OUTPUT_PATH] = file_url.gsub('/' + file_relative_path_to_folder, '')
484
+ end
485
+ end
486
+
487
+
488
+
405
489
  def self.upload_file(s3_client, bucket_name, app_directory, file_name, file_data, acl, server_side_encryption)
406
490
 
407
491
  if app_directory
@@ -469,6 +553,11 @@ module Fastlane
469
553
  description: ".ipa file for the build ",
470
554
  optional: true,
471
555
  default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]),
556
+ FastlaneCore::ConfigItem.new(key: :xcarchive,
557
+ env_name: "",
558
+ description: ".xcarchive file for the build ",
559
+ optional: true,
560
+ default_value: Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE]),
472
561
  FastlaneCore::ConfigItem.new(key: :dsym,
473
562
  env_name: "",
474
563
  description: "zipped .dsym package for the build ",
@@ -517,6 +606,11 @@ module Fastlane
517
606
  env_name: "",
518
607
  description: "version erb template path",
519
608
  optional: true),
609
+ FastlaneCore::ConfigItem.new(key: :version_template_params,
610
+ env_name: "",
611
+ description: "additional params for use in the version template",
612
+ optional: true,
613
+ type: Hash),
520
614
  FastlaneCore::ConfigItem.new(key: :version_file_name,
521
615
  env_name: "",
522
616
  description: "uploaded version filename",
@@ -578,17 +672,33 @@ module Fastlane
578
672
  description: "Optional override ipa/apk uploaded file name",
579
673
  optional: true,
580
674
  default_value: nil),
675
+ FastlaneCore::ConfigItem.new(key: :files,
676
+ env_name: "",
677
+ description: "Collection: Allows you to simply upload any files to s3. Ex: ['filename1', filename2]",
678
+ is_string: false,
679
+ optional: true,
680
+ default_value: nil),
681
+ FastlaneCore::ConfigItem.new(key: :folder,
682
+ env_name: "",
683
+ description: "Path to the folder you want to upload",
684
+ is_string: true,
685
+ optional: true,
686
+ default_value: nil),
581
687
  ]
582
688
  end
583
689
 
584
690
  def self.output
585
691
  [
692
+ ['S3_APK_OUTPUT_PATH', 'Direct HTTP link to the uploaded apk file'],
586
693
  ['S3_IPA_OUTPUT_PATH', 'Direct HTTP link to the uploaded ipa file'],
694
+ ['S3_XCARCHIVE_OUTPUT_PATH', 'Direct HTTP link to the uploaded xcarchive file '],
587
695
  ['S3_DSYM_OUTPUT_PATH', 'Direct HTTP link to the uploaded dsym file'],
588
696
  ['S3_PLIST_OUTPUT_PATH', 'Direct HTTP link to the uploaded plist file'],
589
697
  ['S3_HTML_OUTPUT_PATH', 'Direct HTTP link to the uploaded HTML file'],
590
698
  ['S3_VERSION_OUTPUT_PATH', 'Direct HTTP link to the uploaded Version file'],
591
- ['S3_SOURCE_OUTPUT_PATH', 'Direct HTTP link to the uploaded source ']
699
+ ['S3_SOURCE_OUTPUT_PATH', 'Direct HTTP link to the uploaded source '],
700
+ ['S3_FILES_OUTPUT_PATHS', 'Collection of HTTP links to the uploaded files'],
701
+ ['S3_FOLDER_OUTPUT_PATH', 'Direct HTTP link to the uploaded folder']
592
702
  ]
593
703
  end
594
704
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module AwsS3
3
- VERSION = "1.1.1"
3
+ VERSION = "1.4.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.1.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Holtz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2018-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -145,9 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  version: '0'
146
146
  requirements: []
147
147
  rubyforge_project:
148
- rubygems_version: 2.5.2
148
+ rubygems_version: 2.5.2.3
149
149
  signing_key:
150
150
  specification_version: 4
151
151
  summary: Upload IPA and APK to S3
152
152
  test_files: []
153
- has_rdoc: