fastlane-plugin-try_scan 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3bf2f28d3558be4e3d2cd068beb9a4968f1957532a554aa902134c0db1e5e05
4
- data.tar.gz: b4f5d09eede219e2425efce5487481947bee2a30075aac8448ba9f014ddbb48e
3
+ metadata.gz: 674d55524df14f5d8442d245b9d6bac1c076db872a47528b9e3c469e6c641fdc
4
+ data.tar.gz: 6a948848f0c9114bb2b35eccbad122e6c242867f2ad55c5a402918cf6127d732
5
5
  SHA512:
6
- metadata.gz: 575e434210450543a657cdcae55e88573183e552a2e12125d83ac4fc5cbdaa0ef715699268a6b1059a12f23ffb4a6fea47a3093683d95fc61146a6dc359d1b76
7
- data.tar.gz: 4670941d32adf903ff77ebf024555c40295ad64b7e267cb027b40def51d45183f4df0e1521778ac623857bb30a180e42990ac04b3aa30343083b3f9910992080
6
+ metadata.gz: b5c673c0d2738041016915e1028c1f78b2954c0bb8b8344e284703f4a99c4cfbfde4ecd0fc73f5740856731b1cc3fda528998580b015b1f031100e093b223292
7
+ data.tar.gz: e69f6713be6793ae96a559aaabbf0932b545430955dc070b8abdf7916d6f092598dfa5ca7ccf8414cc6583918c0f2ee6937906a377d66b131b8c1bc133d2c6ca
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Getting Started
6
6
 
7
- This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-try_scan`, add it to your project by running:
7
+ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `try_scan`, add it to your project by running:
8
8
 
9
9
  ```bash
10
10
  fastlane add_plugin try_scan
@@ -12,27 +12,16 @@ fastlane add_plugin try_scan
12
12
 
13
13
  ## About try_scan
14
14
 
15
- Simple way to retry your scan action
15
+ Simple way to retry your scan action 🚀
16
16
 
17
- **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
17
+ ## Usage
18
18
 
19
- ## Example
20
-
21
- Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
22
-
23
- **Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
24
-
25
- ## Run tests for this plugin
26
-
27
- To run both the tests, and code style validation, run
28
-
29
- ```
30
- rake
31
- ```
32
-
33
- To automatically fix many of the styling issues, use
34
- ```
35
- rubocop -a
19
+ ```ruby
20
+ try_scan(
21
+ workspace: "Example.xcworkspace",
22
+ devices: ["iPhone 6s", "iPad Air"],
23
+ try_count: 3
24
+ )
36
25
  ```
37
26
 
38
27
  ## Issues and Feedback
@@ -43,10 +32,6 @@ For any other issues and feedback about this plugin, please submit it to this re
43
32
 
44
33
  If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
45
34
 
46
- ## Using _fastlane_ Plugins
47
-
48
- For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
49
-
50
35
  ## About _fastlane_
51
36
 
52
37
  _fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
@@ -1,6 +1,7 @@
1
1
  module Fastlane
2
2
  module Actions
3
3
 
4
+ require 'json'
4
5
  require 'fastlane/actions/scan'
5
6
  require_relative '../helper/scan_helper'
6
7
  require_relative '../helper/try_scan_runner'
@@ -89,7 +90,7 @@ module Fastlane
89
90
  description: "The number of times to retry running tests via scan",
90
91
  type: Integer,
91
92
  is_string: false,
92
- default_value: 1
93
+ default_value: 0
93
94
  )
94
95
  ]
95
96
  end
@@ -5,7 +5,6 @@ module TryScanManager
5
5
 
6
6
  def initialize(options = {})
7
7
  @options = options
8
- warn_of_try_scan_option
9
8
  end
10
9
 
11
10
  def run
@@ -18,7 +17,7 @@ module TryScanManager
18
17
  Scan::Runner.new.run
19
18
  return true
20
19
  rescue FastlaneCore::Interface::FastlaneBuildFailure, FastlaneCore::Interface::FastlaneTestFailure => _
21
- merge_junit_reports if attempt != 1
20
+ update_scan_reports(attempt)
22
21
  return false if attempt > @options[:try_count]
23
22
 
24
23
  attempt += 1
@@ -28,7 +27,12 @@ module TryScanManager
28
27
  end
29
28
 
30
29
  def update_scan_config
31
- Scan.config[:output_types] << 'junit' unless Scan.config[:output_types].include?('junit')
30
+ if !Scan.config[:output_types].include?('junit') && !parallel_running?
31
+ output_types = Scan.config[:output_types].split(',')
32
+ output_types << 'junit'
33
+ Scan.config[:output_types] = output_types.join(',')
34
+ end
35
+ @options[:try_count] = 0 if @options[:try_count] < 0
32
36
  end
33
37
 
34
38
  def print_summary
@@ -51,13 +55,6 @@ module TryScanManager
51
55
  FastlaneCore::UI.important("TryScan shot №#{attempt}\n")
52
56
  end
53
57
 
54
- def warn_of_try_scan_option
55
- if @options[:try_count] <= 0
56
- FastlaneCore::UI.important(":try_count can't be less than or equal to zero. Setting a default value equal to `1`")
57
- @options[:try_count] = 1
58
- end
59
- end
60
-
61
58
  def clear_preexisting_data
62
59
  FastlaneScanHelper.remove_preexisting_simulator_logs(@options)
63
60
  FastlaneScanHelper.remove_preexisting_test_result_bundles(@options)
@@ -65,8 +62,14 @@ module TryScanManager
65
62
  FastlaneScanHelper.remove_report_files
66
63
  end
67
64
 
65
+ def update_scan_reports(attempt)
66
+ merge_junit_reports if attempt != 1 && !parallel_running?
67
+ end
68
+
68
69
  def update_scan_options
69
- scan_options = @options.select { |key, _| FastlaneScanHelper.valid_scan_keys.include?(key) }.merge(plugin_scan_options)
70
+ scan_options = @options.select { |key, _|
71
+ FastlaneScanHelper.valid_scan_keys.include?(key)
72
+ }.merge(plugin_scan_options)
70
73
  scan_options[:only_testing] = extract_failed_tests
71
74
  scan_options[:skip_build] = true
72
75
  scan_options[:test_without_building] = true
@@ -91,11 +94,24 @@ module TryScanManager
91
94
  FastlaneCore::UI.important('Disabling -quiet as failing tests cannot be found with it enabled.')
92
95
  xcargs.gsub!('-quiet', '')
93
96
  end
94
- xcargs.gsub!(/-parallel-testing-enabled(=|\s+)(YES|NO)/, '')
95
- @options.select { |k,v| FastlaneScanHelper.valid_scan_keys.include?(k) }.merge({ xcargs: "#{xcargs} -parallel-testing-enabled NO " })
97
+ @options.select { |key, _| FastlaneScanHelper.valid_scan_keys.include?(key) }.merge({ xcargs: xcargs })
96
98
  end
97
99
 
98
100
  def extract_failed_tests
101
+ if parallel_running?
102
+ extract_failed_tests_from_xcresult_report
103
+ else
104
+ extract_failed_tests_from_junit_report
105
+ end
106
+ end
107
+
108
+ def parallel_running?
109
+ return @options[:concurrent_workers].to_i > 0 ||
110
+ (@options[:devices] && @options[:devices].size > 1) ||
111
+ (@options[:xcargs] && (@options[:xcargs] =~ /-parallel-testing-enabled(=|\s+)YES/ || @options[:xcargs].split('-destination').size > 2))
112
+ end
113
+
114
+ def extract_failed_tests_from_junit_report
99
115
  report = junit_report
100
116
  suite_name = report.xpath('testsuites/@name').to_s.split('.')[0]
101
117
  test_cases = report.xpath('//testcase')
@@ -107,6 +123,7 @@ module TryScanManager
107
123
  test_name = test_case.xpath('@name')
108
124
  only_testing << "#{suite_name}/#{test_class}/#{test_name}"
109
125
  end
126
+ FastlaneCore::UI.verbose("Extracted tests to retry: #{only_testing}")
110
127
  only_testing
111
128
  end
112
129
 
@@ -141,5 +158,27 @@ module TryScanManager
141
158
 
142
159
  File.open(@junit_report_path, "w+") { |f| f.write(old_junit_report.to_xml) }
143
160
  end
161
+
162
+ def parse_xcresult_report
163
+ report_options = FastlaneScanHelper.report_options
164
+ output_directory = report_options.instance_variable_get(:@output_directory)
165
+ xcresult_report_files = Dir["#{output_directory}/*.xcresult"]
166
+ raise FastlaneCore::UI.test_failure!('There are no xcresult reports to parse') if xcresult_report_files.empty?
167
+
168
+ FastlaneCore::UI.verbose("Parsing xcresult report by path: '#{xcresult_report_files.first}'")
169
+ JSON.parse(`xcrun xcresulttool get --format json --path #{xcresult_report_files.first}`)
170
+ end
171
+
172
+ def extract_failed_tests_from_xcresult_report
173
+ only_testing = []
174
+ parse_xcresult_report['issues']['testFailureSummaries']['_values'].each do |failed_test|
175
+ suite_name = failed_test['producingTarget']['_value']
176
+ test_class = failed_test['testCaseName']['_value'].split('.').first
177
+ test_name = failed_test['testCaseName']['_value'].split('.')[1].split('(').first
178
+ only_testing << "#{suite_name}/#{test_class}/#{test_name}"
179
+ end
180
+ FastlaneCore::UI.verbose("Extracted tests to retry: #{only_testing}")
181
+ only_testing
182
+ end
144
183
  end
145
184
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module TryScan
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-try_scan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Alter-Pesotskiy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-09 00:00:00.000000000 Z
11
+ date: 2020-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry