fastlane 2.135.2 → 2.140.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +64 -64
  3. data/deliver/lib/deliver/submit_for_review.rb +7 -1
  4. data/fastlane/lib/fastlane/action.rb +2 -2
  5. data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
  6. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  7. data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
  8. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/create_pull_request.rb +42 -2
  10. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +38 -4
  11. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
  13. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
  14. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
  15. data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
  16. data/fastlane/lib/fastlane/actions/gradle.rb +54 -3
  17. data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
  18. data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
  19. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
  20. data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
  21. data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
  23. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
  24. data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
  25. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  26. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  27. data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
  28. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  29. data/fastlane/lib/fastlane/commands_generator.rb +1 -1
  30. data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
  31. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  32. data/fastlane/lib/fastlane/runner.rb +23 -18
  33. data/fastlane/lib/fastlane/swift_fastlane_function.rb +9 -0
  34. data/fastlane/lib/fastlane/version.rb +1 -1
  35. data/fastlane/swift/Deliverfile.swift +1 -1
  36. data/fastlane/swift/Fastlane.swift +130 -28
  37. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  38. data/fastlane/swift/Gymfile.swift +1 -1
  39. data/fastlane/swift/Matchfile.swift +1 -1
  40. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  41. data/fastlane/swift/Precheckfile.swift +1 -1
  42. data/fastlane/swift/Scanfile.swift +1 -1
  43. data/fastlane/swift/ScanfileProtocol.swift +13 -1
  44. data/fastlane/swift/Screengrabfile.swift +1 -1
  45. data/fastlane/swift/ScreengrabfileProtocol.swift +14 -2
  46. data/fastlane/swift/Snapshotfile.swift +1 -1
  47. data/fastlane_core/lib/fastlane_core/.build_watcher.rb.swp +0 -0
  48. data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
  49. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
  50. data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
  51. data/frameit/lib/frameit/editor.rb +3 -0
  52. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  53. data/gym/lib/gym/runner.rb +38 -19
  54. data/match/lib/match/options.rb +8 -0
  55. data/match/lib/match/runner.rb +1 -0
  56. data/match/lib/match/storage/git_storage.rb +7 -2
  57. data/pilot/lib/pilot/.manager.rb.swp +0 -0
  58. data/pilot/lib/pilot/build_manager.rb +46 -12
  59. data/pilot/lib/pilot/options.rb +3 -1
  60. data/scan/lib/scan/detect_values.rb +6 -1
  61. data/scan/lib/scan/manager.rb +18 -1
  62. data/scan/lib/scan/options.rb +17 -0
  63. data/scan/lib/scan/runner.rb +6 -0
  64. data/scan/lib/scan/slack_poster.rb +1 -1
  65. data/scan/lib/scan/test_command_generator.rb +1 -1
  66. data/screengrab/lib/screengrab/module.rb +2 -0
  67. data/screengrab/lib/screengrab/options.rb +24 -11
  68. data/screengrab/lib/screengrab/runner.rb +79 -42
  69. data/spaceship/lib/spaceship/client.rb +9 -4
  70. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  71. data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
  72. data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
  73. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +71 -0
  74. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  75. data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
  76. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
  77. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  78. data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
  79. data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
  80. data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
  81. data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
  82. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
  83. data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -7
  84. data/supply/lib/supply/client.rb +27 -0
  85. data/supply/lib/supply/options.rb +8 -2
  86. data/supply/lib/supply/uploader.rb +82 -33
  87. metadata +49 -26
  88. data/supply/lib/supply/.options.rb.swp +0 -0
  89. data/supply/lib/supply/.uploader.rb.swp +0 -0
@@ -92,7 +92,7 @@ module Fastlane
92
92
 
93
93
  def self.evaulate(params, values)
94
94
  if params[:provisioning_type]
95
- UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}''; Found: '#{values['provisioning_type']}'") unless params[:provisioning_type] == values['provisioning_type']
95
+ UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}'; Found: '#{values['provisioning_type']}'") unless params[:provisioning_type] == values['provisioning_type']
96
96
  end
97
97
  if params[:provisioning_uuid]
98
98
  UI.user_error!("Mismatched provisioning_uuid. Required: '#{params[:provisioning_uuid]}'; Found: '#{values['provisioning_uuid']}'") unless params[:provisioning_uuid] == values['provisioning_uuid']
@@ -38,7 +38,12 @@ module Fastlane
38
38
  end
39
39
 
40
40
  def self.details
41
- "Select and build with the Xcode installed at the provided path. Use the `xcversion` action if you want to select an Xcode based on a version specifier or you don't have known, stable paths as may happen in a CI environment."
41
+ [
42
+ "Select and build with the Xcode installed at the provided path.",
43
+ "Use the `xcversion` action if you want to select an Xcode:",
44
+ "- Based on a version specifier or",
45
+ "- You don't have known, stable paths, as may happen in a CI environment."
46
+ ].join("\n")
42
47
  end
43
48
 
44
49
  def self.author
@@ -142,8 +142,8 @@ module Fastlane
142
142
  # Let's tell the user how to use `bundle exec`
143
143
  # We show this warning no matter if the command is slow or not
144
144
  UI.important("fastlane detected a Gemfile in the current directory")
145
- UI.important("however it seems like you don't use `bundle exec`")
146
- UI.important("to launch fastlane faster, please use")
145
+ UI.important("However, it seems like you didn't use `bundle exec`")
146
+ UI.important("To launch fastlane faster, please use")
147
147
  UI.message("")
148
148
  UI.command "bundle exec fastlane #{ARGV.join(' ')}"
149
149
  UI.message("")
@@ -17,7 +17,7 @@ module Fastlane
17
17
  end
18
18
  FastlaneCore::Swag.show_loader
19
19
 
20
- # has to be checked here - in case we wan't to troubleshoot plugin related issues
20
+ # has to be checked here - in case we want to troubleshoot plugin related issues
21
21
  if ARGV.include?("--troubleshoot")
22
22
  self.confirm_troubleshoot
23
23
  end
@@ -12,21 +12,30 @@ module Fastlane
12
12
  # Path to the adb binary
13
13
  attr_accessor :adb_path
14
14
 
15
+ # Path to the adb binary
16
+ attr_accessor :adb_host
17
+
15
18
  # All available devices
16
19
  attr_accessor :devices
17
20
 
18
- def initialize(adb_path: nil)
21
+ def initialize(adb_path: nil, adb_host: nil)
19
22
  android_home = ENV['ANDROID_HOME'] || ENV['ANDROID_SDK_ROOT'] || ENV['ANDROID_SDK']
20
23
  if (adb_path.nil? || adb_path == "adb") && android_home
21
24
  adb_path = File.join(android_home, "platform-tools", "adb")
22
25
  end
26
+
23
27
  self.adb_path = adb_path
28
+ self.adb_host = adb_host
29
+ end
30
+
31
+ def host_option
32
+ return self.adb_host ? "-H #{adb_host}" : nil
24
33
  end
25
34
 
26
35
  # Run a certain action
27
36
  def trigger(command: nil, serial: nil)
28
37
  android_serial = serial != "" ? "ANDROID_SERIAL=#{serial}" : nil
29
- command = [android_serial, adb_path.shellescape, command].join(" ").strip
38
+ command = [android_serial, adb_path.shellescape, host_option, command].compact.join(" ").strip
30
39
  Action.sh(command)
31
40
  end
32
41
 
@@ -43,10 +52,10 @@ module Fastlane
43
52
  def load_all_devices
44
53
  self.devices = []
45
54
 
46
- command = [adb_path.shellescape, "devices"].join(" ")
55
+ command = [adb_path.shellescape, host_option, "devices -l"].compact.join(" ")
47
56
  output = Actions.sh(command, log: false)
48
57
  output.split("\n").each do |line|
49
- if (result = line.match(/(.*)\tdevice$/))
58
+ if (result = line.match(/^(\S+)(\s+)(device )/))
50
59
  self.devices << AdbDevice.new(serial: result[1])
51
60
  end
52
61
  end
@@ -158,6 +158,7 @@ CrossPlatform/ForkUsage:
158
158
  Lint/IsStringUsage:
159
159
  Include:
160
160
  - gym/**/*
161
+ - screengrab/**/*
161
162
  - supply/**/*
162
163
  Style/MethodCallWithArgsParentheses:
163
164
  Enabled: true
@@ -225,27 +225,32 @@ module Fastlane
225
225
 
226
226
  begin
227
227
  Dir.chdir(custom_dir) do # go up from the fastlane folder, to the project folder
228
- # If another action is calling this action, we shouldn't show it in the summary
228
+ # Removing step_name before its parsed into configurations
229
+ args = arguments.kind_of?(Array) && arguments.first.kind_of?(Hash) ? arguments.first : {}
230
+ step_name = args.delete(:step_name)
231
+
232
+ # arguments is an array by default, containing an hash with the actual parameters
233
+ # Since we usually just need the passed hash, we'll just use the first object if there is only one
234
+ if arguments.count == 0
235
+ configurations = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hash
236
+ elsif arguments.count == 1 && arguments.first.kind_of?(Hash)
237
+ configurations = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
238
+ elsif !class_ref.available_options
239
+ # This action does not use the new action format
240
+ # Just passing the arguments to this method
241
+ configurations = arguments
242
+ else
243
+ UI.user_error!("You have to call the integration like `#{method_sym}(key: \"value\")`. Run `fastlane action #{method_sym}` for all available keys. Please check out the current documentation on GitHub.")
244
+ end
229
245
 
246
+ # If another action is calling this action, we shouldn't show it in the summary
247
+ # A nil value for action_name will hide it from the summary
230
248
  unless from_action
231
- args = arguments.kind_of?(Array) && arguments.first.kind_of?(Hash) ? arguments.first : {}
232
- action_name = args[:step_name] || class_ref.step_text
233
- args.delete(:step_name)
249
+ action_name = step_name
250
+ action_name ||= class_ref.method(:step_text).arity == 1 ? class_ref.step_text(configurations) : class_ref.step_text
234
251
  end
235
- Actions.execute_action(action_name) do
236
- # arguments is an array by default, containing an hash with the actual parameters
237
- # Since we usually just need the passed hash, we'll just use the first object if there is only one
238
- if arguments.count == 0
239
- arguments = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hash
240
- elsif arguments.count == 1 && arguments.first.kind_of?(Hash)
241
- arguments = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
242
- elsif !class_ref.available_options
243
- # This action does not use the new action format
244
- # Just passing the arguments to this method
245
- else
246
- UI.user_error!("You have to call the integration like `#{method_sym}(key: \"value\")`. Run `fastlane action #{method_sym}` for all available keys. Please check out the current documentation on GitHub.")
247
- end
248
252
 
253
+ Actions.execute_action(action_name) do
249
254
  if Fastlane::Actions.is_deprecated?(class_ref)
250
255
  puts("==========================================".deprecated)
251
256
  puts("This action (#{method_sym}) is deprecated".deprecated)
@@ -253,7 +258,7 @@ module Fastlane
253
258
  puts("==========================================\n".deprecated)
254
259
  end
255
260
  class_ref.runner = self # needed to call another action from an action
256
- return class_ref.run(arguments)
261
+ return class_ref.run(configurations)
257
262
  end
258
263
  end
259
264
  rescue Interrupt => e
@@ -147,6 +147,7 @@ module Fastlane
147
147
  unless default_value.nil?
148
148
  if type == "[String : Any]"
149
149
  # we can't handle default values for Hashes, yet
150
+ # see method swift_default_implementations for similar behavior
150
151
  default_value = "[:]"
151
152
  elsif type != "Bool" && type != "[String]" && type != "Int" && type != "((String) -> Void)"
152
153
  default_value = "\"#{default_value}\""
@@ -343,6 +344,10 @@ module Fastlane
343
344
  unless default_value.nil?
344
345
  if type == "Bool" || type == "[String]" || type == "Int" || default_value.kind_of?(Array)
345
346
  default_value = default_value.to_s
347
+ elsif default_value.kind_of?(Hash)
348
+ # we can't handle default values for Hashes, yet
349
+ # see method parameters for similar behavior
350
+ default_value = "[:]"
346
351
  else
347
352
  default_value = "\"#{default_value}\""
348
353
  end
@@ -366,6 +371,10 @@ module Fastlane
366
371
  default_value ||= "[]"
367
372
  end
368
373
 
374
+ if type == "[String : Any]"
375
+ default_value ||= "[:]"
376
+ end
377
+
369
378
  " var #{var_for_parameter_name}: #{type} { return #{default_value} }"
370
379
  end
371
380
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.135.2'.freeze
2
+ VERSION = '2.140.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
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.135.2
21
+ // Generated with fastlane 2.140.0
@@ -829,6 +829,7 @@ func buildAndUploadToAppetize(xcodebuild: [String : Any] = [:],
829
829
  - task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release')
830
830
  - flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined
831
831
  - buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble`
832
+ - tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]`
832
833
  - flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml`
833
834
  - projectDir: The root directory of the gradle project
834
835
  - gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir`
@@ -842,9 +843,10 @@ func buildAndUploadToAppetize(xcodebuild: [String : Any] = [:],
842
843
 
843
844
  Run `./gradlew tasks` to get a list of all available gradle tasks for your project
844
845
  */
845
- func buildAndroidApp(task: String,
846
+ func buildAndroidApp(task: String? = nil,
846
847
  flavor: String? = nil,
847
848
  buildType: String? = nil,
849
+ tasks: [String]? = nil,
848
850
  flags: String? = nil,
849
851
  projectDir: String = ".",
850
852
  gradlePath: String? = nil,
@@ -856,6 +858,7 @@ func buildAndroidApp(task: String,
856
858
  let command = RubyCommand(commandID: "", methodName: "build_android_app", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
857
859
  RubyCommand.Argument(name: "flavor", value: flavor),
858
860
  RubyCommand.Argument(name: "build_type", value: buildType),
861
+ RubyCommand.Argument(name: "tasks", value: tasks),
859
862
  RubyCommand.Argument(name: "flags", value: flags),
860
863
  RubyCommand.Argument(name: "project_dir", value: projectDir),
861
864
  RubyCommand.Argument(name: "gradle_path", value: gradlePath),
@@ -1210,12 +1213,15 @@ func bundleInstall(binstubs: String? = nil,
1210
1213
  - launchArguments: Additional launch arguments
1211
1214
  - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
1212
1215
  - endingLocale: Return the device to this locale after running tests
1216
+ - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
1213
1217
  - appApkPath: The path to the APK for the app under test
1214
1218
  - testsApkPath: The path to the APK for the the tests bundle
1215
1219
  - specificDevice: Use the device or emulator with the given serial number or qualifier
1216
1220
  - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
1217
1221
  - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
1218
1222
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
1223
+ - useTimestampSuffix: Add timestamp suffix to screenshot filename
1224
+ - adbHost: Configure the host used by adb to connect, allows running on remote devices farm
1219
1225
  */
1220
1226
  func captureAndroidScreenshots(androidHome: String? = nil,
1221
1227
  buildToolsVersion: String? = nil,
@@ -1228,14 +1234,17 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1228
1234
  useTestsInPackages: [String]? = nil,
1229
1235
  useTestsInClasses: [String]? = nil,
1230
1236
  launchArguments: [String]? = nil,
1231
- testInstrumentationRunner: String = "android.support.test.runner.AndroidJUnitRunner",
1237
+ testInstrumentationRunner: String = "androidx.test.runner.AndroidJUnitRunner",
1232
1238
  endingLocale: String = "en-US",
1239
+ useAdbRoot: Bool = false,
1233
1240
  appApkPath: String? = nil,
1234
1241
  testsApkPath: String? = nil,
1235
1242
  specificDevice: String? = nil,
1236
1243
  deviceType: String = "phone",
1237
1244
  exitOnTestFailure: Bool = true,
1238
- reinstallApp: Bool = false) {
1245
+ reinstallApp: Bool = false,
1246
+ useTimestampSuffix: Bool = true,
1247
+ adbHost: String? = nil) {
1239
1248
  let command = RubyCommand(commandID: "", methodName: "capture_android_screenshots", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
1240
1249
  RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
1241
1250
  RubyCommand.Argument(name: "locales", value: locales),
@@ -1249,12 +1258,15 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1249
1258
  RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
1250
1259
  RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
1251
1260
  RubyCommand.Argument(name: "ending_locale", value: endingLocale),
1261
+ RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
1252
1262
  RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
1253
1263
  RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
1254
1264
  RubyCommand.Argument(name: "specific_device", value: specificDevice),
1255
1265
  RubyCommand.Argument(name: "device_type", value: deviceType),
1256
1266
  RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
1257
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp)])
1267
+ RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
1268
+ RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
1269
+ RubyCommand.Argument(name: "adb_host", value: adbHost)])
1258
1270
  _ = runner.executeCommand(command)
1259
1271
  }
1260
1272
 
@@ -1567,7 +1579,7 @@ func carthage(command: String = "bootstrap",
1567
1579
  */
1568
1580
  func cert(development: Bool = false,
1569
1581
  force: Bool = false,
1570
- generateAppleCerts: Bool = false,
1582
+ generateAppleCerts: Bool = true,
1571
1583
  username: String,
1572
1584
  teamId: String? = nil,
1573
1585
  teamName: String? = nil,
@@ -2137,6 +2149,8 @@ func createKeychain(name: String? = nil,
2137
2149
  - base: The name of the branch you want your changes pulled into (defaults to `master`)
2138
2150
  - apiUrl: The URL of GitHub API - used when the Enterprise (default to `https://api.github.com`)
2139
2151
  - assignees: The assignees for the pull request
2152
+ - reviewers: The reviewers (slug) for the pull request
2153
+ - teamReviewers: The team reviewers (slug) for the pull request
2140
2154
 
2141
2155
  - returns: The pull request URL when successful
2142
2156
  */
@@ -2148,7 +2162,9 @@ func createPullRequest(apiToken: String,
2148
2162
  head: String? = nil,
2149
2163
  base: String = "master",
2150
2164
  apiUrl: String = "https://api.github.com",
2151
- assignees: [String]? = nil) {
2165
+ assignees: [String]? = nil,
2166
+ reviewers: [String]? = nil,
2167
+ teamReviewers: [String]? = nil) {
2152
2168
  let command = RubyCommand(commandID: "", methodName: "create_pull_request", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
2153
2169
  RubyCommand.Argument(name: "repo", value: repo),
2154
2170
  RubyCommand.Argument(name: "title", value: title),
@@ -2157,7 +2173,9 @@ func createPullRequest(apiToken: String,
2157
2173
  RubyCommand.Argument(name: "head", value: head),
2158
2174
  RubyCommand.Argument(name: "base", value: base),
2159
2175
  RubyCommand.Argument(name: "api_url", value: apiUrl),
2160
- RubyCommand.Argument(name: "assignees", value: assignees)])
2176
+ RubyCommand.Argument(name: "assignees", value: assignees),
2177
+ RubyCommand.Argument(name: "reviewers", value: reviewers),
2178
+ RubyCommand.Argument(name: "team_reviewers", value: teamReviewers)])
2161
2179
  _ = runner.executeCommand(command)
2162
2180
  }
2163
2181
 
@@ -2568,7 +2586,7 @@ func downloadDsyms(username: String,
2568
2586
  func downloadFromPlayStore(packageName: String,
2569
2587
  versionName: String? = nil,
2570
2588
  track: String = "production",
2571
- metadataPath: String? = nil,
2589
+ metadataPath: String = "./metadata",
2572
2590
  key: String? = nil,
2573
2591
  issuer: String? = nil,
2574
2592
  jsonKey: String? = nil,
@@ -2620,8 +2638,8 @@ func echo(message: String? = nil) {
2620
2638
  /**
2621
2639
  Raises an exception if not using `bundle exec` to run fastlane
2622
2640
 
2623
- This action will check if you are using bundle exec to run fastlane.
2624
- You can put it into `before_all` and make sure that fastlane is run using `bundle exec fastlane` command.
2641
+ This action will check if you are using `bundle exec` to run fastlane.
2642
+ You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command.
2625
2643
  */
2626
2644
  func ensureBundleExec() {
2627
2645
  let command = RubyCommand(commandID: "", methodName: "ensure_bundle_exec", className: nil, args: [])
@@ -2939,7 +2957,7 @@ func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
2939
2957
  */
2940
2958
  func getCertificates(development: Bool = false,
2941
2959
  force: Bool = false,
2942
- generateAppleCerts: Bool = false,
2960
+ generateAppleCerts: Bool = true,
2943
2961
  username: String,
2944
2962
  teamId: String? = nil,
2945
2963
  teamName: String? = nil,
@@ -3410,6 +3428,7 @@ func googlePlayTrackVersionCodes(packageName: String,
3410
3428
  - task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release')
3411
3429
  - flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined
3412
3430
  - buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble`
3431
+ - tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]`
3413
3432
  - flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml`
3414
3433
  - projectDir: The root directory of the gradle project
3415
3434
  - gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir`
@@ -3423,9 +3442,10 @@ func googlePlayTrackVersionCodes(packageName: String,
3423
3442
 
3424
3443
  Run `./gradlew tasks` to get a list of all available gradle tasks for your project
3425
3444
  */
3426
- func gradle(task: String,
3445
+ func gradle(task: String? = nil,
3427
3446
  flavor: String? = nil,
3428
3447
  buildType: String? = nil,
3448
+ tasks: [String]? = nil,
3429
3449
  flags: String? = nil,
3430
3450
  projectDir: String = ".",
3431
3451
  gradlePath: String? = nil,
@@ -3437,6 +3457,7 @@ func gradle(task: String,
3437
3457
  let command = RubyCommand(commandID: "", methodName: "gradle", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
3438
3458
  RubyCommand.Argument(name: "flavor", value: flavor),
3439
3459
  RubyCommand.Argument(name: "build_type", value: buildType),
3460
+ RubyCommand.Argument(name: "tasks", value: tasks),
3440
3461
  RubyCommand.Argument(name: "flags", value: flags),
3441
3462
  RubyCommand.Argument(name: "project_dir", value: projectDir),
3442
3463
  RubyCommand.Argument(name: "gradle_path", value: gradlePath),
@@ -3869,7 +3890,7 @@ func importCertificate(certificatePath: String,
3869
3890
  This action will increment the version number.
3870
3891
  You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html).
3871
3892
  */
3872
- @discardableResult func incrementVersionNumber(bumpType: String = "patch",
3893
+ @discardableResult func incrementVersionNumber(bumpType: String = "bump",
3873
3894
  versionNumber: String? = nil,
3874
3895
  xcodeproj: String? = nil) -> String {
3875
3896
  let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: [RubyCommand.Argument(name: "bump_type", value: bumpType),
@@ -4068,10 +4089,13 @@ func jira(url: String,
4068
4089
  /**
4069
4090
  Get the most recent git tag
4070
4091
 
4092
+ - parameter pattern: Pattern to filter tags when looking for last one. Limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, * at the end is implied
4093
+
4071
4094
  If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`.
4095
+ Pattern parameter allows you to filter to a subset of tags.
4072
4096
  */
4073
- @discardableResult func lastGitTag() -> String {
4074
- let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [])
4097
+ @discardableResult func lastGitTag(pattern: String? = nil) -> String {
4098
+ let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [RubyCommand.Argument(name: "pattern", value: pattern)])
4075
4099
  return runner.executeCommand(command)
4076
4100
  }
4077
4101
 
@@ -4224,6 +4248,7 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
4224
4248
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
4225
4249
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
4226
4250
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
4251
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
4227
4252
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4228
4253
  - googleCloudKeysFile: Path to the gc_keys.json file
4229
4254
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -4256,6 +4281,7 @@ func match(type: Any = matchfile.type,
4256
4281
  shallowClone: Bool = matchfile.shallowClone,
4257
4282
  cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly,
4258
4283
  gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization,
4284
+ gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization,
4259
4285
  googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
4260
4286
  googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
4261
4287
  googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
@@ -4285,6 +4311,7 @@ func match(type: Any = matchfile.type,
4285
4311
  RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
4286
4312
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
4287
4313
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
4314
+ RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
4288
4315
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
4289
4316
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
4290
4317
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -4655,7 +4682,7 @@ func pem(development: Bool = false,
4655
4682
  - localizedBuildInfo: Localized beta app test info for what's new
4656
4683
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
4657
4684
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
4658
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
4685
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
4659
4686
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
4660
4687
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
4661
4688
  - distributeExternal: Should the build be distributed to external testers?
@@ -5323,7 +5350,7 @@ func rubocop() {
5323
5350
  Verifies the minimum ruby version required
5324
5351
 
5325
5352
  Add this to your `Fastfile` to require a certain version of _ruby_.
5326
- Put it at the top of your `Fastfile to ensure that _fastlane_ is executed appropriately.
5353
+ Put it at the top of your `Fastfile` to ensure that _fastlane_ is executed appropriately.
5327
5354
  */
5328
5355
  func rubyVersion() {
5329
5356
  let command = RubyCommand(commandID: "", methodName: "ruby_version", className: nil, args: [])
@@ -5342,6 +5369,7 @@ func rubyVersion() {
5342
5369
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
5343
5370
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
5344
5371
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
5372
+ - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
5345
5373
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
5346
5374
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5347
5375
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
@@ -5376,6 +5404,8 @@ func rubyVersion() {
5376
5404
  - configuration: The configuration to use when building the app. Defaults to 'Release'
5377
5405
  - xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
5378
5406
  - xcconfig: Use an extra XCCONFIG file to build your app
5407
+ - appName: App name to use in slack message and logfile name
5408
+ - deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version
5379
5409
  - slackUrl: Create an Incoming WebHook for your Slack group to post results there
5380
5410
  - slackChannel: #channel or @username
5381
5411
  - slackMessage: The message included with each message posted to slack
@@ -5399,6 +5429,7 @@ func runTests(workspace: String? = nil,
5399
5429
  skipDetectDevices: Bool = false,
5400
5430
  forceQuitSimulator: Bool = false,
5401
5431
  resetSimulator: Bool = false,
5432
+ disableSlideToType: Bool = true,
5402
5433
  prelaunchSimulator: Bool? = nil,
5403
5434
  reinstallApp: Bool = false,
5404
5435
  appIdentifier: String? = nil,
@@ -5433,6 +5464,8 @@ func runTests(workspace: String? = nil,
5433
5464
  configuration: String? = nil,
5434
5465
  xcargs: String? = nil,
5435
5466
  xcconfig: String? = nil,
5467
+ appName: String? = nil,
5468
+ deploymentTargetVersion: String? = nil,
5436
5469
  slackUrl: String? = nil,
5437
5470
  slackChannel: String? = nil,
5438
5471
  slackMessage: String? = nil,
@@ -5453,6 +5486,7 @@ func runTests(workspace: String? = nil,
5453
5486
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
5454
5487
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
5455
5488
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
5489
+ RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
5456
5490
  RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
5457
5491
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5458
5492
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
@@ -5487,6 +5521,8 @@ func runTests(workspace: String? = nil,
5487
5521
  RubyCommand.Argument(name: "configuration", value: configuration),
5488
5522
  RubyCommand.Argument(name: "xcargs", value: xcargs),
5489
5523
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
5524
+ RubyCommand.Argument(name: "app_name", value: appName),
5525
+ RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
5490
5526
  RubyCommand.Argument(name: "slack_url", value: slackUrl),
5491
5527
  RubyCommand.Argument(name: "slack_channel", value: slackChannel),
5492
5528
  RubyCommand.Argument(name: "slack_message", value: slackMessage),
@@ -5588,6 +5624,7 @@ func say(text: Any,
5588
5624
  - skipDetectDevices: Should skip auto detecting of devices if none were specified
5589
5625
  - forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
5590
5626
  - resetSimulator: Enabling this option will automatically erase the simulator before running the application
5627
+ - disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
5591
5628
  - prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
5592
5629
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5593
5630
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
@@ -5622,6 +5659,8 @@ func say(text: Any,
5622
5659
  - configuration: The configuration to use when building the app. Defaults to 'Release'
5623
5660
  - xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
5624
5661
  - xcconfig: Use an extra XCCONFIG file to build your app
5662
+ - appName: App name to use in slack message and logfile name
5663
+ - deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version
5625
5664
  - slackUrl: Create an Incoming WebHook for your Slack group to post results there
5626
5665
  - slackChannel: #channel or @username
5627
5666
  - slackMessage: The message included with each message posted to slack
@@ -5645,6 +5684,7 @@ func scan(workspace: Any? = scanfile.workspace,
5645
5684
  skipDetectDevices: Bool = scanfile.skipDetectDevices,
5646
5685
  forceQuitSimulator: Bool = scanfile.forceQuitSimulator,
5647
5686
  resetSimulator: Bool = scanfile.resetSimulator,
5687
+ disableSlideToType: Bool = scanfile.disableSlideToType,
5648
5688
  prelaunchSimulator: Bool? = scanfile.prelaunchSimulator,
5649
5689
  reinstallApp: Bool = scanfile.reinstallApp,
5650
5690
  appIdentifier: Any? = scanfile.appIdentifier,
@@ -5679,6 +5719,8 @@ func scan(workspace: Any? = scanfile.workspace,
5679
5719
  configuration: Any? = scanfile.configuration,
5680
5720
  xcargs: Any? = scanfile.xcargs,
5681
5721
  xcconfig: Any? = scanfile.xcconfig,
5722
+ appName: Any? = scanfile.appName,
5723
+ deploymentTargetVersion: Any? = scanfile.deploymentTargetVersion,
5682
5724
  slackUrl: Any? = scanfile.slackUrl,
5683
5725
  slackChannel: Any? = scanfile.slackChannel,
5684
5726
  slackMessage: Any? = scanfile.slackMessage,
@@ -5699,6 +5741,7 @@ func scan(workspace: Any? = scanfile.workspace,
5699
5741
  RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
5700
5742
  RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
5701
5743
  RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
5744
+ RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
5702
5745
  RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
5703
5746
  RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5704
5747
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
@@ -5733,6 +5776,8 @@ func scan(workspace: Any? = scanfile.workspace,
5733
5776
  RubyCommand.Argument(name: "configuration", value: configuration),
5734
5777
  RubyCommand.Argument(name: "xcargs", value: xcargs),
5735
5778
  RubyCommand.Argument(name: "xcconfig", value: xcconfig),
5779
+ RubyCommand.Argument(name: "app_name", value: appName),
5780
+ RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
5736
5781
  RubyCommand.Argument(name: "slack_url", value: slackUrl),
5737
5782
  RubyCommand.Argument(name: "slack_channel", value: slackChannel),
5738
5783
  RubyCommand.Argument(name: "slack_message", value: slackMessage),
@@ -5791,12 +5836,15 @@ func scp(username: String,
5791
5836
  - launchArguments: Additional launch arguments
5792
5837
  - testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
5793
5838
  - endingLocale: Return the device to this locale after running tests
5839
+ - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
5794
5840
  - appApkPath: The path to the APK for the app under test
5795
5841
  - testsApkPath: The path to the APK for the the tests bundle
5796
5842
  - specificDevice: Use the device or emulator with the given serial number or qualifier
5797
5843
  - deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
5798
5844
  - exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
5799
5845
  - reinstallApp: Enabling this option will automatically uninstall the application before running it
5846
+ - useTimestampSuffix: Add timestamp suffix to screenshot filename
5847
+ - adbHost: Configure the host used by adb to connect, allows running on remote devices farm
5800
5848
  */
5801
5849
  func screengrab(androidHome: Any? = screengrabfile.androidHome,
5802
5850
  buildToolsVersion: Any? = screengrabfile.buildToolsVersion,
@@ -5811,12 +5859,15 @@ func screengrab(androidHome: Any? = screengrabfile.androidHome,
5811
5859
  launchArguments: [String]? = screengrabfile.launchArguments,
5812
5860
  testInstrumentationRunner: Any = screengrabfile.testInstrumentationRunner,
5813
5861
  endingLocale: Any = screengrabfile.endingLocale,
5862
+ useAdbRoot: Bool = screengrabfile.useAdbRoot,
5814
5863
  appApkPath: Any? = screengrabfile.appApkPath,
5815
5864
  testsApkPath: Any? = screengrabfile.testsApkPath,
5816
5865
  specificDevice: Any? = screengrabfile.specificDevice,
5817
5866
  deviceType: Any = screengrabfile.deviceType,
5818
5867
  exitOnTestFailure: Bool = screengrabfile.exitOnTestFailure,
5819
- reinstallApp: Bool = screengrabfile.reinstallApp) {
5868
+ reinstallApp: Bool = screengrabfile.reinstallApp,
5869
+ useTimestampSuffix: Bool = screengrabfile.useTimestampSuffix,
5870
+ adbHost: Any? = screengrabfile.adbHost) {
5820
5871
  let command = RubyCommand(commandID: "", methodName: "screengrab", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
5821
5872
  RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
5822
5873
  RubyCommand.Argument(name: "locales", value: locales),
@@ -5830,12 +5881,15 @@ func screengrab(androidHome: Any? = screengrabfile.androidHome,
5830
5881
  RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
5831
5882
  RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
5832
5883
  RubyCommand.Argument(name: "ending_locale", value: endingLocale),
5884
+ RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
5833
5885
  RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
5834
5886
  RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
5835
5887
  RubyCommand.Argument(name: "specific_device", value: specificDevice),
5836
5888
  RubyCommand.Argument(name: "device_type", value: deviceType),
5837
5889
  RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
5838
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp)])
5890
+ RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
5891
+ RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
5892
+ RubyCommand.Argument(name: "adb_host", value: adbHost)])
5839
5893
  _ = runner.executeCommand(command)
5840
5894
  }
5841
5895
 
@@ -5985,7 +6039,7 @@ func setPodKey(useBundleExec: Bool = true,
5985
6039
 
5986
6040
  - parameters:
5987
6041
  - force: Force setup, even if not executed by CI
5988
- - provider: CI provider
6042
+ - provider: CI provider. If none is set, the provider is detected automatically
5989
6043
 
5990
6044
  - Creates a new temporary keychain for use with match|
5991
6045
  - Switches match to `readonly` mode to not create new profiles/cert on CI|
@@ -6702,7 +6756,7 @@ func supply(packageName: String,
6702
6756
  releaseStatus: String = "completed",
6703
6757
  track: String = "production",
6704
6758
  rollout: String? = nil,
6705
- metadataPath: String? = nil,
6759
+ metadataPath: String = "./metadata",
6706
6760
  key: String? = nil,
6707
6761
  issuer: String? = nil,
6708
6762
  jsonKey: String? = nil,
@@ -6831,6 +6885,7 @@ func swiftlint(mode: Any = "lint",
6831
6885
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
6832
6886
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
6833
6887
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
6888
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
6834
6889
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
6835
6890
  - googleCloudKeysFile: Path to the gc_keys.json file
6836
6891
  - googleCloudProjectId: ID of the Google Cloud project to use for authentication
@@ -6849,7 +6904,7 @@ func swiftlint(mode: Any = "lint",
6849
6904
  */
6850
6905
  func syncCodeSigning(type: String = "development",
6851
6906
  readonly: Bool = false,
6852
- generateAppleCerts: Bool = false,
6907
+ generateAppleCerts: Bool = true,
6853
6908
  skipProvisioningProfiles: Bool = false,
6854
6909
  appIdentifier: [String],
6855
6910
  username: String,
@@ -6863,6 +6918,7 @@ func syncCodeSigning(type: String = "development",
6863
6918
  shallowClone: Bool = false,
6864
6919
  cloneBranchDirectly: Bool = false,
6865
6920
  gitBasicAuthorization: String? = nil,
6921
+ gitBearerAuthorization: String? = nil,
6866
6922
  googleCloudBucketName: String? = nil,
6867
6923
  googleCloudKeysFile: String? = nil,
6868
6924
  googleCloudProjectId: String? = nil,
@@ -6892,6 +6948,7 @@ func syncCodeSigning(type: String = "development",
6892
6948
  RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
6893
6949
  RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
6894
6950
  RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
6951
+ RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
6895
6952
  RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
6896
6953
  RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
6897
6954
  RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
@@ -6939,6 +6996,7 @@ func teamName() {
6939
6996
  - autoUpdate: Allows an easy upgrade of all users to the current version. To enable set to 'on'
6940
6997
  - notify: Send email to testers
6941
6998
  - options: Array of options (shake,video_only_wifi,anonymous)
6999
+ - custom: Array of custom options. Contact support@testfairy.com for more information
6942
7000
  - timeout: Request timeout in seconds
6943
7001
 
6944
7002
  You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
@@ -6954,6 +7012,7 @@ func testfairy(apiKey: String,
6954
7012
  autoUpdate: String = "off",
6955
7013
  notify: String = "off",
6956
7014
  options: [String] = [],
7015
+ custom: String = "",
6957
7016
  timeout: Int? = nil) {
6958
7017
  let command = RubyCommand(commandID: "", methodName: "testfairy", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey),
6959
7018
  RubyCommand.Argument(name: "ipa", value: ipa),
@@ -6966,6 +7025,7 @@ func testfairy(apiKey: String,
6966
7025
  RubyCommand.Argument(name: "auto_update", value: autoUpdate),
6967
7026
  RubyCommand.Argument(name: "notify", value: notify),
6968
7027
  RubyCommand.Argument(name: "options", value: options),
7028
+ RubyCommand.Argument(name: "custom", value: custom),
6969
7029
  RubyCommand.Argument(name: "timeout", value: timeout)])
6970
7030
  _ = runner.executeCommand(command)
6971
7031
  }
@@ -6987,7 +7047,7 @@ func testfairy(apiKey: String,
6987
7047
  - localizedBuildInfo: Localized beta app test info for what's new
6988
7048
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
6989
7049
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
6990
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
7050
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
6991
7051
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
6992
7052
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
6993
7053
  - distributeExternal: Should the build be distributed to external testers?
@@ -7724,7 +7784,7 @@ func uploadToPlayStore(packageName: String,
7724
7784
  releaseStatus: String = "completed",
7725
7785
  track: String = "production",
7726
7786
  rollout: String? = nil,
7727
- metadataPath: String? = nil,
7787
+ metadataPath: String = "./metadata",
7728
7788
  key: String? = nil,
7729
7789
  issuer: String? = nil,
7730
7790
  jsonKey: String? = nil,
@@ -7789,6 +7849,45 @@ func uploadToPlayStore(packageName: String,
7789
7849
  _ = runner.executeCommand(command)
7790
7850
  }
7791
7851
 
7852
+ /**
7853
+ Upload binaries to Google Play Internal App Sharing (via _supply_)
7854
+
7855
+ - parameters:
7856
+ - packageName: The package name of the application to use
7857
+ - jsonKey: The path to a file containing service account JSON, used to authenticate with Google
7858
+ - jsonKeyData: The raw service account JSON data used to authenticate with Google
7859
+ - apk: Path to the APK file to upload
7860
+ - apkPaths: An array of paths to APK files to upload
7861
+ - aab: Path to the AAB file to upload
7862
+ - aabPaths: An array of paths to AAB files to upload
7863
+ - rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
7864
+ - timeout: Timeout for read, open, and send (in seconds)
7865
+
7866
+ - returns: Returns a string containing the download URL for the uploaded APK/AAB (or array of strings if multiple were uploaded).
7867
+
7868
+ More information: https://docs.fastlane.tools/actions/upload_to_play_store_internal_app_sharing/
7869
+ */
7870
+ func uploadToPlayStoreInternalAppSharing(packageName: String,
7871
+ jsonKey: String? = nil,
7872
+ jsonKeyData: String? = nil,
7873
+ apk: String? = nil,
7874
+ apkPaths: [String]? = nil,
7875
+ aab: String? = nil,
7876
+ aabPaths: [String]? = nil,
7877
+ rootUrl: String? = nil,
7878
+ timeout: Int = 300) {
7879
+ let command = RubyCommand(commandID: "", methodName: "upload_to_play_store_internal_app_sharing", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
7880
+ RubyCommand.Argument(name: "json_key", value: jsonKey),
7881
+ RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
7882
+ RubyCommand.Argument(name: "apk", value: apk),
7883
+ RubyCommand.Argument(name: "apk_paths", value: apkPaths),
7884
+ RubyCommand.Argument(name: "aab", value: aab),
7885
+ RubyCommand.Argument(name: "aab_paths", value: aabPaths),
7886
+ RubyCommand.Argument(name: "root_url", value: rootUrl),
7887
+ RubyCommand.Argument(name: "timeout", value: timeout)])
7888
+ _ = runner.executeCommand(command)
7889
+ }
7890
+
7792
7891
  /**
7793
7892
  Upload new binary to App Store Connect for TestFlight beta testing (via _pilot_)
7794
7893
 
@@ -7806,7 +7905,7 @@ func uploadToPlayStore(packageName: String,
7806
7905
  - localizedBuildInfo: Localized beta app test info for what's new
7807
7906
  - changelog: Provide the 'What to Test' text when uploading a new build. `skip_waiting_for_build_processing: false` is required to set the changelog
7808
7907
  - skipSubmission: Skip the distributing action of pilot and only upload the ipa file
7809
- - skipWaitingForBuildProcessing: Don't wait for the build to process. If set to true, the changelog won't be set, `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan)
7908
+ - skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
7810
7909
  - updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
7811
7910
  - usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
7812
7911
  - distributeExternal: Should the build be distributed to external testers?
@@ -8066,7 +8165,10 @@ func xcexport() {
8066
8165
  /**
8067
8166
  Change the xcode-path to use. Useful for beta versions of Xcode
8068
8167
 
8069
- Select and build with the Xcode installed at the provided path. Use the `xcversion` action if you want to select an Xcode based on a version specifier or you don't have known, stable paths as may happen in a CI environment.
8168
+ Select and build with the Xcode installed at the provided path.
8169
+ Use the `xcversion` action if you want to select an Xcode:
8170
+ - Based on a version specifier or
8171
+ - You don't have known, stable paths, as may happen in a CI environment.
8070
8172
  */
8071
8173
  func xcodeSelect() {
8072
8174
  let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: [])
@@ -8181,7 +8283,7 @@ func xcov(workspace: String? = nil,
8181
8283
  coverallsServiceJobId: String? = nil,
8182
8284
  coverallsRepoToken: String? = nil,
8183
8285
  xcconfig: String? = nil,
8184
- ideFoundationPath: String = "/Applications/Xcode-10.3.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8286
+ ideFoundationPath: String = "/Applications/Xcode-11.2.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8185
8287
  legacySupport: Bool = false) {
8186
8288
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8187
8289
  RubyCommand.Argument(name: "project", value: project),
@@ -8326,4 +8428,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8326
8428
 
8327
8429
  // Please don't remove the lines below
8328
8430
  // They are used to detect outdated files
8329
- // FastlaneRunnerAPIVersion [0.9.63]
8431
+ // FastlaneRunnerAPIVersion [0.9.68]