fastlane 2.202.0 → 2.212.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +98 -98
  3. data/cert/lib/cert/runner.rb +15 -7
  4. data/deliver/lib/deliver/app_screenshot.rb +18 -0
  5. data/deliver/lib/deliver/options.rb +6 -2
  6. data/deliver/lib/deliver/runner.rb +76 -29
  7. data/deliver/lib/deliver/upload_price_tier.rb +3 -1
  8. data/deliver/lib/deliver/upload_screenshots.rb +1 -1
  9. data/fastlane/lib/assets/AppfileTemplate +1 -1
  10. data/fastlane/lib/assets/AppfileTemplate.swift +1 -1
  11. data/fastlane/lib/fastlane/actions/badge.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/danger.rb +14 -0
  14. data/fastlane/lib/fastlane/actions/docs/build_app.md +5 -5
  15. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +19 -2
  16. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  17. data/fastlane/lib/fastlane/actions/docs/run_tests.md +1 -1
  18. data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/git_commit.rb +4 -6
  20. data/fastlane/lib/fastlane/actions/import_certificate.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/pod_push.rb +19 -1
  23. data/fastlane/lib/fastlane/actions/read_podspec.rb +1 -1
  24. data/fastlane/lib/fastlane/actions/run_tests.rb +11 -9
  25. data/fastlane/lib/fastlane/actions/setup_ci.rb +13 -4
  26. data/fastlane/lib/fastlane/actions/trainer.rb +2 -2
  27. data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +14 -4
  28. data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
  29. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +10 -1
  30. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +1 -1
  31. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  32. data/fastlane/lib/fastlane/actions/xcode_install.rb +5 -1
  33. data/fastlane/lib/fastlane/actions/xcode_select.rb +1 -1
  34. data/fastlane/lib/fastlane/actions/xcodebuild.rb +8 -2
  35. data/fastlane/lib/fastlane/actions/xcodes.rb +152 -0
  36. data/fastlane/lib/fastlane/actions/xcversion.rb +10 -15
  37. data/fastlane/lib/fastlane/cli_tools_distributor.rb +5 -0
  38. data/fastlane/lib/fastlane/commands_generator.rb +2 -1
  39. data/fastlane/lib/fastlane/fast_file.rb +18 -5
  40. data/fastlane/lib/fastlane/features.rb +3 -0
  41. data/fastlane/lib/fastlane/helper/xcodes_helper.rb +28 -0
  42. data/fastlane/lib/fastlane/helper/xcversion_helper.rb +0 -9
  43. data/fastlane/lib/fastlane/lane_manager.rb +1 -1
  44. data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
  45. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
  46. data/fastlane/lib/fastlane/setup/setup_ios.rb +1 -1
  47. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -1
  48. data/fastlane/lib/fastlane/swift_lane_manager.rb +11 -3
  49. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +54 -1
  50. data/fastlane/lib/fastlane/tools.rb +16 -0
  51. data/fastlane/lib/fastlane/version.rb +1 -1
  52. data/fastlane/swift/Actions.swift +1 -1
  53. data/fastlane/swift/Appfile.swift +2 -2
  54. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  55. data/fastlane/swift/Atomic.swift +150 -0
  56. data/fastlane/swift/ControlCommand.swift +1 -1
  57. data/fastlane/swift/Deliverfile.swift +2 -2
  58. data/fastlane/swift/DeliverfileProtocol.swift +8 -4
  59. data/fastlane/swift/Fastlane.swift +363 -184
  60. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +30 -20
  61. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +1 -1
  62. data/fastlane/swift/Gymfile.swift +2 -2
  63. data/fastlane/swift/GymfileProtocol.swift +7 -3
  64. data/fastlane/swift/LaneFileProtocol.swift +2 -2
  65. data/fastlane/swift/MainProcess.swift +3 -3
  66. data/fastlane/swift/Matchfile.swift +2 -2
  67. data/fastlane/swift/MatchfileProtocol.swift +21 -5
  68. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  69. data/fastlane/swift/Plugins.swift +1 -1
  70. data/fastlane/swift/Precheckfile.swift +2 -2
  71. data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
  72. data/fastlane/swift/RubyCommand.swift +1 -1
  73. data/fastlane/swift/RubyCommandable.swift +1 -1
  74. data/fastlane/swift/Runner.swift +10 -2
  75. data/fastlane/swift/RunnerArgument.swift +1 -1
  76. data/fastlane/swift/Scanfile.swift +2 -2
  77. data/fastlane/swift/ScanfileProtocol.swift +11 -3
  78. data/fastlane/swift/Screengrabfile.swift +2 -2
  79. data/fastlane/swift/ScreengrabfileProtocol.swift +3 -3
  80. data/fastlane/swift/Snapshotfile.swift +2 -2
  81. data/fastlane/swift/SnapshotfileProtocol.swift +4 -4
  82. data/fastlane/swift/SocketClient.swift +9 -5
  83. data/fastlane/swift/SocketClientDelegateProtocol.swift +2 -2
  84. data/fastlane/swift/SocketResponse.swift +1 -1
  85. data/fastlane/swift/formatting/Brewfile.lock.json +42 -24
  86. data/fastlane/swift/main.swift +1 -1
  87. data/fastlane/swift/upgrade_manifest.json +1 -1
  88. data/fastlane_core/README.md +1 -0
  89. data/fastlane_core/lib/fastlane_core/cert_checker.rb +79 -17
  90. data/fastlane_core/lib/fastlane_core/device_manager.rb +5 -1
  91. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +335 -20
  92. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -0
  93. data/fastlane_core/lib/fastlane_core/project.rb +19 -2
  94. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +4 -2
  95. data/frameit/lib/frameit/device.rb +1 -1
  96. data/frameit/lib/frameit/device_types.rb +9 -0
  97. data/frameit/lib/frameit/frame_downloader.rb +1 -1
  98. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  99. data/gym/lib/gym/options.rb +7 -0
  100. data/match/lib/match/change_password.rb +2 -0
  101. data/match/lib/match/commands_generator.rb +2 -1
  102. data/match/lib/match/encryption/openssl.rb +1 -1
  103. data/match/lib/match/encryption.rb +3 -0
  104. data/match/lib/match/generator.rb +1 -0
  105. data/match/lib/match/importer.rb +10 -1
  106. data/match/lib/match/migrate.rb +4 -3
  107. data/match/lib/match/module.rb +54 -2
  108. data/match/lib/match/nuke.rb +36 -47
  109. data/match/lib/match/options.rb +22 -1
  110. data/match/lib/match/runner.rb +25 -6
  111. data/match/lib/match/setup.rb +1 -1
  112. data/match/lib/match/spaceship_ensure.rb +4 -2
  113. data/match/lib/match/storage/gitlab/client.rb +102 -0
  114. data/match/lib/match/storage/gitlab/secure_file.rb +65 -0
  115. data/match/lib/match/storage/gitlab_secure_files.rb +182 -0
  116. data/match/lib/match/storage/google_cloud_storage.rb +7 -6
  117. data/match/lib/match/storage/s3_storage.rb +3 -3
  118. data/match/lib/match/storage.rb +4 -0
  119. data/match/lib/match/table_printer.rb +2 -1
  120. data/match/lib/match/utils.rb +15 -2
  121. data/pem/lib/pem/manager.rb +1 -1
  122. data/pilot/lib/pilot/build_manager.rb +33 -13
  123. data/pilot/lib/pilot/options.rb +6 -1
  124. data/scan/lib/scan/detect_values.rb +6 -0
  125. data/scan/lib/scan/options.rb +16 -1
  126. data/scan/lib/scan/runner.rb +33 -14
  127. data/scan/lib/scan/test_command_generator.rb +7 -1
  128. data/sigh/lib/sigh/download_all.rb +14 -2
  129. data/sigh/lib/sigh/module.rb +3 -1
  130. data/sigh/lib/sigh/options.rb +5 -0
  131. data/sigh/lib/sigh/runner.rb +12 -2
  132. data/snapshot/lib/assets/SnapshotHelper.swift +3 -3
  133. data/snapshot/lib/snapshot/options.rb +1 -1
  134. data/snapshot/lib/snapshot/reports_generator.rb +1 -0
  135. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +9 -2
  136. data/spaceship/lib/spaceship/client.rb +36 -25
  137. data/spaceship/lib/spaceship/connect_api/api_client.rb +10 -5
  138. data/spaceship/lib/spaceship/connect_api/models/actor.rb +26 -0
  139. data/spaceship/lib/spaceship/connect_api/models/app.rb +7 -5
  140. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +5 -0
  141. data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
  142. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  143. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +27 -10
  144. data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +9 -0
  145. data/spaceship/lib/spaceship/connect_api/models/build_bundle_file_sizes.rb +34 -0
  146. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +2 -1
  147. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
  148. data/spaceship/lib/spaceship/connect_api/models/device.rb +47 -4
  149. data/spaceship/lib/spaceship/connect_api/models/profile.rb +4 -0
  150. data/spaceship/lib/spaceship/connect_api/models/resolution_center_message.rb +29 -0
  151. data/spaceship/lib/spaceship/connect_api/models/resolution_center_thread.rb +67 -0
  152. data/spaceship/lib/spaceship/connect_api/models/review_rejection.rb +19 -0
  153. data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +13 -0
  154. data/spaceship/lib/spaceship/connect_api/models/user.rb +5 -0
  155. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +19 -0
  156. data/spaceship/lib/spaceship/connect_api/response.rb +10 -6
  157. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +33 -2
  158. data/spaceship/lib/spaceship/connect_api/token.rb +5 -2
  159. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +41 -8
  160. data/spaceship/lib/spaceship/connect_api.rb +6 -0
  161. data/spaceship/lib/spaceship/errors.rb +34 -0
  162. data/spaceship/lib/spaceship/hashcash.rb +52 -0
  163. data/spaceship/lib/spaceship/portal/certificate.rb +4 -3
  164. data/spaceship/lib/spaceship/tunes/app_ratings.rb +6 -6
  165. data/spaceship/lib/spaceship/tunes/iap_families.rb +1 -1
  166. data/spaceship/lib/spaceship/tunes/tunes.rb +0 -1
  167. data/spaceship/lib/spaceship/tunes/tunes_client.rb +79 -21
  168. data/spaceship/lib/spaceship/two_step_or_factor_client.rb +11 -3
  169. data/spaceship/lib/spaceship.rb +1 -0
  170. data/supply/lib/supply/client.rb +2 -7
  171. data/trainer/lib/assets/junit.xml.erb +9 -1
  172. data/trainer/lib/trainer/junit_generator.rb +2 -2
  173. data/trainer/lib/trainer/options.rb +1 -1
  174. data/trainer/lib/trainer/test_parser.rb +25 -3
  175. metadata +36 -33
  176. data/deliver/lib/deliver/.runner.rb.swp +0 -0
  177. data/deliver/lib/deliver/.submit_for_review.rb.swp +0 -0
  178. data/fastlane/lib/.DS_Store +0 -0
  179. data/fastlane/lib/fastlane/.DS_Store +0 -0
  180. data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
  181. data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
  182. data/spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp +0 -0
  183. data/spaceship/lib/spaceship/tunes/user_detail.rb +0 -15
  184. data/trainer/lib/.DS_Store +0 -0
@@ -9,7 +9,7 @@ require_relative 'errors'
9
9
  require_relative 'iap_subscription_pricing_tier'
10
10
  require_relative 'pricing_tier'
11
11
  require_relative 'territory'
12
- require_relative 'user_detail'
12
+ require_relative '../connect_api/response'
13
13
  module Spaceship
14
14
  # rubocop:disable Metrics/ClassLength
15
15
  class TunesClient < Spaceship::Client
@@ -72,13 +72,13 @@ module Spaceship
72
72
  puts("Looking for App Store Connect Team with name #{t_name}") if Spaceship::Globals.verbose?
73
73
 
74
74
  teams.each do |t|
75
- t_id = t['contentProvider']['contentProviderId'].to_s if t['contentProvider']['name'].casecmp(t_name).zero?
75
+ t_id = t['providerId'].to_s if t['name'].casecmp(t_name).zero?
76
76
  end
77
77
 
78
78
  puts("Could not find team with name '#{t_name}', trying to fallback to default team") if t_id.length.zero?
79
79
  end
80
80
 
81
- t_id = teams.first['contentProvider']['contentProviderId'].to_s if teams.count == 1
81
+ t_id = teams.first['providerId'].to_s if teams.count == 1
82
82
 
83
83
  if t_id.length > 0
84
84
  puts("Looking for App Store Connect Team with ID #{t_id}") if Spaceship::Globals.verbose?
@@ -92,11 +92,11 @@ module Spaceship
92
92
  loop do
93
93
  puts("Multiple #{'App Store Connect teams'.yellow} found, please enter the number of the team you want to use: ")
94
94
  if ENV["FASTLANE_HIDE_TEAM_INFORMATION"].to_s.length == 0
95
+ first_team = teams.first
95
96
  puts("Note: to automatically choose the team, provide either the App Store Connect Team ID, or the Team Name in your fastlane/Appfile:")
96
97
  puts("Alternatively you can pass the team name or team ID using the `FASTLANE_ITC_TEAM_ID` or `FASTLANE_ITC_TEAM_NAME` environment variable")
97
- first_team = teams.first["contentProvider"]
98
98
  puts("")
99
- puts(" itc_team_id \"#{first_team['contentProviderId']}\"")
99
+ puts(" itc_team_id \"#{first_team['providerId']}\"")
100
100
  puts("")
101
101
  puts("or")
102
102
  puts("")
@@ -106,7 +106,7 @@ module Spaceship
106
106
 
107
107
  # We're not using highline here, as spaceship doesn't have a dependency to fastlane_core or highline
108
108
  teams.each_with_index do |team, i|
109
- puts("#{i + 1}) \"#{team['contentProvider']['name']}\" (#{team['contentProvider']['contentProviderId']})")
109
+ puts("#{i + 1}) \"#{team['name']}\" (#{team['providerId']})")
110
110
  end
111
111
 
112
112
  unless Spaceship::Client::UserInterface.interactive?
@@ -119,7 +119,7 @@ module Spaceship
119
119
  team_to_use = teams[selected] if selected >= 0
120
120
 
121
121
  if team_to_use
122
- self.team_id = team_to_use['contentProvider']['contentProviderId'].to_s # actually set the team id here
122
+ self.team_id = team_to_use['providerId'].to_s # actually set the team id here
123
123
  return self.team_id
124
124
  end
125
125
  end
@@ -255,8 +255,68 @@ module Spaceship
255
255
  #####################################################
256
256
 
257
257
  def applications
258
- r = request(:get, 'ra/apps/manageyourapps/summary/v2')
259
- parse_response(r, 'data')['summaries']
258
+ # Doing this real bad puts for now until a more formal deprecation logic can get made
259
+ puts("Spaceship::Tunes::Application.all is deprecated")
260
+ puts(" It's using a temporary patch to keep it from raising an error but things may not work correctly")
261
+ puts(" Please consider switching to Spaceship::ConnectAPI if you can")
262
+ puts(" For more details - https://github.com/fastlane/fastlane/pull/20480")
263
+
264
+ # This legacy endpoint went offline around July 7th, 2022. This is a rough attempt
265
+ # at retrofitting using the newer App Store Connect API endpoints
266
+ #
267
+ # This could all be done easily with Spaceship::ConnectAPI::App.find but there were a lot of
268
+ # circular dependency issues that were very difficult to solve because. Spaceship::Tunes would be
269
+ # using Spaceship::ConnectAPI which uses Spaceship::Tunes
270
+ #
271
+ # However, using Spaceship::ConnectAPI::Response works. This will fetch multiple pages of app
272
+ # if it needs to
273
+ #
274
+ # https://github.com/fastlane/fastlane/pull/20480
275
+ r = request(:get, "https://appstoreconnect.apple.com/iris/v1/apps?include=appStoreVersions,prices")
276
+ response = Spaceship::ConnectAPI::Response.new(
277
+ body: r.body,
278
+ status: r.status,
279
+ headers: r.headers,
280
+ client: nil
281
+ )
282
+
283
+ apps = response.all_pages do |url|
284
+ r = request(:get, url)
285
+ Spaceship::ConnectAPI::Response.new(
286
+ body: r.body,
287
+ status: r.status,
288
+ headers: r.headers,
289
+ client: nil
290
+ )
291
+ end.flat_map(&:to_models)
292
+
293
+ apps.map do |asc_app|
294
+ platforms = (asc_app.app_store_versions || []).map(&:platform).uniq.map do |asc_platform|
295
+ case asc_platform
296
+ when "TV_OS"
297
+ "appletvos"
298
+ when "MAC_OS"
299
+ "osx"
300
+ when "IOS"
301
+ "ios"
302
+ else
303
+ raise "Cannot find a matching platform for '#{asc_platform}'}"
304
+ end
305
+ end
306
+
307
+ {
308
+ 'adamId' => asc_app.id,
309
+ 'name' => asc_app.name,
310
+ 'vendorId' => "",
311
+ 'bundleId' => asc_app.bundle_id,
312
+ 'lastModifiedDate' => nil,
313
+ 'issuesCount' => nil,
314
+ 'iconUrl' => nil,
315
+ 'versionSets' => platforms.map do |platform|
316
+ { 'type' => 'app', 'platformString' => platform }
317
+ end
318
+ }
319
+ end
260
320
  end
261
321
 
262
322
  def app_details(app_id)
@@ -950,13 +1010,6 @@ module Spaceship
950
1010
  Spaceship::Tunes::AppVersionRef.factory(data)
951
1011
  end
952
1012
 
953
- # Fetches the User Detail information from ITC. This gets called often and almost never changes
954
- # so we cache it
955
- # @return [UserDetail] the response
956
- def user_detail_data
957
- @_cached_user_detail_data ||= Spaceship::Tunes::UserDetail.factory(user_details_data, self)
958
- end
959
-
960
1013
  #####################################################
961
1014
  # @!group CandiateBuilds
962
1015
  #####################################################
@@ -992,7 +1045,7 @@ module Spaceship
992
1045
  tries -= 1
993
1046
  if tries > 0
994
1047
  logger.warn("Received temporary server error from App Store Connect. Retrying the request...")
995
- sleep(3) unless Object.const_defined?("SpecHelper")
1048
+ sleep(3) unless Object.const_defined?(:SpecHelper)
996
1049
  retry
997
1050
  end
998
1051
  end
@@ -1560,7 +1613,7 @@ module Spaceship
1560
1613
  msg = "App Store Connect temporary error received: '#{ex.message}'. Retrying after #{seconds_to_sleep} seconds (remaining: #{tries})..."
1561
1614
  puts(msg)
1562
1615
  logger.warn(msg)
1563
- sleep(seconds_to_sleep) unless Object.const_defined?("SpecHelper")
1616
+ sleep(seconds_to_sleep) unless Object.const_defined?(:SpecHelper)
1564
1617
  retry
1565
1618
  end
1566
1619
  raise ex # re-raise the exception
@@ -1570,7 +1623,7 @@ module Spaceship
1570
1623
  msg = "Potential server error received: '#{ex.message}'. Retrying after 10 seconds (remaining: #{potential_server_error_tries})..."
1571
1624
  puts(msg)
1572
1625
  logger.warn(msg)
1573
- sleep(seconds_to_sleep) unless Object.const_defined?("SpecHelper")
1626
+ sleep(seconds_to_sleep) unless Object.const_defined?(:SpecHelper)
1574
1627
  retry
1575
1628
  end
1576
1629
  raise ex
@@ -1582,9 +1635,14 @@ module Spaceship
1582
1635
  @sso_token_for_video = nil
1583
1636
  end
1584
1637
 
1585
- # the contentProviderIr found in the UserDetail instance
1638
+ # the contentProviderId found in the user details data
1586
1639
  def content_provider_id
1587
- @content_provider_id ||= user_detail_data.content_provider_id
1640
+ return @content_provider_id if @content_provider_id
1641
+
1642
+ provider = user_details_data["provider"]["providerId"]
1643
+ @content_provider_id ||= provider.to_s if provider
1644
+
1645
+ return @content_provider_id
1588
1646
  end
1589
1647
 
1590
1648
  # the ssoTokenForImage found in the AppVersionRef instance
@@ -61,9 +61,17 @@ module Spaceship
61
61
 
62
62
  # Send token to server to get a valid session
63
63
  r = request(:post) do |req|
64
- req.url("https://idmsa.apple.com/appleauth/auth/verify/device/#{device_id}/securitycode")
64
+ req.url("https://idmsa.apple.com/appleauth/auth/verify/phone/securitycode")
65
65
  req.headers['Content-Type'] = 'application/json'
66
- req.body = { "code" => code.to_s }.to_json
66
+ req.body = {
67
+ "phoneNumber": {
68
+ "id": device_id
69
+ },
70
+ "securityCode": {
71
+ "code" => code.to_s
72
+ },
73
+ "mode": "sms"
74
+ }.to_json
67
75
  update_request_headers(req)
68
76
  end
69
77
 
@@ -164,7 +172,7 @@ module Spaceship
164
172
  body = { "securityCode" => { "code" => code.to_s } }.to_json
165
173
 
166
174
  # User exited by entering `sms` and wants to choose phone number for SMS
167
- if code == 'sms'
175
+ if code.casecmp?("sms")
168
176
  code_type = 'phone'
169
177
  body = request_two_factor_code_from_phone_choose(response.body["trustedPhoneNumbers"], code_length)
170
178
  end
@@ -3,6 +3,7 @@ require_relative 'spaceship/base'
3
3
  require_relative 'spaceship/client'
4
4
  require_relative 'spaceship/provider'
5
5
  require_relative 'spaceship/launcher'
6
+ require_relative 'spaceship/hashcash'
6
7
 
7
8
  # Middleware
8
9
  require_relative 'spaceship/stats_middleware'
@@ -266,14 +266,9 @@ module Supply
266
266
  filtered_tracks = tracks.select { |t| !t.releases.nil? && t.releases.any? { |r| r.name == version } }
267
267
 
268
268
  if filtered_tracks.length > 1
269
- # Production track takes precedence if version is present in multiple tracks
269
+ # Prefer tracks in production, beta, alpha, internal order
270
270
  # E.g.: A release might've been promoted from Alpha/Beta track. This means the release will be present in two or more tracks
271
- if filtered_tracks.any? { |t| t.track == Supply::Tracks::DEFAULT }
272
- filtered_tracks = filtered_tracks.select { |t| t.track == Supply::Tracks::DEFAULT }
273
- else
274
- # E.g.: A release might be in both Alpha & Beta (not sure if this is possible, just catching if it ever happens), giving Beta precedence.
275
- filtered_tracks = filtered_tracks.select { |t| t.track == Supply::Tracks::BETA }
276
- end
271
+ filtered_tracks = filtered_tracks.sort_by { |t| Supply::Tracks::DEFAULTS.index(t.track) || Float::INFINITY }
277
272
  end
278
273
 
279
274
  filtered_track = filtered_tracks.first
@@ -6,13 +6,21 @@
6
6
 
7
7
  <testsuites tests="<%= number_of_tests %>" failures="<%= number_of_failures %>">
8
8
  <% @results.each do |testsuite| %>
9
- <testsuite name=<%= (testsuite[:target_name].nil? ? testsuite[:test_name] : testsuite[:target_name]).encode(:xml => :attr) %> tests="<%= testsuite[:number_of_tests_excluding_retries] %>" failures="<%= testsuite[:number_of_failures_excluding_retries] %>" time="<%= testsuite[:duration] %>">
9
+ <testsuite name=<%= (testsuite[:target_name].nil? ? testsuite[:test_name] : testsuite[:target_name]).encode(:xml => :attr) %> tests="<%= testsuite[:number_of_tests_excluding_retries] %>" failures="<%= testsuite[:number_of_failures_excluding_retries] %>" <% if testsuite[:number_of_skipped] %>skipped="<%= testsuite[:number_of_skipped] %>" <% end %>time="<%= testsuite[:duration] %>">
10
+ <% unless testsuite[:configuration_name].nil? %>
11
+ <properties>
12
+ <property name="Configuration" value="<%= testsuite[:configuration_name] %>"/>
13
+ </properties>
14
+ <% end %>
10
15
  <% testsuite[:tests].each do |test| %>
11
16
  <testcase classname=<%= test[:test_group].encode(:xml => :attr) %> name=<%= test[:name].encode(:xml => :attr) %> time="<%= test[:duration] %>">
12
17
  <% (test[:failures] || []).each do |failure| %>
13
18
  <failure message=<%= failure[:failure_message].encode(:xml => :attr) %>>
14
19
  </failure>
15
20
  <% end %>
21
+ <% if test[:skipped] %>
22
+ <skipped/>
23
+ <% end %>
16
24
  </testcase>
17
25
  <% end %>
18
26
  </testsuite>
@@ -15,11 +15,11 @@ module Trainer
15
15
 
16
16
  lib_path = Trainer::ROOT
17
17
  xml_path = File.join(lib_path, "lib/assets/junit.xml.erb")
18
- xml = ERB.new(File.read(xml_path), nil, '<>').result(binding) # http://www.rrn.dk/rubys-erb-templating-system
18
+ xml = ERB.new(File.read(xml_path), trim_mode: '<>').result(binding) # http://www.rrn.dk/rubys-erb-templating-system
19
19
 
20
20
  xml = xml.gsub('system_', 'system-').delete("\e") # Jenkins can not parse 'ESC' symbol
21
21
 
22
- # We have to manuall clear empty lines
22
+ # We have to manually clear empty lines
23
23
  # They may contain white spaces
24
24
  clean_xml = []
25
25
  xml.each_line do |row|
@@ -32,7 +32,7 @@ module Trainer
32
32
  env_name: "TRAINER_OUTPUT_DIRECTORY",
33
33
  default_value: nil,
34
34
  optional: true,
35
- description: "Directoy in which the xml files should be written to. Same directory as source by default"),
35
+ description: "Directory in which the xml files should be written to. Same directory as source by default"),
36
36
  FastlaneCore::ConfigItem.new(key: :output_filename,
37
37
  short_option: "-f",
38
38
  env_name: "TRAINER_OUTPUT_FILENAME",
@@ -19,6 +19,7 @@ module Trainer
19
19
  attr_accessor :number_of_tests_excluding_retries
20
20
  attr_accessor :number_of_failures_excluding_retries
21
21
  attr_accessor :number_of_retries
22
+ attr_accessor :number_of_skipped
22
23
 
23
24
  # Returns a hash with the path being the key, and the value
24
25
  # defining if the tests were successful
@@ -89,7 +90,8 @@ module Trainer
89
90
  number_of_failures: tp.number_of_failures,
90
91
  number_of_tests_excluding_retries: tp.number_of_tests_excluding_retries,
91
92
  number_of_failures_excluding_retries: tp.number_of_failures_excluding_retries,
92
- number_of_retries: tp.number_of_retries
93
+ number_of_retries: tp.number_of_retries,
94
+ number_of_skipped: tp.number_of_skipped
93
95
  }
94
96
  end
95
97
  return_hash
@@ -116,12 +118,14 @@ module Trainer
116
118
  self.number_of_tests_excluding_retries = 0
117
119
  self.number_of_failures_excluding_retries = 0
118
120
  self.number_of_retries = 0
121
+ self.number_of_skipped = 0
119
122
  self.data.each do |thing|
120
123
  self.number_of_tests += thing[:number_of_tests].to_i
121
124
  self.number_of_failures += thing[:number_of_failures].to_i
122
125
  self.number_of_tests_excluding_retries += thing[:number_of_tests_excluding_retries].to_i
123
126
  self.number_of_failures_excluding_retries += thing[:number_of_failures_excluding_retries].to_i
124
127
  self.number_of_retries += thing[:number_of_retries].to_i
128
+ self.number_of_skipped += thing[:number_of_skipped].to_i
125
129
  end
126
130
  end
127
131
 
@@ -132,7 +136,7 @@ module Trainer
132
136
 
133
137
  # @return [Bool] were all tests successful? Is false if at least one test failed
134
138
  def tests_successful?
135
- self.data.collect { |a| a[:number_of_failures] }.all?(&:zero?)
139
+ self.data.collect { |a| a[:number_of_failures_excluding_retries] }.all?(&:zero?)
136
140
  end
137
141
 
138
142
  private
@@ -226,6 +230,8 @@ module Trainer
226
230
  all_summaries = summaries.map(&:summaries).flatten
227
231
  testable_summaries = all_summaries.map(&:testable_summaries).flatten
228
232
 
233
+ summaries_to_names = test_summaries_to_configuration_names(all_summaries)
234
+
229
235
  # Maps ActionTestableSummary to rows for junit generator
230
236
  rows = testable_summaries.map do |testable_summary|
231
237
  all_tests = testable_summary.all_tests.flatten
@@ -250,6 +256,7 @@ module Trainer
250
256
 
251
257
  info = tests_by_identifier[identifier] || {}
252
258
  info[:failure_count] ||= 0
259
+ info[:skip_count] ||= 0
253
260
  info[:success_count] ||= 0
254
261
 
255
262
  retry_count = info[:retry_count]
@@ -272,6 +279,9 @@ module Trainer
272
279
  }]
273
280
 
274
281
  info[:failure_count] += 1
282
+ elsif test.test_status == "Skipped"
283
+ test_row[:skipped] = true
284
+ info[:skip_count] += 1
275
285
  else
276
286
  info[:success_count] = 1
277
287
  end
@@ -309,6 +319,7 @@ module Trainer
309
319
  project_path: testable_summary.project_relative_path,
310
320
  target_name: testable_summary.target_name,
311
321
  test_name: testable_summary.name,
322
+ configuration_name: summaries_to_names[testable_summary],
312
323
  duration: all_tests.map(&:duration).inject(:+),
313
324
  tests: test_rows
314
325
  }
@@ -319,7 +330,8 @@ module Trainer
319
330
  # Used for seeing if any tests continued to fail after all of the Xcode 13 (and up) retries have finished
320
331
  unique_tests = tests_by_identifier.values || []
321
332
  row[:number_of_tests_excluding_retries] = unique_tests.count
322
- row[:number_of_failures_excluding_retries] = unique_tests.find_all { |a| a[:success_count] == 0 }.count
333
+ row[:number_of_skipped] = unique_tests.map { |a| a[:skip_count] }.inject(:+)
334
+ row[:number_of_failures_excluding_retries] = unique_tests.find_all { |a| (a[:success_count] + a[:skip_count]) == 0 }.count
323
335
  row[:number_of_retries] = unique_tests.map { |a| a[:retry_count] }.inject(:+)
324
336
 
325
337
  row
@@ -328,6 +340,16 @@ module Trainer
328
340
  self.data = rows
329
341
  end
330
342
 
343
+ def test_summaries_to_configuration_names(test_summaries)
344
+ summary_to_name = {}
345
+ test_summaries.each do |summary|
346
+ summary.testable_summaries.each do |testable_summary|
347
+ summary_to_name[testable_summary] = summary.name
348
+ end
349
+ end
350
+ summary_to_name
351
+ end
352
+
331
353
  # Convert the Hashes and Arrays in something more useful
332
354
  def parse_content(xcpretty_naming)
333
355
  self.data = self.raw_json["TestableSummaries"].collect do |testable_summary|
metadata CHANGED
@@ -1,39 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.202.0
4
+ version: 2.212.1
5
5
  platform: ruby
6
6
  authors:
7
- - Luka Mirosevic
8
- - Jérôme Lacoste
9
- - Aaron Brager
10
- - Danielle Tomlinson
11
- - Iulian Onofrei
12
- - Jimmy Dee
13
- - Matthew Ellis
7
+ - Roger Oba
14
8
  - Manish Rathi
15
- - Felix Krause
16
- - Satoshi Namai
17
9
  - Helmut Januschka
18
- - Max Ott
19
- - Andrew McBurney
20
- - Jan Piotrowski
21
- - Kohki Miki
22
- - Josh Holtz
23
10
  - Stefan Natchev
24
- - Roger Oba
25
- - Jorge Revuelta H
26
- - Olivier Halligon
27
- - Maksym Grebenets
28
11
  - Joshua Liebowitz
29
- - Manu Wallner
12
+ - Kohki Miki
13
+ - Jimmy Dee
14
+ - Jorge Revuelta H
15
+ - Andrew McBurney
16
+ - Satoshi Namai
17
+ - Josh Holtz
18
+ - Fumiya Nakamura
19
+ - Danielle Tomlinson
30
20
  - Łukasz Grabowski
21
+ - Luka Mirosevic
22
+ - Felix Krause
23
+ - Jérôme Lacoste
24
+ - Max Ott
25
+ - Manu Wallner
26
+ - Aaron Brager
27
+ - Maksym Grebenets
31
28
  - Daniel Jankowski
32
- - Fumiya Nakamura
29
+ - Olivier Halligon
30
+ - Iulian Onofrei
31
+ - Matthew Ellis
32
+ - Jan Piotrowski
33
33
  autorequire:
34
34
  bindir: bin
35
35
  cert_chain: []
36
- date: 2022-01-26 00:00:00.000000000 Z
36
+ date: 2023-02-24 00:00:00.000000000 Z
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: xcodeproj
@@ -973,8 +973,6 @@ files:
973
973
  - deliver/lib/assets/ScreenshotsHelp
974
974
  - deliver/lib/assets/summary.html.erb
975
975
  - deliver/lib/deliver.rb
976
- - deliver/lib/deliver/.runner.rb.swp
977
- - deliver/lib/deliver/.submit_for_review.rb.swp
978
976
  - deliver/lib/deliver/app_screenshot.rb
979
977
  - deliver/lib/deliver/app_screenshot_iterator.rb
980
978
  - deliver/lib/deliver/app_screenshot_validator.rb
@@ -996,7 +994,6 @@ files:
996
994
  - deliver/lib/deliver/upload_price_tier.rb
997
995
  - deliver/lib/deliver/upload_screenshots.rb
998
996
  - fastlane/README.md
999
- - fastlane/lib/.DS_Store
1000
997
  - fastlane/lib/assets/ActionDetails.md.erb
1001
998
  - fastlane/lib/assets/Actions.md.erb
1002
999
  - fastlane/lib/assets/AppfileTemplate
@@ -1015,10 +1012,8 @@ files:
1015
1012
  - fastlane/lib/assets/s3_plist_template.erb
1016
1013
  - fastlane/lib/assets/s3_version_template.erb
1017
1014
  - fastlane/lib/fastlane.rb
1018
- - fastlane/lib/fastlane/.DS_Store
1019
1015
  - fastlane/lib/fastlane/action.rb
1020
1016
  - fastlane/lib/fastlane/action_collector.rb
1021
- - fastlane/lib/fastlane/actions/.DS_Store
1022
1017
  - fastlane/lib/fastlane/actions/README.md
1023
1018
  - fastlane/lib/fastlane/actions/actions_helper.rb
1024
1019
  - fastlane/lib/fastlane/actions/adb.rb
@@ -1263,6 +1258,7 @@ files:
1263
1258
  - fastlane/lib/fastlane/actions/xcode_select.rb
1264
1259
  - fastlane/lib/fastlane/actions/xcode_server_get_assets.rb
1265
1260
  - fastlane/lib/fastlane/actions/xcodebuild.rb
1261
+ - fastlane/lib/fastlane/actions/xcodes.rb
1266
1262
  - fastlane/lib/fastlane/actions/xcov.rb
1267
1263
  - fastlane/lib/fastlane/actions/xctool.rb
1268
1264
  - fastlane/lib/fastlane/actions/xcversion.rb
@@ -1294,6 +1290,7 @@ files:
1294
1290
  - fastlane/lib/fastlane/helper/sh_helper.rb
1295
1291
  - fastlane/lib/fastlane/helper/xcodebuild_formatter_helper.rb
1296
1292
  - fastlane/lib/fastlane/helper/xcodeproj_helper.rb
1293
+ - fastlane/lib/fastlane/helper/xcodes_helper.rb
1297
1294
  - fastlane/lib/fastlane/helper/xcversion_helper.rb
1298
1295
  - fastlane/lib/fastlane/junit_generator.rb
1299
1296
  - fastlane/lib/fastlane/lane.rb
@@ -1356,6 +1353,7 @@ files:
1356
1353
  - fastlane/swift/Actions.swift
1357
1354
  - fastlane/swift/Appfile.swift
1358
1355
  - fastlane/swift/ArgumentProcessor.swift
1356
+ - fastlane/swift/Atomic.swift
1359
1357
  - fastlane/swift/ControlCommand.swift
1360
1358
  - fastlane/swift/Deliverfile.swift
1361
1359
  - fastlane/swift/DeliverfileProtocol.swift
@@ -1516,6 +1514,9 @@ files:
1516
1514
  - match/lib/match/spaceship_ensure.rb
1517
1515
  - match/lib/match/storage.rb
1518
1516
  - match/lib/match/storage/git_storage.rb
1517
+ - match/lib/match/storage/gitlab/client.rb
1518
+ - match/lib/match/storage/gitlab/secure_file.rb
1519
+ - match/lib/match/storage/gitlab_secure_files.rb
1519
1520
  - match/lib/match/storage/google_cloud_storage.rb
1520
1521
  - match/lib/match/storage/interface.rb
1521
1522
  - match/lib/match/storage/s3_storage.rb
@@ -1662,7 +1663,7 @@ files:
1662
1663
  - spaceship/lib/spaceship/connect_api/client.rb
1663
1664
  - spaceship/lib/spaceship/connect_api/file_uploader.rb
1664
1665
  - spaceship/lib/spaceship/connect_api/model.rb
1665
- - spaceship/lib/spaceship/connect_api/models/.app.rb.swp
1666
+ - spaceship/lib/spaceship/connect_api/models/actor.rb
1666
1667
  - spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
1667
1668
  - spaceship/lib/spaceship/connect_api/models/app.rb
1668
1669
  - spaceship/lib/spaceship/connect_api/models/app_category.rb
@@ -1701,6 +1702,7 @@ files:
1701
1702
  - spaceship/lib/spaceship/connect_api/models/build.rb
1702
1703
  - spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb
1703
1704
  - spaceship/lib/spaceship/connect_api/models/build_bundle.rb
1705
+ - spaceship/lib/spaceship/connect_api/models/build_bundle_file_sizes.rb
1704
1706
  - spaceship/lib/spaceship/connect_api/models/build_delivery.rb
1705
1707
  - spaceship/lib/spaceship/connect_api/models/bundle_id.rb
1706
1708
  - spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb
@@ -1713,6 +1715,9 @@ files:
1713
1715
  - spaceship/lib/spaceship/connect_api/models/pre_release_version.rb
1714
1716
  - spaceship/lib/spaceship/connect_api/models/profile.rb
1715
1717
  - spaceship/lib/spaceship/connect_api/models/reset_ratings_request.rb
1718
+ - spaceship/lib/spaceship/connect_api/models/resolution_center_message.rb
1719
+ - spaceship/lib/spaceship/connect_api/models/resolution_center_thread.rb
1720
+ - spaceship/lib/spaceship/connect_api/models/review_rejection.rb
1716
1721
  - spaceship/lib/spaceship/connect_api/models/review_submission.rb
1717
1722
  - spaceship/lib/spaceship/connect_api/models/review_submission_item.rb
1718
1723
  - spaceship/lib/spaceship/connect_api/models/sandbox_tester.rb
@@ -1723,7 +1728,6 @@ files:
1723
1728
  - spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb
1724
1729
  - spaceship/lib/spaceship/connect_api/response.rb
1725
1730
  - spaceship/lib/spaceship/connect_api/spaceship.rb
1726
- - spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp
1727
1731
  - spaceship/lib/spaceship/connect_api/testflight/client.rb
1728
1732
  - spaceship/lib/spaceship/connect_api/testflight/testflight.rb
1729
1733
  - spaceship/lib/spaceship/connect_api/token.rb
@@ -1737,6 +1741,7 @@ files:
1737
1741
  - spaceship/lib/spaceship/du/utilities.rb
1738
1742
  - spaceship/lib/spaceship/errors.rb
1739
1743
  - spaceship/lib/spaceship/globals.rb
1744
+ - spaceship/lib/spaceship/hashcash.rb
1740
1745
  - spaceship/lib/spaceship/helper/net_http_generic_request.rb
1741
1746
  - spaceship/lib/spaceship/helper/plist_middleware.rb
1742
1747
  - spaceship/lib/spaceship/helper/rels_middleware.rb
@@ -1830,7 +1835,6 @@ files:
1830
1835
  - spaceship/lib/spaceship/tunes/tunes.rb
1831
1836
  - spaceship/lib/spaceship/tunes/tunes_base.rb
1832
1837
  - spaceship/lib/spaceship/tunes/tunes_client.rb
1833
- - spaceship/lib/spaceship/tunes/user_detail.rb
1834
1838
  - spaceship/lib/spaceship/tunes/version_set.rb
1835
1839
  - spaceship/lib/spaceship/two_step_or_factor_client.rb
1836
1840
  - spaceship/lib/spaceship/ui.rb
@@ -1847,7 +1851,6 @@ files:
1847
1851
  - supply/lib/supply/release_listing.rb
1848
1852
  - supply/lib/supply/setup.rb
1849
1853
  - supply/lib/supply/uploader.rb
1850
- - trainer/lib/.DS_Store
1851
1854
  - trainer/lib/assets/junit.xml.erb
1852
1855
  - trainer/lib/trainer.rb
1853
1856
  - trainer/lib/trainer/commands_generator.rb
@@ -1891,14 +1894,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1891
1894
  requirements:
1892
1895
  - - ">="
1893
1896
  - !ruby/object:Gem::Version
1894
- version: '2.5'
1897
+ version: '2.6'
1895
1898
  required_rubygems_version: !ruby/object:Gem::Requirement
1896
1899
  requirements:
1897
1900
  - - ">="
1898
1901
  - !ruby/object:Gem::Version
1899
1902
  version: '0'
1900
1903
  requirements: []
1901
- rubygems_version: 3.2.3
1904
+ rubygems_version: 3.2.33
1902
1905
  signing_key:
1903
1906
  specification_version: 4
1904
1907
  summary: The easiest way to automate beta deployments and releases for your iOS and
Binary file
Binary file
Binary file
@@ -1,15 +0,0 @@
1
- require_relative 'tunes_base'
2
-
3
- module Spaceship
4
- module Tunes
5
- class UserDetail < TunesBase
6
- attr_accessor :content_provider_id
7
- attr_accessor :ds_id # used for the team selection (https://github.com/fastlane/fastlane/issues/6711)
8
-
9
- attr_mapping(
10
- 'contentProviderId' => :content_provider_id,
11
- 'sessionToken.dsId' => :ds_id
12
- )
13
- end
14
- end
15
- end
Binary file