fastlane-plugin-test_center 3.8.16 → 3.9.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b53bbbb4a17b23c0a0d1a3d6df0fcd24363427ae699d65b290742d8e7ad336f
4
- data.tar.gz: 1fd7e8b3f2faab7b441f1ce926693e4f34d4531ad43595ba0cf9cd3a7e4b89f9
3
+ metadata.gz: 19b265ec81e64e97efa222fe6ebc0e0f712ba161f2f0765972fef18d24a0a59e
4
+ data.tar.gz: ce5a8cd92d09416c3fa0b224abc16084512a51f4511e57a4edd4000a6d690da4
5
5
  SHA512:
6
- metadata.gz: d5127e1ed4d506b5cf86a67520fa4049c6e003b8426a597c5201aa9d2f1d7a7e7614353a87a6bf8039fbdf6a3f53d3ada52ca1fa2efb24a30a1c6c0b33f3fd2e
7
- data.tar.gz: c8311011c5e8cb872be4976f89f9756d95b8ffc59bc453405bfdad96e523ade239c7d5ba09db61ab0a0e6b0df2d9a2f4df4331bf40006887042756e7978e8f8c
6
+ metadata.gz: 1fd0f2e468e3e907e5b5cfdfbdcbfd547f8a2ab50ac30a0c46645e3b98f1d7a36f32c05ecff7cabd8555ff27b1489d219b627d26c3bf891866f40c24fa574cc9
7
+ data.tar.gz: 942b2b420fac25341a85a4a4245d8fbd62cb8ff39047ab70836e172e2cbd66ff7c9dd7a9694fe959383a9cc92512000b70b07cd38ded20443c04ddf96e1bc0c2
data/README.md CHANGED
@@ -21,7 +21,7 @@ Have you ever spent too much time trying to fix fragile tests only to give up wi
21
21
 
22
22
  ## Features
23
23
 
24
- This plugin makes testing your iOS app easier by providing you actions that give you greater control over everthing related to testing your app.
24
+ This plugin makes testing your iOS app easier by providing you actions that give you greater control over everything related to testing your app.
25
25
 
26
26
  `multi_scan` began when I created an action to only re-run the failed tests in order to determine if they were truly failing, or if they were failing randomly due to a fragile infrastructure. This action morphed into an entire plugin with many actions in the testing category.
27
27
 
@@ -41,6 +41,7 @@ _read the documentation on each action by clicking on the action name_
41
41
  | [`collate_html_reports`](docs/feature_details/collate_html_reports.md) | combines multiple HTML test reports into one report | ios, mac |
42
42
  | [`collate_json_reports`](docs/feature_details/collate_json_reports.md) | combines multiple json test reports into one report | ios, mac |
43
43
  | [`collate_test_result_bundles`](docs/feature_details/collate_test_result_bundles.md) | combines multiple test_result bundles into one test_result bundle | ios, mac |
44
+ | [`collate_xcresults`](docs/feature_details/collate_xcresults.md) | combines multiple xcresult bundles into one xcresult bundle | ios, mac |
44
45
 
45
46
 
46
47
  ## Installation
@@ -184,8 +184,7 @@ module Fastlane
184
184
  "in the collated test_result bundle. " \
185
185
  "This is done because it is assumed that fragile tests, when " \
186
186
  "re-run will often succeed due to less interference from other " \
187
- "tests and the subsequent test_result bundles will have fewer failing tests." \
188
- ""
187
+ "tests and the subsequent test_result bundles will have fewer failing tests."
189
188
  end
190
189
 
191
190
  def self.available_options
@@ -0,0 +1,111 @@
1
+ module Fastlane
2
+ module Actions
3
+ class CollateXcresultsAction < Action
4
+ require 'tempfile'
5
+
6
+ def self.run(params)
7
+ unless FastlaneCore::Helper.xcode_at_least?(11)
8
+ FastlaneCore::UI.error("Error: Xcode 11 is required to run this action")
9
+ return
10
+ end
11
+ commands_run = ''
12
+
13
+ xcresult_bundlepaths = params[:xcresults]
14
+ base_xcresult_path = xcresult_bundlepaths[0]
15
+
16
+ tmp_collated_xcresult_bundle = Tempfile.new(['collated_result_', '.xcresult'])
17
+ tmp_collated_xcresult_bundlepath = tmp_collated_xcresult_bundle.path
18
+ tmp_collated_xcresult_bundle.unlink
19
+
20
+ if xcresult_bundlepaths.size > 1
21
+ command = [
22
+ 'xcrun',
23
+ 'xcresulttool',
24
+ 'merge',
25
+ xcresult_bundlepaths.map(&:shellescape),
26
+ '--output-path',
27
+ tmp_collated_xcresult_bundlepath
28
+ ].flatten
29
+ commands_run = sh(*command)
30
+
31
+ FileUtils.rm_rf(params[:collated_xcresult])
32
+ FileUtils.cp_r(tmp_collated_xcresult_bundlepath, params[:collated_xcresult])
33
+ elsif File.realdirpath(xcresult_bundlepaths.first) != File.realdirpath(params[:collated_xcresult])
34
+ FileUtils.rm_rf(params[:collated_xcresult])
35
+ FileUtils.cp_r(base_xcresult_path, params[:collated_xcresult])
36
+ end
37
+
38
+ UI.message("Finished collating xcresults to '#{params[:collated_xcresult]}'")
39
+ commands_run
40
+ end
41
+
42
+ #####################################################
43
+ # @!group Documentation
44
+ #####################################################
45
+
46
+ def self.description
47
+ "🔸 Combines multiple xcresult bundles into one xcresult bundle"
48
+ end
49
+
50
+ def self.details
51
+ "The first xcresult bundle is used as the base bundle. " \
52
+ "Testcases that failed in previous bundles that no longer appear in " \
53
+ "later bundles are assumed to have passed in a re-run, thus not appearing " \
54
+ "in the collated xcresult bundle. " \
55
+ "This is done because it is assumed that fragile tests, when " \
56
+ "re-run will often succeed due to less interference from other " \
57
+ "tests and the subsequent xcresult bundles will have fewer failing tests."
58
+ end
59
+
60
+ def self.available_options
61
+ [
62
+ FastlaneCore::ConfigItem.new(
63
+ key: :xcresults,
64
+ env_name: 'COLLATE_XCRESULTS',
65
+ description: 'An array of xcresult bundles to collate',
66
+ optional: false,
67
+ type: Array,
68
+ verify_block: proc do |xcresult_bundles|
69
+ UI.user_error!('No xcresult bundles found') if xcresult_bundles.empty?
70
+ xcresult_bundles.each do |xcresult_bundle|
71
+ UI.user_error!("Error: xcresult bundle not found: '#{xcresult_bundle}'") unless Dir.exist?(xcresult_bundle)
72
+ end
73
+ end
74
+ ),
75
+ FastlaneCore::ConfigItem.new(
76
+ key: :collated_xcresult,
77
+ env_name: 'COLLATE_XCRESULTS',
78
+ description: 'The merged xcresult bundle',
79
+ optional: true,
80
+ default_value: 'result.xcresult',
81
+ type: String
82
+ )
83
+ ]
84
+ end
85
+
86
+ def self.example_code
87
+ [
88
+ "
89
+ UI.important(
90
+ 'example: ' \\
91
+ 'collate the xcresult bundles to a temporary xcresult bundle \"result.xcresult\"'
92
+ )
93
+ xcresults = Dir['../spec/fixtures/*.xcresult'].map { |relpath| File.absolute_path(relpath) }
94
+ collate_xcresults(
95
+ xcresults: xcresults,
96
+ collated_xcresult: File.join('test_output', 'result.xcresult')
97
+ )
98
+ "
99
+ ]
100
+ end
101
+
102
+ def self.authors
103
+ ["lyndsey-ferguson/@lyndseydf"]
104
+ end
105
+
106
+ def self.is_supported?(platform)
107
+ [:ios, :mac].include?(platform)
108
+ end
109
+ end
110
+ end
111
+ end
@@ -21,6 +21,13 @@ module Fastlane
21
21
  params[:output_files] = params[:output_files].split(',').map(&:strip).join(',')
22
22
  end
23
23
 
24
+ if FastlaneCore::Helper.xcode_at_least?('11.0.0')
25
+ if params[:result_bundle]
26
+ UI.important('As of Xcode 11, test_result bundles created in the output directory are actually symbolic links to an xcresult bundle')
27
+ end
28
+ elsif params[:output_types]&.include?('xcresult')
29
+ UI.important("The 'xcresult' :output_type is only supported for Xcode 11 and greater. You are using #{FastlaneCore::Helper.xcode_version}.")
30
+ end
24
31
  print_multi_scan_parameters(params)
25
32
  force_quit_simulator_processes if params[:quit_simulators]
26
33
 
@@ -73,6 +80,16 @@ module Fastlane
73
80
  end
74
81
 
75
82
  def self.run_summary(scan_options, tests_passed)
83
+ scan_options = scan_options.clone
84
+
85
+ if scan_options[:result_bundle]
86
+ updated_output_types, updated_output_files = ::TestCenter::Helper::ReportNameHelper.ensure_output_includes_xcresult(
87
+ scan_options[:output_types],
88
+ scan_options[:output_files]
89
+ )
90
+ scan_options[:output_types] = updated_output_types
91
+ scan_options[:output_files] = updated_output_files
92
+ end
76
93
  reportnamer = ::TestCenter::Helper::ReportNameHelper.new(
77
94
  scan_options[:output_types],
78
95
  scan_options[:output_files],
@@ -110,6 +127,11 @@ module Fastlane
110
127
  File.absolute_path(relative_test_result_bundle_filepath)
111
128
  end
112
129
  end
130
+ if reportnamer.includes_xcresult?
131
+ report_files += Dir.glob("#{scan_options[:output_directory]}/**/#{reportnamer.xcresult_fileglob}").map do |relative_bundlepath|
132
+ File.absolute_path(relative_bundlepath)
133
+ end
134
+ end
113
135
  {
114
136
  result: tests_passed,
115
137
  total_tests: passing_testcount + failed_tests.size,
@@ -188,6 +210,7 @@ module Fastlane
188
210
  )
189
211
  values = Scan.config.values(ask: false)
190
212
  values[:xcode_path] = File.expand_path("../..", FastlaneCore::Helper.xcode_path)
213
+ Scan.config._values.delete(:result_bundle)
191
214
  values
192
215
  end
193
216
 
@@ -307,7 +330,7 @@ module Fastlane
307
330
  key: :output_types,
308
331
  short_option: "-f",
309
332
  env_name: "SCAN_OUTPUT_TYPES",
310
- description: "Comma separated list of the output types (e.g. html, junit, json, json-compilation-database)",
333
+ description: "Comma separated list of the output types (e.g. html, junit, json, json-compilation-database, xcresult)",
311
334
  default_value: "html,junit"
312
335
  ),
313
336
  FastlaneCore::ConfigItem.new(
@@ -5,12 +5,14 @@ module TestCenter
5
5
  require_relative '../../actions/collate_html_reports'
6
6
  require_relative '../../actions/collate_json_reports'
7
7
  require_relative '../../actions/collate_test_result_bundles'
8
+ require_relative '../../actions/collate_xcresults'
8
9
 
9
10
  class ReportCollator
10
11
  CollateJunitReportsAction = Fastlane::Actions::CollateJunitReportsAction
11
12
  CollateHtmlReportsAction = Fastlane::Actions::CollateHtmlReportsAction
12
13
  CollateJsonReportsAction = Fastlane::Actions::CollateJsonReportsAction
13
14
  CollateTestResultBundlesAction = Fastlane::Actions::CollateTestResultBundlesAction
15
+ CollateXcresultsAction = Fastlane::Actions::CollateXcresultsAction
14
16
 
15
17
  def initialize(params)
16
18
  @source_reports_directory_glob = params[:source_reports_directory_glob]
@@ -27,6 +29,7 @@ module TestCenter
27
29
  collate_html_reports
28
30
  collate_json_reports
29
31
  collate_test_result_bundles
32
+ collate_xcresult_bundles
30
33
  end
31
34
 
32
35
  def sort_globbed_files(glob)
@@ -139,6 +142,31 @@ module TestCenter
139
142
  FileUtils.mv(test_result_bundlepaths.first, collated_test_result_bundlepath)
140
143
  end
141
144
  end
145
+
146
+ def collate_xcresult_bundles
147
+ return unless @reportnamer.includes_xcresult?
148
+
149
+ test_xcresult_bundlepaths = sort_globbed_files("#{@source_reports_directory_glob}/#{@reportnamer.xcresult_fileglob}")
150
+ xcresult_bundlename_suffix = ''
151
+ xcresult_bundlename_suffix = "-#{@reportnamer.report_count}" if @reportnamer.report_count > 0
152
+ collated_xcresult_bundlepath = File.absolute_path("#{File.join(@output_directory, @reportnamer.xcresult_bundlename(@suffix))}")
153
+ if test_xcresult_bundlepaths.size > 1
154
+ FastlaneCore::UI.verbose("Collating xcresult bundles #{test_xcresult_bundlepaths}")
155
+ config = create_config(
156
+ CollateXcresultsAction,
157
+ {
158
+ xcresults: test_xcresult_bundlepaths,
159
+ collated_xcresult: collated_xcresult_bundlepath
160
+ }
161
+ )
162
+ CollateXcresultsAction.run(config)
163
+ FileUtils.rm_rf(test_xcresult_bundlepaths - [collated_xcresult_bundlepath])
164
+ elsif test_xcresult_bundlepaths.size == 1 && File.realdirpath(test_xcresult_bundlepaths.first) != File.realdirpath(collated_xcresult_bundlepath)
165
+ FastlaneCore::UI.verbose("Copying xcresult bundle from #{test_xcresult_bundlepaths.first} to #{collated_xcresult_bundlepath}")
166
+ FileUtils.mkdir_p(File.dirname(collated_xcresult_bundlepath))
167
+ FileUtils.mv(test_xcresult_bundlepaths.first, collated_xcresult_bundlepath)
168
+ end
169
+ end
142
170
  end
143
171
  end
144
172
  end
@@ -21,6 +21,7 @@ module TestCenter
21
21
  # this allows multi_scan's `destination` option to be picked up by `scan`
22
22
  scan_config._values.delete(:device)
23
23
  scan_config._values.delete(:devices)
24
+ scan_config._values.delete(:result_bundle) if ReportNameHelper.includes_xcresult?(@options[:output_types])
24
25
  scan_cache.clear
25
26
  end
26
27
 
@@ -38,6 +38,8 @@ module TestCenter
38
38
  end
39
39
 
40
40
  def delete_xcresults
41
+ return if @reportnamer.includes_xcresult?
42
+
41
43
  derived_data_path = File.expand_path(@options[:derived_data_path] || Scan.config[:derived_data_path])
42
44
  xcresults = Dir.glob("#{derived_data_path}/Logs/Test/*.xcresult")
43
45
  if FastlaneCore::Helper.xcode_at_least?('11.0.0')
@@ -91,9 +93,13 @@ module TestCenter
91
93
  retrying_scan_options = @reportnamer.scan_options.merge(
92
94
  {
93
95
  output_directory: output_directory,
94
- xcargs: "#{xcargs} -parallel-testing-enabled NO"
96
+ xcargs: "#{xcargs} -parallel-testing-enabled NO "
95
97
  }
96
98
  )
99
+ if @reportnamer.includes_xcresult?
100
+ retrying_scan_options[:xcargs] += "-resultBundlePath '#{File.join(output_directory, @reportnamer.xcresult_last_bundlename)}' "
101
+ end
102
+
97
103
  @options.select { |k,v| valid_scan_keys.include?(k) }
98
104
  .merge(retrying_scan_options)
99
105
  end
@@ -292,7 +298,7 @@ module TestCenter
292
298
 
293
299
  def move_test_result_bundle_for_next_run
294
300
  return unless @options[:result_bundle]
295
-
301
+
296
302
  glob_pattern = "#{output_directory}/*.test_result"
297
303
  preexisting_test_result_bundles = Dir.glob(glob_pattern)
298
304
  unnumbered_test_result_bundles = preexisting_test_result_bundles.reject do |test_result|
@@ -16,10 +16,26 @@ module TestCenter
16
16
  clean: false,
17
17
  disable_concurrent_testing: true
18
18
  )
19
+ @result_bundle_desired = !!@options[:result_bundle]
20
+ if @options[:result_bundle] && FastlaneCore::Helper.xcode_at_least?('11.0.0')
21
+ update_options_to_use_xcresult_output
22
+ end
19
23
  @batch_count = 1 # default count. Will be updated by setup_testcollector
20
24
  setup_testcollector
21
25
  end
22
26
 
27
+ def update_options_to_use_xcresult_output
28
+ return @options unless @options[:result_bundle]
29
+
30
+ updated_output_types, updated_output_files = ReportNameHelper.ensure_output_includes_xcresult(
31
+ @options[:output_types],
32
+ @options[:output_files]
33
+ )
34
+ @options[:output_types] = updated_output_types
35
+ @options[:output_files] = updated_output_files
36
+ @options.reject! { |k,_| k == :result_bundle }
37
+ end
38
+
23
39
  def setup_testcollector
24
40
  return if @options[:invocation_based_tests] && @options[:only_testing].nil?
25
41
  return if @test_collector
@@ -42,6 +58,7 @@ module TestCenter
42
58
  def run
43
59
  ScanHelper.remove_preexisting_simulator_logs(@options)
44
60
  remove_preexisting_test_result_bundles
61
+ remote_preexisting_xcresult_bundles
45
62
 
46
63
  tests_passed = false
47
64
  if should_run_tests_through_single_try?
@@ -63,7 +80,7 @@ module TestCenter
63
80
 
64
81
 
65
82
  def remove_preexisting_test_result_bundles
66
- return unless @options[:result_bundle]
83
+ return unless @options[:result_bundle] || @options[:output_types]&.include?('xcresult')
67
84
 
68
85
  glob_pattern = "#{output_directory}/**/*.test_result"
69
86
  preexisting_test_result_bundles = Dir.glob(glob_pattern)
@@ -76,6 +93,20 @@ module TestCenter
76
93
  end
77
94
  end
78
95
 
96
+ def remote_preexisting_xcresult_bundles
97
+ return unless @options.fetch(:output_types, '').include?('xcresult')
98
+
99
+ glob_pattern = "#{output_directory}/**/*.xcresult"
100
+ preexisting_xcresult_bundles = Dir.glob(glob_pattern)
101
+ if preexisting_xcresult_bundles.size > 0
102
+ FastlaneCore::UI.verbose("Removing pre-existing xcresult bundles: ")
103
+ preexisting_xcresult_bundles.each do |test_result_bundle|
104
+ FastlaneCore::UI.verbose(" #{test_result_bundle}")
105
+ end
106
+ FileUtils.rm_rf(preexisting_xcresult_bundles)
107
+ end
108
+ end
109
+
79
110
  def run_tests_through_single_try
80
111
  FastlaneCore::UI.verbose("Running invocation tests")
81
112
  if @options[:invocation_based_tests]
@@ -108,6 +139,8 @@ module TestCenter
108
139
  @options[:only_testing] = retrieve_failed_single_try_tests
109
140
  @options[:only_testing] = @options[:only_testing].map(&:strip_testcase).uniq
110
141
 
142
+ symlink_result_bundle_to_xcresult(output_directory, reportnamer)
143
+
111
144
  tests_passed
112
145
  end
113
146
 
@@ -178,6 +211,17 @@ module TestCenter
178
211
  FileUtils.rm_rf(report_files_dir)
179
212
  end
180
213
 
214
+ def symlink_result_bundle_to_xcresult(output_dir, reportname_helper)
215
+ return unless @result_bundle_desired && reportname_helper.includes_xcresult?
216
+
217
+ xcresult_bundlename = reportname_helper.xcresult_bundlename
218
+ xcresult_bundlename_path = File.join(output_dir, xcresult_bundlename)
219
+ test_result_bundlename = File.basename(xcresult_bundlename, '.*') + '.test_result'
220
+ test_result_bundlename_path = File.join(output_dir, test_result_bundlename)
221
+ FileUtils.rm_rf(test_result_bundlename_path)
222
+ File.symlink(xcresult_bundlename_path, test_result_bundlename_path)
223
+ end
224
+
181
225
  def collate_batched_reports_for_testable(testable)
182
226
  FastlaneCore::UI.verbose("Collating results for all batches")
183
227
 
@@ -191,18 +235,21 @@ module TestCenter
191
235
  given_output_types = @options[:output_types]
192
236
  given_output_files = @options[:output_files]
193
237
 
238
+ report_name_helper = ReportNameHelper.new(
239
+ given_output_types,
240
+ given_output_files,
241
+ given_custom_report_file_name
242
+ )
243
+
194
244
  TestCenter::Helper::MultiScanManager::ReportCollator.new(
195
245
  source_reports_directory_glob: source_reports_directory_glob,
196
246
  output_directory: absolute_output_directory,
197
- reportnamer: ReportNameHelper.new(
198
- given_output_types,
199
- given_output_files,
200
- given_custom_report_file_name
201
- ),
247
+ reportnamer: report_name_helper,
202
248
  scheme: @options[:scheme],
203
249
  result_bundle: @options[:result_bundle]
204
250
  ).collate
205
251
  FileUtils.rm_rf(Dir.glob(source_reports_directory_glob))
252
+ symlink_result_bundle_to_xcresult(absolute_output_directory, report_name_helper)
206
253
  true
207
254
  end
208
255
  end
@@ -48,6 +48,10 @@ module TestCenter
48
48
  files.delete_at(json_index)
49
49
  types.delete_at(json_index)
50
50
  end
51
+ if (xcresult_index = types.find_index('xcresult'))
52
+ files.delete_at(xcresult_index)
53
+ types.delete_at(xcresult_index)
54
+ end
51
55
  files.map! do |filename|
52
56
  filename.chomp
53
57
  numbered_filename(filename)
@@ -141,6 +145,51 @@ module TestCenter
141
145
  def json_numbered_fileglob
142
146
  "#{File.basename(json_reportname, '.*')}-[1-9]*#{json_filextension}"
143
147
  end
148
+
149
+ def self.ensure_output_includes_xcresult(output_types, output_files)
150
+ return [output_types, output_files] if includes_xcresult?(output_types) || output_types.nil?
151
+
152
+ output_types = output_types.split(',').push('xcresult').join(',')
153
+ if output_files
154
+ output_files = output_files.split(',').push('report.xcresult').join(',')
155
+ end
156
+
157
+ [output_types, output_files]
158
+ end
159
+
160
+ def self.includes_xcresult?(output_types)
161
+ return false unless ::FastlaneCore::Helper.xcode_at_least?('11.0.0')
162
+ output_types && output_types.split(',').find_index('xcresult') != nil
163
+ end
164
+
165
+ def includes_xcresult?
166
+ self.class.includes_xcresult?(@output_types)
167
+ end
168
+
169
+ def xcresult_last_bundlename
170
+ xcresult_index = @output_types.split(',').find_index('xcresult')
171
+ numbered_filename(@output_files.to_s.split(',')[xcresult_index])
172
+ end
173
+
174
+ def xcresult_bundlename(suffix = '')
175
+ xcresult_index = @output_types.split(',').find_index('xcresult')
176
+ report_name = @output_files.to_s.split(',')[xcresult_index]
177
+ return report_name if suffix.empty?
178
+
179
+ "#{File.basename(report_name, '.*')}-#{suffix}#{xcresult_filextension}"
180
+ end
181
+
182
+ def xcresult_filextension
183
+ File.extname(xcresult_bundlename)
184
+ end
185
+
186
+ def xcresult_fileglob
187
+ "#{File.basename(xcresult_bundlename, '.*')}*#{xcresult_filextension}"
188
+ end
189
+
190
+ def xcresult_numbered_fileglob
191
+ "#{File.basename(xcresult_bundlename, '.*')}-[1-9]*#{xcresult_filextension}"
192
+ end
144
193
 
145
194
  def increment
146
195
  @report_count += 1
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module TestCenter
3
- VERSION = "3.8.16"
3
+ VERSION = "3.9.0.beta.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-test_center
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.8.16
4
+ version: 3.9.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lyndsey Ferguson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-26 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -261,6 +261,7 @@ files:
261
261
  - lib/fastlane/plugin/test_center/actions/collate_json_reports.rb
262
262
  - lib/fastlane/plugin/test_center/actions/collate_junit_reports.rb
263
263
  - lib/fastlane/plugin/test_center/actions/collate_test_result_bundles.rb
264
+ - lib/fastlane/plugin/test_center/actions/collate_xcresults.rb
264
265
  - lib/fastlane/plugin/test_center/actions/multi_scan.rb
265
266
  - lib/fastlane/plugin/test_center/actions/quit_core_simulator_service.rb
266
267
  - lib/fastlane/plugin/test_center/actions/suppress_tests.rb
@@ -301,9 +302,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
301
302
  version: '0'
302
303
  required_rubygems_version: !ruby/object:Gem::Requirement
303
304
  requirements:
304
- - - ">="
305
+ - - ">"
305
306
  - !ruby/object:Gem::Version
306
- version: '0'
307
+ version: 1.3.1
307
308
  requirements: []
308
309
  rubygems_version: 3.0.6
309
310
  signing_key: