fastlane 2.199.0 → 2.200.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +92 -92
  4. data/deliver/lib/deliver/app_screenshot.rb +7 -0
  5. data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -0
  7. data/fastlane/lib/fastlane/version.rb +1 -1
  8. data/fastlane/swift/Actions.swift +1 -1
  9. data/fastlane/swift/Appfile.swift +1 -1
  10. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  11. data/fastlane/swift/ControlCommand.swift +1 -1
  12. data/fastlane/swift/Deliverfile.swift +2 -2
  13. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  14. data/fastlane/swift/Fastlane.swift +11 -3
  15. data/fastlane/swift/Gymfile.swift +2 -2
  16. data/fastlane/swift/GymfileProtocol.swift +2 -2
  17. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  18. data/fastlane/swift/MainProcess.swift +1 -1
  19. data/fastlane/swift/Matchfile.swift +2 -2
  20. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  21. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  22. data/fastlane/swift/Plugins.swift +1 -1
  23. data/fastlane/swift/Precheckfile.swift +2 -2
  24. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  25. data/fastlane/swift/RubyCommand.swift +1 -1
  26. data/fastlane/swift/RubyCommandable.swift +1 -1
  27. data/fastlane/swift/Runner.swift +1 -1
  28. data/fastlane/swift/RunnerArgument.swift +1 -1
  29. data/fastlane/swift/Scanfile.swift +2 -2
  30. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  31. data/fastlane/swift/Screengrabfile.swift +2 -2
  32. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  33. data/fastlane/swift/Snapshotfile.swift +2 -2
  34. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  35. data/fastlane/swift/SocketClient.swift +1 -1
  36. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  37. data/fastlane/swift/SocketResponse.swift +1 -1
  38. data/fastlane/swift/formatting/Brewfile.lock.json +3 -3
  39. data/fastlane/swift/main.swift +1 -1
  40. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +10 -5
  41. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +4 -1
  42. data/gym/lib/gym/generators/build_command_generator.rb +1 -1
  43. data/scan/lib/scan/runner.rb +1 -1
  44. data/spaceship/lib/spaceship/connect_api/models/app.rb +43 -0
  45. data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
  46. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -0
  47. data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +73 -0
  48. data/spaceship/lib/spaceship/connect_api/models/review_submission_item.rb +40 -0
  49. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +83 -0
  50. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  51. data/supply/lib/supply/options.rb +8 -0
  52. data/supply/lib/supply/uploader.rb +6 -2
  53. metadata +22 -20
@@ -1,5 +1,5 @@
1
1
  // RunnerArgument.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Scanfile.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.199.0
20
+ // Generated with fastlane 2.200.0
@@ -1,5 +1,5 @@
1
1
  // ScanfileProtocol.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  public protocol ScanfileProtocol: class {
5
5
  /// Path to the workspace file
@@ -296,4 +296,4 @@ public extension ScanfileProtocol {
296
296
 
297
297
  // Please don't remove the lines below
298
298
  // They are used to detect outdated files
299
- // FastlaneRunnerAPIVersion [0.9.97]
299
+ // FastlaneRunnerAPIVersion [0.9.98]
@@ -1,5 +1,5 @@
1
1
  // Screengrabfile.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.199.0
20
+ // Generated with fastlane 2.200.0
@@ -1,5 +1,5 @@
1
1
  // ScreengrabfileProtocol.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  public protocol ScreengrabfileProtocol: class {
5
5
  /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
@@ -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.87]
99
+ // FastlaneRunnerAPIVersion [0.9.88]
@@ -1,5 +1,5 @@
1
1
  // Snapshotfile.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -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.199.0
20
+ // Generated with fastlane 2.200.0
@@ -1,5 +1,5 @@
1
1
  // SnapshotfileProtocol.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  public protocol SnapshotfileProtocol: class {
5
5
  /// Path the workspace file
@@ -200,4 +200,4 @@ public extension SnapshotfileProtocol {
200
200
 
201
201
  // Please don't remove the lines below
202
202
  // They are used to detect outdated files
203
- // FastlaneRunnerAPIVersion [0.9.81]
203
+ // FastlaneRunnerAPIVersion [0.9.82]
@@ -1,5 +1,5 @@
1
1
  // SocketClient.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketClientDelegateProtocol.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketResponse.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -56,11 +56,11 @@
56
56
  "macOS": "11.6"
57
57
  },
58
58
  "monterey": {
59
- "HOMEBREW_VERSION": "3.3.7-38-g6295b08",
59
+ "HOMEBREW_VERSION": "3.3.10-21-g3ba6afb",
60
60
  "HOMEBREW_PREFIX": "/opt/homebrew",
61
- "Homebrew/homebrew-core": "e340d22f5ef83cf4acc489b34e2478426dbf53b9",
61
+ "Homebrew/homebrew-core": "54f307bcd04cec374c7fd3f22fe7e6b13f1ad783",
62
62
  "CLT": "13.1.0.0.1.1633545042",
63
- "Xcode": "13.1",
63
+ "Xcode": "13.2.1",
64
64
  "macOS": "12.0.1"
65
65
  }
66
66
  }
@@ -1,5 +1,5 @@
1
1
  // main.swift
2
- // Copyright (c) 2021 FastlaneTools
2
+ // Copyright (c) 2022 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -73,12 +73,17 @@ module FastlaneCore
73
73
  end
74
74
 
75
75
  def self.fetch_info_plist_with_unzip(path)
76
- list, error, = Open3.capture3("unzip", "-Z", "-1", path)
76
+ entry, error, = Open3.capture3("unzip", "-Z", "-1", path, "*Payload/*.app/Info.plist")
77
+
78
+ # unzip can return multiple Info.plist files if is an embedded app bundle (a WatchKit app)
79
+ # - ContainsWatchApp/Payload/Sample.app/Watch/Sample WatchKit App.app/Info.plist
80
+ # - ContainsWatchApp/Payload/Sample.app/Info.plist
81
+ #
82
+ # we can determine the main Info.plist by the shortest path
83
+ entry = entry.lines.map(&:chomp).min_by(&:size)
84
+
77
85
  UI.command_output(error) unless error.empty?
78
- return nil if list.empty?
79
- entry = list.chomp.split("\n").find do |e|
80
- File.fnmatch("**/Payload/*.app/Info.plist", e, File::FNM_PATHNAME)
81
- end
86
+ return nil if entry.nil? || entry.empty?
82
87
  data, error, = Open3.capture3("unzip", "-p", path, entry)
83
88
  UI.command_output(error) unless error.empty?
84
89
  return nil if data.empty?
@@ -2,6 +2,7 @@ require 'shellwords'
2
2
  require 'tmpdir'
3
3
  require 'fileutils'
4
4
  require 'credentials_manager/account_manager'
5
+ require 'securerandom'
5
6
 
6
7
  require_relative 'features'
7
8
  require_relative 'helper'
@@ -501,7 +502,9 @@ module FastlaneCore
501
502
 
502
503
  actual_dir = if can_use_asset_path && !force_itmsp
503
504
  # The asset gets deleted upon completion so copying to a temp directory
504
- tmp_asset_path = File.join(Dir.tmpdir, File.basename(asset_path))
505
+ # (with randomized filename, for multibyte-mixed filename upload fails)
506
+ new_file_name = "#{SecureRandom.uuid}#{File.extname(asset_path)}"
507
+ tmp_asset_path = File.join(Dir.tmpdir, new_file_name)
505
508
  FileUtils.cp(asset_path, tmp_asset_path)
506
509
  tmp_asset_path
507
510
  elsif package_path
@@ -43,7 +43,7 @@ module Gym
43
43
  options << "-scmProvider system"
44
44
  end
45
45
  options << config[:xcargs] if config[:xcargs]
46
- options << "OTHER_SWIFT_FLAGS=\"-Xfrontend -debug-time-function-bodies\"" if config[:analyze_build_time]
46
+ options << "OTHER_SWIFT_FLAGS=\"\\\$(value) -Xfrontend -debug-time-function-bodies\"" if config[:analyze_build_time]
47
47
 
48
48
  options
49
49
  end
@@ -126,7 +126,7 @@ module Scan
126
126
 
127
127
  test_cases = suite.split(":\n").fetch(1, []).split("\n").each
128
128
  .select { |line| line.match?(/^\s+/) }
129
- .map { |line| line.strip.gsub(".", "/").gsub("()", "") }
129
+ .map { |line| line.strip.gsub(/[\s\.]/, "/").gsub(/[\-\[\]\(\)]/, "") }
130
130
  .map { |line| suite_name + "/" + line }
131
131
 
132
132
  retryable_tests += test_cases
@@ -1,6 +1,7 @@
1
1
  require_relative '../model'
2
2
  require_relative './build'
3
3
 
4
+ # rubocop:disable Metrics/ClassLength
4
5
  module Spaceship
5
6
  class ConnectAPI
6
7
  class App
@@ -414,6 +415,47 @@ module Spaceship
414
415
  })
415
416
  end
416
417
 
418
+ #
419
+ # Review Submissions
420
+ #
421
+
422
+ def get_ready_review_submission(client: nil, platform:, includes: nil)
423
+ client ||= Spaceship::ConnectAPI
424
+ filter = {
425
+ state: [
426
+ Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::READY_FOR_REVIEW
427
+ ].join(","),
428
+ platform: platform
429
+ }
430
+
431
+ return get_review_submissions(client: client, filter: filter, includes: includes).first
432
+ end
433
+
434
+ def get_in_progress_review_submission(client: nil, platform:, includes: nil)
435
+ client ||= Spaceship::ConnectAPI
436
+ filter = {
437
+ state: [
438
+ Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::WAITING_FOR_REVIEW
439
+ ].join(","),
440
+ platform: platform
441
+ }
442
+
443
+ return get_review_submissions(client: client, filter: filter, includes: includes).first
444
+ end
445
+
446
+ # appStoreVersionForReview,items
447
+ def get_review_submissions(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
448
+ client ||= Spaceship::ConnectAPI
449
+ resps = client.get_review_submissions(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
450
+ return resps.flat_map(&:to_models)
451
+ end
452
+
453
+ def create_review_submission(client: nil, platform:)
454
+ client ||= Spaceship::ConnectAPI
455
+ resp = client.post_review_submission(app_id: id, platform: platform)
456
+ return resp.to_models.first
457
+ end
458
+
417
459
  #
418
460
  # Users
419
461
  #
@@ -434,3 +476,4 @@ module Spaceship
434
476
  end
435
477
  end
436
478
  end
479
+ # rubocop:enable Metrics/ClassLength
@@ -25,6 +25,7 @@ module Spaceship
25
25
  WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
26
26
  DEVELOPER_REJECTED = "DEVELOPER_REJECTED"
27
27
  DEVELOPER_REMOVED_FROM_SALE = "DEVELOPER_REMOVED_FROM_SALE"
28
+ READY_FOR_REVIEW = "READY_FOR_REVIEW"
28
29
  REJECTED = "REJECTED"
29
30
  PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION"
30
31
  METADATA_REJECTED = "METADATA_REJECTED"
@@ -38,6 +38,7 @@ module Spaceship
38
38
 
39
39
  APP_WATCH_SERIES_3 = "APP_WATCH_SERIES_3"
40
40
  APP_WATCH_SERIES_4 = "APP_WATCH_SERIES_4"
41
+ APP_WATCH_SERIES_7 = "APP_WATCH_SERIES_7"
41
42
 
42
43
  APP_APPLE_TV = "APP_APPLE_TV"
43
44
 
@@ -85,6 +86,7 @@ module Spaceship
85
86
 
86
87
  APP_WATCH_SERIES_3,
87
88
  APP_WATCH_SERIES_4,
89
+ APP_WATCH_SERIES_7,
88
90
 
89
91
  APP_DESKTOP
90
92
  ]
@@ -0,0 +1,73 @@
1
+ require_relative '../model'
2
+ require_relative './review_submission_item'
3
+
4
+ module Spaceship
5
+ class ConnectAPI
6
+ class ReviewSubmission
7
+ include Spaceship::ConnectAPI::Model
8
+
9
+ attr_accessor :platform
10
+ attr_accessor :state
11
+ attr_accessor :submitted_date
12
+
13
+ attr_accessor :app_store_version_for_review
14
+ attr_accessor :items
15
+ attr_accessor :last_updated_by_actor
16
+ attr_accessor :submitted_by_actor
17
+
18
+ module ReviewSubmissionState
19
+ CANCELING = "CANCELING"
20
+ COMPLETE = "COMPLETE"
21
+ IN_REVIEW = "IN_REVIEW"
22
+ READY_FOR_REVIEW = "READY_FOR_REVIEW"
23
+ WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
24
+ end
25
+
26
+ attr_mapping({
27
+ "platform" => "platform",
28
+ "state" => "state",
29
+ "submittedDate" => "submitted_date",
30
+
31
+ "appStoreVersionForReview" => "app_store_version_for_review",
32
+ "items" => "items",
33
+ "lastUpdatedByActor" => "last_updated_by_actor",
34
+ "submittedByActor" => "submitted_by_actor",
35
+ })
36
+
37
+ def self.type
38
+ return "reviewSubmissions"
39
+ end
40
+
41
+ #
42
+ # API
43
+ #
44
+
45
+ # appStoreVersionForReview,items,submittedByActor,lastUpdatedByActor
46
+ def self.get(client: nil, review_submission_id:, includes: nil)
47
+ client ||= Spaceship::ConnectAPI
48
+ resp = client.get_review_submission(review_submission_id: review_submission_id, includes: includes)
49
+ return resp.to_models.first
50
+ end
51
+
52
+ def submit_for_review(client: nil)
53
+ client ||= Spaceship::ConnectAPI
54
+ attributes = { submitted: true }
55
+ resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
56
+ return resp.to_models.first
57
+ end
58
+
59
+ def cancel_submission(client: nil)
60
+ client ||= Spaceship::ConnectAPI
61
+ attributes = { canceled: true }
62
+ resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
63
+ return resp.to_models.first
64
+ end
65
+
66
+ def add_app_store_version_to_review_items(client: nil, app_store_version_id:)
67
+ client ||= Spaceship::ConnectAPI
68
+ resp = client.post_review_submission_item(review_submission_id: id, app_store_version_id: app_store_version_id)
69
+ return resp.to_models.first
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,40 @@
1
+ require_relative '../model'
2
+
3
+ module Spaceship
4
+ class ConnectAPI
5
+ class ReviewSubmissionItem
6
+ include Spaceship::ConnectAPI::Model
7
+
8
+ attr_accessor :state
9
+
10
+ attr_accessor :app_store_version_experiment
11
+ attr_accessor :app_store_version
12
+ attr_accessor :app_store_product_page_version
13
+ attr_accessor :app_event
14
+
15
+ attr_mapping({
16
+ "state" => "state",
17
+
18
+ "appStoreVersionExperiment" => "app_store_version_experiment",
19
+ "appStoreVersion" => "app_store_version",
20
+ "appCustomProductPageVersion" => "app_store_product_page_version",
21
+ "appEvent" => "app_event",
22
+ })
23
+
24
+ def self.type
25
+ return "reviewSubmissionItems"
26
+ end
27
+
28
+ #
29
+ # API
30
+ #
31
+
32
+ # appCustomProductPageVersion,appEvent,appStoreVersion,appStoreVersionExperiment
33
+ def self.all(client: nil, review_submission_id:, includes: nil, limit: nil, sort: nil)
34
+ client ||= Spaceship::ConnectAPI
35
+ resps = client.get_review_submission_items(review_submission_id: review_submission_id, includes: includes, limit: limit, sort: sort).all_pages
36
+ return resps.flat_map(&:to_models)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1126,6 +1126,89 @@ module Spaceship
1126
1126
  tunes_request_client.delete("idfaDeclarations/#{idfa_declaration_id}", params)
1127
1127
  end
1128
1128
 
1129
+ #
1130
+ # reviewSubmissions
1131
+ #
1132
+
1133
+ def get_review_submissions(app_id:, filter: {}, includes: nil, limit: nil, sort: nil)
1134
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
1135
+ tunes_request_client.get("apps/#{app_id}/reviewSubmissions", params)
1136
+ end
1137
+
1138
+ def get_review_submission(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
1139
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
1140
+ tunes_request_client.get("reviewSubmissions/#{review_submission_id}", params)
1141
+ end
1142
+
1143
+ def post_review_submission(app_id:, platform:)
1144
+ body = {
1145
+ data: {
1146
+ type: "reviewSubmissions",
1147
+ attributes: {
1148
+ platform: platform
1149
+ },
1150
+ relationships: {
1151
+ app: {
1152
+ data: {
1153
+ type: "apps",
1154
+ id: app_id
1155
+ }
1156
+ }
1157
+ }
1158
+ }
1159
+ }
1160
+
1161
+ tunes_request_client.post("reviewSubmissions", body)
1162
+ end
1163
+
1164
+ def patch_review_submission(review_submission_id:, attributes: nil)
1165
+ body = {
1166
+ data: {
1167
+ type: "reviewSubmissions",
1168
+ id: review_submission_id,
1169
+ attributes: attributes,
1170
+ }
1171
+ }
1172
+
1173
+ tunes_request_client.patch("reviewSubmissions/#{review_submission_id}", body)
1174
+ end
1175
+
1176
+ #
1177
+ # reviewSubmissionItems
1178
+ #
1179
+
1180
+ def get_review_submission_items(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
1181
+ params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
1182
+ tunes_request_client.get("reviewSubmissions/#{review_submission_id}/items", params)
1183
+ end
1184
+
1185
+ def post_review_submission_item(review_submission_id:, app_store_version_id: nil)
1186
+ body = {
1187
+ data: {
1188
+ type: "reviewSubmissionItems",
1189
+ relationships: {
1190
+ reviewSubmission: {
1191
+ data: {
1192
+ type: "reviewSubmissions",
1193
+ id: review_submission_id
1194
+ }
1195
+ }
1196
+ }
1197
+ }
1198
+ }
1199
+
1200
+ unless app_store_version_id.nil?
1201
+ body[:data][:relationships][:appStoreVersion] = {
1202
+ data: {
1203
+ type: "appStoreVersions",
1204
+ id: app_store_version_id
1205
+ }
1206
+ }
1207
+ end
1208
+
1209
+ tunes_request_client.post("reviewSubmissionItems", body)
1210
+ end
1211
+
1129
1212
  #
1130
1213
  # sandboxTesters
1131
1214
  #
@@ -62,6 +62,8 @@ require 'spaceship/connect_api/models/app_store_version_localization'
62
62
  require 'spaceship/connect_api/models/app_store_version_phased_release'
63
63
  require 'spaceship/connect_api/models/app_store_version'
64
64
  require 'spaceship/connect_api/models/idfa_declaration'
65
+ require 'spaceship/connect_api/models/review_submission'
66
+ require 'spaceship/connect_api/models/review_submission_item'
65
67
  require 'spaceship/connect_api/models/reset_ratings_request'
66
68
  require 'spaceship/connect_api/models/sandbox_tester'
67
69
  require 'spaceship/connect_api/models/territory'
@@ -217,6 +217,14 @@ module Supply
217
217
  verify_block: proc do |value|
218
218
  UI.user_error!("'rollout' is no longer a valid track name - please use 'production' instead") if value.casecmp('rollout').zero?
219
219
  end),
220
+ FastlaneCore::ConfigItem.new(key: :track_promote_release_status,
221
+ env_name: "SUPPLY_TRACK_PROMOTE_RELEASE_STATUS",
222
+ optional: true,
223
+ description: "Promoted track release status (used when promoting a track) - valid values are #{Supply::ReleaseStatus::ALL.join(', ')}",
224
+ default_value: Supply::ReleaseStatus::COMPLETED,
225
+ verify_block: proc do |value|
226
+ UI.user_error!("Value must be one of '#{Supply::RELEASE_STATUS}'") unless Supply::ReleaseStatus::ALL.include?(value)
227
+ end),
220
228
  FastlaneCore::ConfigItem.new(key: :validate_only,
221
229
  env_name: "SUPPLY_VALIDATE_ONLY",
222
230
  optional: true,
@@ -164,6 +164,10 @@ module Supply
164
164
  UI.user_error!(%(Cannot specify rollout percentage when the release status is set to 'draft'))
165
165
  end
166
166
 
167
+ if Supply.config[:track_promote_release_status] == Supply::ReleaseStatus::DRAFT && Supply.config[:rollout]
168
+ UI.user_error!(%(Cannot specify rollout percentage when the track promote release status is set to 'draft'))
169
+ end
170
+
167
171
  unless Supply.config[:version_codes_to_retain].nil?
168
172
  Supply.config[:version_codes_to_retain] = Supply.config[:version_codes_to_retain].map(&:to_i)
169
173
  end
@@ -182,7 +186,7 @@ module Supply
182
186
  end
183
187
  else
184
188
  releases = releases.select do |release|
185
- release.status == Supply::ReleaseStatus::COMPLETED
189
+ release.status == Supply.config[:release_status]
186
190
  end
187
191
  end
188
192
 
@@ -200,7 +204,7 @@ module Supply
200
204
  release.status = Supply::ReleaseStatus::IN_PROGRESS
201
205
  release.user_fraction = rollout
202
206
  else
203
- release.status = Supply::ReleaseStatus::COMPLETED
207
+ release.status = Supply.config[:track_promote_release_status]
204
208
  release.user_fraction = nil
205
209
  end
206
210
 
metadata CHANGED
@@ -1,38 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.199.0
4
+ version: 2.200.0
5
5
  platform: ruby
6
6
  authors:
7
- - Iulian Onofrei
8
- - Fumiya Nakamura
9
- - Aaron Brager
10
- - Olivier Halligon
11
- - Helmut Januschka
12
- - Manu Wallner
13
- - Luka Mirosevic
14
- - Jérôme Lacoste
15
7
  - Jimmy Dee
16
- - Felix Krause
17
- - Maksym Grebenets
18
- - Daniel Jankowski
8
+ - Jérôme Lacoste
19
9
  - Danielle Tomlinson
20
- - Satoshi Namai
10
+ - Maksym Grebenets
21
11
  - Matthew Ellis
22
- - Roger Oba
23
- - Manish Rathi
24
- - Jorge Revuelta H
25
12
  - Josh Holtz
13
+ - Luka Mirosevic
14
+ - Felix Krause
15
+ - Iulian Onofrei
16
+ - Satoshi Namai
17
+ - Jan Piotrowski
26
18
  - Joshua Liebowitz
27
- - Kohki Miki
19
+ - Manish Rathi
20
+ - Helmut Januschka
21
+ - Olivier Halligon
22
+ - Stefan Natchev
28
23
  - Max Ott
24
+ - Roger Oba
25
+ - Kohki Miki
29
26
  - Andrew McBurney
30
- - Jan Piotrowski
31
- - Stefan Natchev
27
+ - Jorge Revuelta H
28
+ - Daniel Jankowski
29
+ - Aaron Brager
30
+ - Fumiya Nakamura
31
+ - Manu Wallner
32
32
  autorequire:
33
33
  bindir: bin
34
34
  cert_chain: []
35
- date: 2021-12-10 00:00:00.000000000 Z
35
+ date: 2022-01-13 00:00:00.000000000 Z
36
36
  dependencies:
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: xcodeproj
@@ -1707,6 +1707,8 @@ files:
1707
1707
  - spaceship/lib/spaceship/connect_api/models/pre_release_version.rb
1708
1708
  - spaceship/lib/spaceship/connect_api/models/profile.rb
1709
1709
  - spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb
1710
+ - spaceship/lib/spaceship/connect_api/models/review_submission.rb
1711
+ - spaceship/lib/spaceship/connect_api/models/review_submission_item.rb
1710
1712
  - spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb
1711
1713
  - spaceship/lib/spaceship/connect_api/models/territory.rb
1712
1714
  - spaceship/lib/spaceship/connect_api/models/user.rb