fastlane 2.213.0 → 2.215.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +94 -94
  3. data/deliver/lib/deliver/app_screenshot.rb +13 -10
  4. data/deliver/lib/deliver/submit_for_review.rb +13 -0
  5. data/deliver/lib/deliver/upload_price_tier.rb +1 -1
  6. data/fastlane/lib/assets/custom_action_template.rb +18 -12
  7. data/fastlane/lib/fastlane/actions/docs/build_app.md +2 -2
  8. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +8 -8
  9. data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +3 -3
  10. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +2 -2
  11. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +6 -4
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  13. data/fastlane/lib/fastlane/actions/download_universal_apk_from_google_play.rb +124 -0
  14. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +4 -0
  15. data/fastlane/lib/fastlane/helper/xcodes_helper.rb +0 -3
  16. data/fastlane/lib/fastlane/new_action.rb +1 -1
  17. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +3 -3
  18. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -2
  19. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  20. data/fastlane/lib/fastlane/plugins/template/lib/fastlane/plugin/%plugin_name%/helper/%plugin_name%_helper.rb.erb +1 -1
  21. data/fastlane/lib/fastlane/version.rb +2 -2
  22. data/fastlane/swift/Deliverfile.swift +1 -1
  23. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  24. data/fastlane/swift/Fastlane.swift +79 -4
  25. data/fastlane/swift/Gymfile.swift +1 -1
  26. data/fastlane/swift/GymfileProtocol.swift +1 -1
  27. data/fastlane/swift/Matchfile.swift +1 -1
  28. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  29. data/fastlane/swift/Precheckfile.swift +1 -1
  30. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  31. data/fastlane/swift/Scanfile.swift +1 -1
  32. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  33. data/fastlane/swift/Screengrabfile.swift +1 -1
  34. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  35. data/fastlane/swift/Snapshotfile.swift +1 -1
  36. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  37. data/fastlane/swift/formatting/Brewfile.lock.json +28 -18
  38. data/fastlane_core/lib/fastlane_core/cert_checker.rb +1 -1
  39. data/frameit/lib/frameit/device_types.rb +1 -1
  40. data/gym/lib/gym/generators/build_command_generator.rb +1 -1
  41. data/match/lib/match/change_password.rb +3 -9
  42. data/match/lib/match/commands_generator.rb +3 -6
  43. data/match/lib/match/encryption.rb +1 -1
  44. data/match/lib/match/importer.rb +3 -31
  45. data/match/lib/match/migrate.rb +6 -2
  46. data/match/lib/match/nuke.rb +3 -25
  47. data/match/lib/match/options.rb +7 -0
  48. data/match/lib/match/runner.rb +5 -32
  49. data/match/lib/match/setup.rb +1 -1
  50. data/match/lib/match/storage/gitlab/client.rb +40 -14
  51. data/match/lib/match/storage/gitlab_secure_files.rb +7 -2
  52. data/match/lib/match/storage/s3_storage.rb +6 -0
  53. data/match/lib/match/storage.rb +56 -5
  54. data/scan/lib/scan/test_command_generator.rb +1 -1
  55. data/snapshot/lib/snapshot/test_command_generator.rb +1 -1
  56. data/spaceship/lib/spaceship/client.rb +0 -1
  57. data/spaceship/lib/spaceship/connect_api/api_client.rb +19 -1
  58. data/spaceship/lib/spaceship/connect_api/models/app.rb +3 -2
  59. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +15 -9
  60. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
  61. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -0
  62. data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +3 -1
  63. data/spaceship/lib/spaceship/connect_api/models/user.rb +38 -0
  64. data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +5 -15
  65. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +8 -2
  66. data/spaceship/lib/spaceship/connect_api/users/users.rb +34 -0
  67. data/supply/lib/supply/client.rb +72 -20
  68. data/supply/lib/supply/generated_universal_apk.rb +24 -0
  69. data/supply/lib/supply/image_listing.rb +15 -0
  70. data/supply/lib/supply/options.rb +5 -0
  71. data/supply/lib/supply/setup.rb +1 -1
  72. data/supply/lib/supply/uploader.rb +32 -5
  73. data/supply/lib/supply.rb +2 -0
  74. metadata +285 -274
@@ -0,0 +1,124 @@
1
+ require 'supply'
2
+ require 'supply/options'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class DownloadUniversalApkFromGooglePlayAction < Action
7
+ def self.run(params)
8
+ package_name = params[:package_name]
9
+ version_code = params[:version_code]
10
+ destination = params[:destination]
11
+ cert_sha = params[:certificate_sha256_hash]
12
+
13
+ client = Supply::Client.make_from_config(params: params)
14
+
15
+ UI.message("Fetching the list of generated APKs from the Google API...")
16
+ all_universal_apks = client.list_generated_universal_apks(package_name: package_name, version_code: version_code)
17
+ matching_apks = all_universal_apks.select { |apk| cert_sha.nil? || apk.certificate_sha256_hash&.casecmp?(cert_sha) }
18
+
19
+ all_certs_printable_list = all_universal_apks.map { |apk| " - #{apk.certificate_sha256_hash}" }
20
+ if matching_apks.count > 1
21
+ message = <<~ERROR
22
+ We found multiple Generated Universal APK, with the following `certificate_sha256_hash`:
23
+ #{all_certs_printable_list.join("\n")}
24
+
25
+ Use the `certificate_sha256_hash` parameter to specify which one to download.
26
+ ERROR
27
+ UI.user_error!(message)
28
+ elsif matching_apks.empty?
29
+ # NOTE: if no APK was found at all to begin with, the client would already have raised a user_error!('Google Api Error ...')
30
+ message = <<~ERROR
31
+ None of the Universal APK(s) found for this version code matched the `certificate_sha256_hash` of `#{cert_sha}`.
32
+
33
+ We found #{all_universal_apks.count} Generated Universal APK(s), but with a different `certificate_sha256_hash`:
34
+ #{all_certs_printable_list.join("\n")}
35
+ ERROR
36
+ UI.user_error!(message)
37
+ end
38
+
39
+ UI.message("Downloading Generated Universal APK to `#{destination}`...")
40
+ FileUtils.mkdir_p(File.dirname(destination))
41
+ client.download_generated_universal_apk(generated_universal_apk: matching_apks.first, destination: destination)
42
+
43
+ UI.success("Universal APK successfully downloaded to `#{destination}`.")
44
+ destination
45
+ end
46
+
47
+ #####################################################
48
+ # @!group Documentation
49
+ #####################################################
50
+
51
+ def self.description
52
+ "Download the Universal APK of a given version code from the Google Play Console"
53
+ end
54
+
55
+ def self.details
56
+ <<~DETAILS
57
+ Download the universal APK of a given version code from the Google Play Console.
58
+
59
+ This uses _fastlane_ `supply` (and the `AndroidPublisher` Google API) to download the Universal APK
60
+ generated by Google after you uploaded an `.aab` bundle to the Play Console.
61
+
62
+ See https://developers.google.com/android-publisher/api-ref/rest/v3/generatedapks/list
63
+ DETAILS
64
+ end
65
+
66
+ def self.available_options
67
+ # Only borrow _some_ of the ConfigItems from https://github.com/fastlane/fastlane/blob/master/supply/lib/supply/options.rb
68
+ # So we don't have to duplicate the name, env_var, type, description, and verify_block of those here.
69
+ supply_borrowed_options = Supply::Options.available_options.select do |o|
70
+ %i[package_name version_code json_key json_key_data root_url timeout].include?(o.key)
71
+ end
72
+ # Adjust the description for the :version_code ConfigItem for our action's use case
73
+ supply_borrowed_options.find { |o| o.key == :version_code }&.description = "The versionCode for which to download the generated APK"
74
+
75
+ [
76
+ *supply_borrowed_options,
77
+
78
+ # The remaining ConfigItems below are specific to this action
79
+ FastlaneCore::ConfigItem.new(key: :destination,
80
+ env_name: 'DOWNLOAD_UNIVERSAL_APK_DESTINATION',
81
+ optional: false,
82
+ type: String,
83
+ description: "The path on disk where to download the Generated Universal APK",
84
+ verify_block: proc do |value|
85
+ UI.user_error!("The 'destination' must be a file path with the `.apk` file extension") unless File.extname(value) == '.apk'
86
+ end),
87
+ FastlaneCore::ConfigItem.new(key: :certificate_sha256_hash,
88
+ env_name: 'DOWNLOAD_UNIVERSAL_APK_CERTIFICATE_SHA256_HASH',
89
+ optional: true,
90
+ type: String,
91
+ description: "The SHA256 hash of the signing key for which to download the Universal, Code-Signed APK for. " \
92
+ + "Use 'xx:xx:xx:…' format (32 hex bytes separated by colons), as printed by `keytool -list -keystore <keystorefile>`. " \
93
+ + "Only useful to provide if you have multiple signing keys configured on GPC, to specify which generated APK to download",
94
+ verify_block: proc do |value|
95
+ bytes = value.split(':')
96
+ next if bytes.length == 32 && bytes.all? { |byte| /^[0-9a-fA-F]{2}$/.match?(byte) }
97
+
98
+ UI.user_error!("When provided, the certificate sha256 must be in the 'xx:xx:xx:…:xx' (32 hex bytes separated by colons) format")
99
+ end)
100
+ ]
101
+ end
102
+
103
+ def self.output
104
+ # Define the shared values you are going to provide
105
+ end
106
+
107
+ def self.return_value
108
+ 'The path to the downloaded Universal APK. The action will raise an exception if it failed to find or download the APK in Google Play'
109
+ end
110
+
111
+ def self.authors
112
+ ['Automattic']
113
+ end
114
+
115
+ def self.category
116
+ :production
117
+ end
118
+
119
+ def self.is_supported?(platform)
120
+ platform == :android
121
+ end
122
+ end
123
+ end
124
+ end
@@ -119,6 +119,10 @@ module Fastlane
119
119
  def self.is_supported?(platform)
120
120
  [:ios, :mac].include?(platform)
121
121
  end
122
+
123
+ def self.deprecated_notes
124
+ "The xcode-install gem, which this action depends on, has been sunset. Please migrate to [xcodes](https://docs.fastlane.tools/actions/xcodes). You can find a migration guide here: [xcpretty/xcode-install/MIGRATION.md](https://github.com/xcpretty/xcode-install/blob/master/MIGRATION.md)"
125
+ end
122
126
  end
123
127
  end
124
128
  end
@@ -18,9 +18,6 @@ module Fastlane
18
18
  module Verify
19
19
  def self.requirement(req)
20
20
  UI.user_error!("Version must be specified") if req.nil? || req.to_s.strip.size == 0
21
- Gem::Requirement.new(req.to_s)
22
- rescue Gem::Requirement::BadRequirementError
23
- UI.user_error!("The requirement '#{req}' is not a valid RubyGems style requirement")
24
21
  end
25
22
  end
26
23
  end
@@ -7,7 +7,7 @@ module Fastlane
7
7
  end
8
8
 
9
9
  def self.fetch_name
10
- puts("Must be lower case, and use a '_' between words. Do not use '.'".green)
10
+ puts("Must be lowercase, and use a '_' between words. Do not use '.'".green)
11
11
  puts("examples: 'testflight', 'upload_to_s3'".green)
12
12
  name = UI.input("Name of your action: ")
13
13
  until name_valid?(name)
@@ -45,7 +45,7 @@ module Fastlane
45
45
  @ui.message("\nThe gem name '#{gem_name}' is already taken on RubyGems, please choose a different plugin name.")
46
46
  else
47
47
  # That's a naming error
48
- @ui.message("\nPlugin names can only contain lower case letters, numbers, and underscores")
48
+ @ui.message("\nPlugin names can only contain lowercase letters, numbers, and underscores")
49
49
  @ui.message("and should not contain 'fastlane' or 'plugin'.")
50
50
  end
51
51
  end
@@ -54,7 +54,7 @@ module Fastlane
54
54
  end
55
55
 
56
56
  def plugin_name_valid?(name)
57
- # Only lower case letters, numbers and underscores allowed
57
+ # Only lowercase letters, numbers and underscores allowed
58
58
  /^[a-z0-9_]+$/ =~ name &&
59
59
  # Does not contain the words 'fastlane' or 'plugin' since those will become
60
60
  # part of the gem name
@@ -79,7 +79,7 @@ module Fastlane
79
79
  name = name.to_s.downcase
80
80
  fixes = {
81
81
  /[\- ]/ => '_', # dashes and spaces become underscores
82
- /[^a-z0-9_]/ => '', # anything other than lower case letters, numbers and underscores is removed
82
+ /[^a-z0-9_]/ => '', # anything other than lowercase letters, numbers and underscores is removed
83
83
  /fastlane[_]?/ => '', # 'fastlane' or 'fastlane_' is removed
84
84
  /plugin[_]?/ => '' # 'plugin' or 'plugin_' is removed
85
85
  }
@@ -13,9 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.license = "MIT"
14
14
 
15
15
  spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
16
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
16
  spec.require_paths = ['lib']
18
-
17
+ spec.metadata['rubygems_mfa_required'] = 'true'
19
18
  spec.required_ruby_version = '>= 2.6'
20
19
 
21
20
  # Don't add a dependency to fastlane or fastlane_re
@@ -124,6 +124,8 @@ Style/GuardClause:
124
124
  Enabled: false
125
125
  Style/StringLiterals:
126
126
  Enabled: false
127
+ Style/QuotedSymbols:
128
+ Enabled: false
127
129
  Style/ConditionalAssignment:
128
130
  Enabled: false
129
131
  Style/RedundantSelf:
@@ -164,7 +166,7 @@ Style/CollectionMethods:
164
166
  Enabled: false
165
167
  Style/MethodCallWithArgsParentheses:
166
168
  Enabled: true
167
- IgnoredMethods:
169
+ AllowedMethods:
168
170
  - require
169
171
  - require_relative
170
172
  - fastlane_require
@@ -186,3 +188,5 @@ Style/MethodCallWithArgsParentheses:
186
188
  - context
187
189
  - before
188
190
  - after
191
+ Gemspec/DevelopmentDependencies:
192
+ Enabled: false
@@ -1,7 +1,7 @@
1
1
  require 'fastlane_core/ui/ui'
2
2
 
3
3
  module Fastlane
4
- UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
4
+ UI = FastlaneCore::UI unless Fastlane.const_defined?(:UI)
5
5
 
6
6
  module Helper
7
7
  class <%= plugin_name.fastlane_class %>Helper
@@ -1,6 +1,6 @@
1
1
  module Fastlane
2
- VERSION = '2.213.0'.freeze
2
+ VERSION = '2.215.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
- RUBOCOP_REQUIREMENT = '1.12.1'.freeze
5
+ RUBOCOP_REQUIREMENT = '1.50.2'.freeze
6
6
  end
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -264,4 +264,4 @@ public extension DeliverfileProtocol {
264
264
 
265
265
  // Please don't remove the lines below
266
266
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.116]
267
+ // FastlaneRunnerAPIVersion [0.9.118]
@@ -4204,6 +4204,61 @@ public func downloadFromPlayStore(packageName: String,
4204
4204
  _ = runner.executeCommand(command)
4205
4205
  }
4206
4206
 
4207
+ /**
4208
+ Download the Universal APK of a given version code from the Google Play Console
4209
+
4210
+ - parameters:
4211
+ - packageName: The package name of the application to use
4212
+ - versionCode: The versionCode for which to download the generated APK
4213
+ - jsonKey: The path to a file containing service account JSON, used to authenticate with Google
4214
+ - jsonKeyData: The raw service account JSON data used to authenticate with Google
4215
+ - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
4216
+ - timeout: Timeout for read, open, and send (in seconds)
4217
+ - destination: The path on disk where to download the Generated Universal APK
4218
+ - certificateSha256Hash: The SHA256 hash of the signing key for which to download the Universal, Code-Signed APK for. Use 'xx:xx:xx:…' format (32 hex bytes separated by colons), as printed by `keytool -list -keystore <keystorefile>`. Only useful to provide if you have multiple signing keys configured on GPC, to specify which generated APK to download
4219
+
4220
+ - returns: The path to the downloaded Universal APK. The action will raise an exception if it failed to find or download the APK in Google Play
4221
+
4222
+ Download the universal APK of a given version code from the Google Play Console.
4223
+
4224
+ This uses _fastlane_ `supply` (and the `AndroidPublisher` Google API) to download the Universal APK
4225
+ generated by Google after you uploaded an `.aab` bundle to the Play Console.
4226
+
4227
+ See https://developers.google.com/android-publisher/api-ref/rest/v3/generatedapks/list
4228
+
4229
+ */
4230
+ public func downloadUniversalApkFromGooglePlay(packageName: String,
4231
+ versionCode: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
4232
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4233
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4234
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4235
+ timeout: Int = 300,
4236
+ destination: String,
4237
+ certificateSha256Hash: OptionalConfigValue<String?> = .fastlaneDefault(nil))
4238
+ {
4239
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
4240
+ let versionCodeArg = versionCode.asRubyArgument(name: "version_code", type: nil)
4241
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
4242
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
4243
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
4244
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
4245
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
4246
+ let certificateSha256HashArg = certificateSha256Hash.asRubyArgument(name: "certificate_sha256_hash", type: nil)
4247
+ let array: [RubyCommand.Argument?] = [packageNameArg,
4248
+ versionCodeArg,
4249
+ jsonKeyArg,
4250
+ jsonKeyDataArg,
4251
+ rootUrlArg,
4252
+ timeoutArg,
4253
+ destinationArg,
4254
+ certificateSha256HashArg]
4255
+ let args: [RubyCommand.Argument] = array
4256
+ .filter { $0?.value != nil }
4257
+ .compactMap { $0 }
4258
+ let command = RubyCommand(commandID: "", methodName: "download_universal_apk_from_google_play", className: nil, args: args)
4259
+ _ = runner.executeCommand(command)
4260
+ }
4261
+
4207
4262
  /**
4208
4263
  Creates a zipped dSYM in the project root from the .xcarchive
4209
4264
 
@@ -6679,6 +6734,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
6679
6734
  - s3SecretAccessKey: S3 secret access key
6680
6735
  - s3Bucket: Name of the S3 bucket
6681
6736
  - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
6737
+ - s3SkipEncryption: Skip encryption of all objects uploaded to S3. WARNING: only enable this on S3 buckets with sufficiently restricted permissions and server-side encryption enabled. See https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html
6682
6738
  - gitlabProject: GitLab Project Path (i.e. 'gitlab-org/gitlab')
6683
6739
  - gitlabHost: GitLab Host (i.e. 'https://gitlab.com')
6684
6740
  - keychainName: Keychain the items should be imported to
@@ -6733,6 +6789,7 @@ public func match(type: String = matchfile.type,
6733
6789
  s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3SecretAccessKey),
6734
6790
  s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3Bucket),
6735
6791
  s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3ObjectPrefix),
6792
+ s3SkipEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.s3SkipEncryption),
6736
6793
  gitlabProject: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitlabProject),
6737
6794
  gitlabHost: String = matchfile.gitlabHost,
6738
6795
  keychainName: String = matchfile.keychainName,
@@ -6785,6 +6842,7 @@ public func match(type: String = matchfile.type,
6785
6842
  let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
6786
6843
  let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
6787
6844
  let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
6845
+ let s3SkipEncryptionArg = s3SkipEncryption.asRubyArgument(name: "s3_skip_encryption", type: nil)
6788
6846
  let gitlabProjectArg = gitlabProject.asRubyArgument(name: "gitlab_project", type: nil)
6789
6847
  let gitlabHostArg = RubyCommand.Argument(name: "gitlab_host", value: gitlabHost, type: nil)
6790
6848
  let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
@@ -6836,6 +6894,7 @@ public func match(type: String = matchfile.type,
6836
6894
  s3SecretAccessKeyArg,
6837
6895
  s3BucketArg,
6838
6896
  s3ObjectPrefixArg,
6897
+ s3SkipEncryptionArg,
6839
6898
  gitlabProjectArg,
6840
6899
  gitlabHostArg,
6841
6900
  keychainNameArg,
@@ -6898,6 +6957,7 @@ public func match(type: String = matchfile.type,
6898
6957
  - s3SecretAccessKey: S3 secret access key
6899
6958
  - s3Bucket: Name of the S3 bucket
6900
6959
  - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
6960
+ - s3SkipEncryption: Skip encryption of all objects uploaded to S3. WARNING: only enable this on S3 buckets with sufficiently restricted permissions and server-side encryption enabled. See https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html
6901
6961
  - gitlabProject: GitLab Project Path (i.e. 'gitlab-org/gitlab')
6902
6962
  - gitlabHost: GitLab Host (i.e. 'https://gitlab.com')
6903
6963
  - keychainName: Keychain the items should be imported to
@@ -6956,6 +7016,7 @@ public func matchNuke(type: String = "development",
6956
7016
  s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
6957
7017
  s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(nil),
6958
7018
  s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
7019
+ s3SkipEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6959
7020
  gitlabProject: OptionalConfigValue<String?> = .fastlaneDefault(nil),
6960
7021
  gitlabHost: String = "https://gitlab.com",
6961
7022
  keychainName: String = "login.keychain",
@@ -7008,6 +7069,7 @@ public func matchNuke(type: String = "development",
7008
7069
  let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
7009
7070
  let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
7010
7071
  let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
7072
+ let s3SkipEncryptionArg = s3SkipEncryption.asRubyArgument(name: "s3_skip_encryption", type: nil)
7011
7073
  let gitlabProjectArg = gitlabProject.asRubyArgument(name: "gitlab_project", type: nil)
7012
7074
  let gitlabHostArg = RubyCommand.Argument(name: "gitlab_host", value: gitlabHost, type: nil)
7013
7075
  let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
@@ -7059,6 +7121,7 @@ public func matchNuke(type: String = "development",
7059
7121
  s3SecretAccessKeyArg,
7060
7122
  s3BucketArg,
7061
7123
  s3ObjectPrefixArg,
7124
+ s3SkipEncryptionArg,
7062
7125
  gitlabProjectArg,
7063
7126
  gitlabHostArg,
7064
7127
  keychainNameArg,
@@ -10868,7 +10931,7 @@ public func ssh(username: String,
10868
10931
  - parameters:
10869
10932
  - packageName: The package name of the application to use
10870
10933
  - versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml
10871
- - versionCode: Version code (used when updating rollout or promoting specific versions)
10934
+ - versionCode: The versionCode for which to download the generated APK
10872
10935
  - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
10873
10936
  - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
10874
10937
  - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
@@ -10887,6 +10950,7 @@ public func ssh(username: String,
10887
10950
  - skipUploadChangelogs: Whether to skip uploading changelogs
10888
10951
  - skipUploadImages: Whether to skip uploading images, screenshots not included
10889
10952
  - skipUploadScreenshots: Whether to skip uploading SCREENSHOTS
10953
+ - syncImageUpload: Whether to use sha256 comparison to skip upload of images and screenshots that are already in Play Store
10890
10954
  - trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal
10891
10955
  - trackPromoteReleaseStatus: Promoted track release status (used when promoting a track) - valid values are completed, draft, halted, inProgress
10892
10956
  - validateOnly: Only validate changes with Google Play rather than actually publish
@@ -10929,6 +10993,7 @@ public func supply(packageName: String,
10929
10993
  skipUploadChangelogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10930
10994
  skipUploadImages: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10931
10995
  skipUploadScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10996
+ syncImageUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
10932
10997
  trackPromoteTo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
10933
10998
  trackPromoteReleaseStatus: String = "completed",
10934
10999
  validateOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -10969,6 +11034,7 @@ public func supply(packageName: String,
10969
11034
  let skipUploadChangelogsArg = skipUploadChangelogs.asRubyArgument(name: "skip_upload_changelogs", type: nil)
10970
11035
  let skipUploadImagesArg = skipUploadImages.asRubyArgument(name: "skip_upload_images", type: nil)
10971
11036
  let skipUploadScreenshotsArg = skipUploadScreenshots.asRubyArgument(name: "skip_upload_screenshots", type: nil)
11037
+ let syncImageUploadArg = syncImageUpload.asRubyArgument(name: "sync_image_upload", type: nil)
10972
11038
  let trackPromoteToArg = trackPromoteTo.asRubyArgument(name: "track_promote_to", type: nil)
10973
11039
  let trackPromoteReleaseStatusArg = RubyCommand.Argument(name: "track_promote_release_status", value: trackPromoteReleaseStatus, type: nil)
10974
11040
  let validateOnlyArg = validateOnly.asRubyArgument(name: "validate_only", type: nil)
@@ -11008,6 +11074,7 @@ public func supply(packageName: String,
11008
11074
  skipUploadChangelogsArg,
11009
11075
  skipUploadImagesArg,
11010
11076
  skipUploadScreenshotsArg,
11077
+ syncImageUploadArg,
11011
11078
  trackPromoteToArg,
11012
11079
  trackPromoteReleaseStatusArg,
11013
11080
  validateOnlyArg,
@@ -11136,6 +11203,7 @@ public func swiftlint(mode: String = "lint",
11136
11203
  - s3SecretAccessKey: S3 secret access key
11137
11204
  - s3Bucket: Name of the S3 bucket
11138
11205
  - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
11206
+ - s3SkipEncryption: Skip encryption of all objects uploaded to S3. WARNING: only enable this on S3 buckets with sufficiently restricted permissions and server-side encryption enabled. See https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html
11139
11207
  - gitlabProject: GitLab Project Path (i.e. 'gitlab-org/gitlab')
11140
11208
  - gitlabHost: GitLab Host (i.e. 'https://gitlab.com')
11141
11209
  - keychainName: Keychain the items should be imported to
@@ -11190,6 +11258,7 @@ public func syncCodeSigning(type: String = "development",
11190
11258
  s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11191
11259
  s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11192
11260
  s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11261
+ s3SkipEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11193
11262
  gitlabProject: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11194
11263
  gitlabHost: String = "https://gitlab.com",
11195
11264
  keychainName: String = "login.keychain",
@@ -11242,6 +11311,7 @@ public func syncCodeSigning(type: String = "development",
11242
11311
  let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
11243
11312
  let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
11244
11313
  let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
11314
+ let s3SkipEncryptionArg = s3SkipEncryption.asRubyArgument(name: "s3_skip_encryption", type: nil)
11245
11315
  let gitlabProjectArg = gitlabProject.asRubyArgument(name: "gitlab_project", type: nil)
11246
11316
  let gitlabHostArg = RubyCommand.Argument(name: "gitlab_host", value: gitlabHost, type: nil)
11247
11317
  let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
@@ -11293,6 +11363,7 @@ public func syncCodeSigning(type: String = "development",
11293
11363
  s3SecretAccessKeyArg,
11294
11364
  s3BucketArg,
11295
11365
  s3ObjectPrefixArg,
11366
+ s3SkipEncryptionArg,
11296
11367
  gitlabProjectArg,
11297
11368
  gitlabHostArg,
11298
11369
  keychainNameArg,
@@ -12595,7 +12666,7 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12595
12666
  - parameters:
12596
12667
  - packageName: The package name of the application to use
12597
12668
  - versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml
12598
- - versionCode: Version code (used when updating rollout or promoting specific versions)
12669
+ - versionCode: The versionCode for which to download the generated APK
12599
12670
  - releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
12600
12671
  - track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
12601
12672
  - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
@@ -12614,6 +12685,7 @@ public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlan
12614
12685
  - skipUploadChangelogs: Whether to skip uploading changelogs
12615
12686
  - skipUploadImages: Whether to skip uploading images, screenshots not included
12616
12687
  - skipUploadScreenshots: Whether to skip uploading SCREENSHOTS
12688
+ - syncImageUpload: Whether to use sha256 comparison to skip upload of images and screenshots that are already in Play Store
12617
12689
  - trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal
12618
12690
  - trackPromoteReleaseStatus: Promoted track release status (used when promoting a track) - valid values are completed, draft, halted, inProgress
12619
12691
  - validateOnly: Only validate changes with Google Play rather than actually publish
@@ -12656,6 +12728,7 @@ public func uploadToPlayStore(packageName: String,
12656
12728
  skipUploadChangelogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12657
12729
  skipUploadImages: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12658
12730
  skipUploadScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12731
+ syncImageUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12659
12732
  trackPromoteTo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
12660
12733
  trackPromoteReleaseStatus: String = "completed",
12661
12734
  validateOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -12696,6 +12769,7 @@ public func uploadToPlayStore(packageName: String,
12696
12769
  let skipUploadChangelogsArg = skipUploadChangelogs.asRubyArgument(name: "skip_upload_changelogs", type: nil)
12697
12770
  let skipUploadImagesArg = skipUploadImages.asRubyArgument(name: "skip_upload_images", type: nil)
12698
12771
  let skipUploadScreenshotsArg = skipUploadScreenshots.asRubyArgument(name: "skip_upload_screenshots", type: nil)
12772
+ let syncImageUploadArg = syncImageUpload.asRubyArgument(name: "sync_image_upload", type: nil)
12699
12773
  let trackPromoteToArg = trackPromoteTo.asRubyArgument(name: "track_promote_to", type: nil)
12700
12774
  let trackPromoteReleaseStatusArg = RubyCommand.Argument(name: "track_promote_release_status", value: trackPromoteReleaseStatus, type: nil)
12701
12775
  let validateOnlyArg = validateOnly.asRubyArgument(name: "validate_only", type: nil)
@@ -12735,6 +12809,7 @@ public func uploadToPlayStore(packageName: String,
12735
12809
  skipUploadChangelogsArg,
12736
12810
  skipUploadImagesArg,
12737
12811
  skipUploadScreenshotsArg,
12812
+ syncImageUploadArg,
12738
12813
  trackPromoteToArg,
12739
12814
  trackPromoteReleaseStatusArg,
12740
12815
  validateOnlyArg,
@@ -13394,7 +13469,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
13394
13469
  coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13395
13470
  coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13396
13471
  xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
13397
- ideFoundationPath: String = "/Applications/Xcode-14.1.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13472
+ ideFoundationPath: String = "/Applications/Xcode-14.3.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
13398
13473
  legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
13399
13474
  {
13400
13475
  let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
@@ -13597,4 +13672,4 @@ public let snapshotfile: Snapshotfile = .init()
13597
13672
 
13598
13673
  // Please don't remove the lines below
13599
13674
  // They are used to detect outdated files
13600
- // FastlaneRunnerAPIVersion [0.9.169]
13675
+ // FastlaneRunnerAPIVersion [0.9.171]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -208,4 +208,4 @@ public extension GymfileProtocol {
208
208
 
209
209
  // Please don't remove the lines below
210
210
  // They are used to detect outdated files
211
- // FastlaneRunnerAPIVersion [0.9.119]
211
+ // FastlaneRunnerAPIVersion [0.9.121]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -92,6 +92,9 @@ public protocol MatchfileProtocol: AnyObject {
92
92
  /// Prefix to be used on all objects uploaded to S3
93
93
  var s3ObjectPrefix: String? { get }
94
94
 
95
+ /// Skip encryption of all objects uploaded to S3. WARNING: only enable this on S3 buckets with sufficiently restricted permissions and server-side encryption enabled. See https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html
96
+ var s3SkipEncryption: Bool { get }
97
+
95
98
  /// GitLab Project Path (i.e. 'gitlab-org/gitlab')
96
99
  var gitlabProject: String? { get }
97
100
 
@@ -187,6 +190,7 @@ public extension MatchfileProtocol {
187
190
  var s3SecretAccessKey: String? { return nil }
188
191
  var s3Bucket: String? { return nil }
189
192
  var s3ObjectPrefix: String? { return nil }
193
+ var s3SkipEncryption: Bool { return false }
190
194
  var gitlabProject: String? { return nil }
191
195
  var gitlabHost: String { return "https://gitlab.com" }
192
196
  var keychainName: String { return "login.keychain" }
@@ -212,4 +216,4 @@ public extension MatchfileProtocol {
212
216
 
213
217
  // Please don't remove the lines below
214
218
  // They are used to detect outdated files
215
- // FastlaneRunnerAPIVersion [0.9.113]
219
+ // FastlaneRunnerAPIVersion [0.9.115]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.112]
55
+ // FastlaneRunnerAPIVersion [0.9.114]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -320,4 +320,4 @@ public extension ScanfileProtocol {
320
320
 
321
321
  // Please don't remove the lines below
322
322
  // They are used to detect outdated files
323
- // FastlaneRunnerAPIVersion [0.9.124]
323
+ // FastlaneRunnerAPIVersion [0.9.126]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.114]
99
+ // FastlaneRunnerAPIVersion [0.9.116]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.213.0
20
+ // Generated with fastlane 2.215.0
@@ -204,4 +204,4 @@ public extension SnapshotfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.108]
207
+ // FastlaneRunnerAPIVersion [0.9.110]