trainer 0.1.3 → 0.2.0

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
  SHA1:
3
- metadata.gz: ea5f5a25b2bf4b4dc97a8eb2852329b2e6f162ac
4
- data.tar.gz: 145951b040f3ba7f303bed5daabf90f76ae21d68
3
+ metadata.gz: c9bd919dd0dc94df63dac316b75515bd599fa555
4
+ data.tar.gz: c7899ff83d99d07ed2c4a9afc10a1c1656dab42e
5
5
  SHA512:
6
- metadata.gz: 7c648fe59e528643f422ba0a87340608a2b1a6c2b97b2b514a2df2036d447384a396ee70f8e98f3bdfb3eb3b923377e22e835b4ec6b6c339a4548d9cf6cecd65
7
- data.tar.gz: 3ec4dc20b8a9f0274b3a8a1c064b0dddb7477031593e021f394ab5eac29760db9aeb53d3dd007d5a70ffc079df354c6d06a9f215a914ffab304adf8f731ccfc5
6
+ metadata.gz: cfcc1720af088d7285b8d8f53e323fb451148f814cd0df1c4acff9bf4ab0d5f84a757ad8c9902796f3c21e5e6e20875a958d4f0d96bf0b603e95e3a3bc8bb9c9
7
+ data.tar.gz: e00913b6fa064c578feb850816736498983970cddb406ff24c3a44e524fec737280d89e82c625f743e0635d2931ed38cdab7955c2c094f76d870ba8a897183e3
data/README.md CHANGED
@@ -1,10 +1,27 @@
1
1
  # trainer
2
2
 
3
+ [![Twitter: @KrauseFx](https://img.shields.io/badge/contact-@KrauseFx-blue.svg?style=flat)](https://twitter.com/KrauseFx)
4
+ [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/KrauseFx/trainer/blob/master/LICENSE)
5
+ [![Gem](https://img.shields.io/gem/v/trainer.svg?style=flat)](http://rubygems.org/gems/trainer)
6
+
3
7
  This is an alternative approach to generate JUnit files for your CI (e.g. Jenkins) without parsing the `xcodebuild` output, but using the Xcode `plist` files instead.
4
8
 
5
- The new Xcode beta has a known issue around not properly closing `stdout` ([Radar](https://openradar.appspot.com/27447948)), so you [can't use xcpretty](https://github.com/supermarin/xcpretty/issues/227).
9
+ Some Xcode versions has a known issue around not properly closing `stdout` ([Radar](https://openradar.appspot.com/27447948)), so you [can't use xcpretty](https://github.com/supermarin/xcpretty/issues/227).
10
+
11
+ `trainer` is a more robust and faster approach to generate JUnit reports for your CI system.
12
+
13
+ > By using `trainer`, the Twitter iOS code base now generates JUnit reports 10 times faster.
6
14
 
7
- `trainer` is a more robust approach on parsing test results based on the `plist` files that get generated by `xcodebuild`.
15
+ | [xcpretty](https://github.com/supermarin/xcpretty) | trainer
16
+ --------------------------|------------------------------|------------------------------
17
+ Prettify the `xcodebuild` output | :white_check_mark: | :no_entry_sign:
18
+ Generate JUnit reports | :white_check_mark: | :white_check_mark:
19
+ Generate HTML reports | :white_check_mark: | :no_entry_sign:
20
+ Works when the `xcodebuild` output format changed | :no_entry_sign: | :white_check_mark:
21
+ Show test execution duration | :white_check_mark: | :no_entry_sign:
22
+ Speed | :car: | :rocket:
23
+
24
+ [xcpretty](https://github.com/supermarin/xcpretty) is a great piece of software that is used across all [fastlane tools](https://fastlane.tools). `trainer` was built to have the minimum code to generate JUnit reports for your CI system.
8
25
 
9
26
  ## Use with [fastlane](https://fastlane.tools)
10
27
 
@@ -18,15 +35,25 @@ Now add the following to your `Fastfile`
18
35
 
19
36
  ```ruby
20
37
  lane :test do
21
- scan(workspace: "MyApp.xcworkspace",
22
- output_types: "",
23
- derived_data_path: "/tmp/fastlane_trainer/#{Time.now.to_i}")
24
- trainer
38
+ begin
39
+ scan(workspace: "Themoji.xcworkspace", scheme: "ThemojiUITests", output_types: "")
40
+ rescue => ex
41
+ failure = ex
42
+ end
43
+
44
+ trainer(output_directory: "/tmp/fastlane_trainer/#{Time.now.to_i}")
45
+ raise failure if failure
25
46
  end
26
47
  ```
27
48
 
28
49
  This will generate the JUnit file in the temporary location `/tmp/fastlane_trainer/[time]`. You can specify any path you want, just make sure to have it clean for every run so that your CI system knows which one to pick.
29
50
 
51
+ If you use circle, use the following to automatically publish the JUnit reports
52
+
53
+ ```ruby
54
+ trainer(output_directory: (ENV["CIRCLE_TEST_REPORTS"] || "/tmp"))
55
+ ```
56
+
30
57
  For more information, check out the [fastlane plugin docs](fastlane-plugin-trainer#readme).
31
58
 
32
59
  ## Without [fastlane](https://fastlane.tools)
@@ -52,7 +79,7 @@ If you use `fastlane`, check out the official [fastlane plugin](fastlane-plugin-
52
79
 
53
80
  ```
54
81
  cd [project]
55
- scan --derived_data_path "output"
82
+ scan --derived_data_path "output_dir"
56
83
  ```
57
84
 
58
85
  #### Convert the plist files to junit
@@ -77,7 +104,7 @@ trainer --help
77
104
 
78
105
  To make it easier for you and your contributors to see the test failures, you should start using [danger](http://danger.systems) with the [danger-junit](https://github.com/orta/danger-junit) plugin
79
106
 
80
- ![](https://raw.githubusercontent.com/orta/danger-junit/master/img/example.png)
107
+ ![](assets/danger-output.png)
81
108
 
82
109
  ### Thanks
83
110
 
@@ -86,3 +113,5 @@ After the [lobbying of @steipete](https://twitter.com/steipete/status/7536621708
86
113
  > How does Xcode Server parse the results?
87
114
 
88
115
  I started investigating alternative approaches on how to parse test results.
116
+
117
+ For more information about the plist files that are being used, check out [Michele's blog post](http://michele.io/test-logs-in-xcode).
@@ -9,7 +9,11 @@ module Trainer
9
9
  description: "Path to the directory that should be converted",
10
10
  verify_block: proc do |value|
11
11
  v = File.expand_path(value.to_s)
12
- UI.user_error!("Path '#{v}' is not a directory or can't be found") unless File.directory?(v)
12
+ if v.end_with?(".plist")
13
+ UI.user_error!("Can't find file at path #{v}") unless File.exist?(v)
14
+ else
15
+ UI.user_error!("Path '#{v}' is not a directory or can't be found") unless File.directory?(v)
16
+ end
13
17
  end),
14
18
  FastlaneCore::ConfigItem.new(key: :extension,
15
19
  short_option: "-e",
@@ -24,7 +28,7 @@ module Trainer
24
28
  env_name: "TRAINER_OUTPUT_DIRECTORY",
25
29
  default_value: nil,
26
30
  optional: true,
27
- description: "Directoy in which the xml files should be written to. Same directory as source by default"),
31
+ description: "Directoy in which the xml files should be written to. Same directory as source by default")
28
32
  ]
29
33
  end
30
34
  end
@@ -6,15 +6,24 @@ module Trainer
6
6
 
7
7
  attr_accessor :raw_json
8
8
 
9
+ # Returns a hash with the path being the key, and the value
10
+ # defining if the tests were successful
9
11
  def self.auto_convert(config)
12
+ FastlaneCore::PrintTable.print_values(config: config,
13
+ title: "Summary for trainer #{Trainer::VERSION}")
14
+
10
15
  containing_dir = config[:path]
11
16
  files = Dir["#{containing_dir}/**/Logs/Test/*TestSummaries.plist"]
12
17
  files += Dir["#{containing_dir}/Test/*TestSummaries.plist"]
13
18
  files += Dir["#{containing_dir}/*TestSummaries.plist"]
19
+ files += Dir[containing_dir] if containing_dir.end_with?(".plist") # if it's the exact path to a plist file
14
20
 
15
- UI.user_error!("No test result files found in directory '#{containing_dir}'") if files.empty?
21
+ if files.empty?
22
+ UI.user_error!("No test result files found in directory '#{containing_dir}', make sure the file name ends with 'TestSummaries.plist'")
23
+ end
16
24
 
17
- return files.collect do |path|
25
+ return_hash = {}
26
+ files.each do |path|
18
27
  if config[:output_directory]
19
28
  FileUtils.mkdir_p(config[:output_directory])
20
29
  filename = File.basename(path).gsub(".plist", config[:extension])
@@ -23,10 +32,13 @@ module Trainer
23
32
  to_path = path.gsub(".plist", config[:extension])
24
33
  end
25
34
 
26
- File.write(to_path, Trainer::TestParser.new(path).to_junit)
35
+ tp = Trainer::TestParser.new(path)
36
+ File.write(to_path, tp.to_junit)
27
37
  puts "Successfully generated '#{to_path}'"
28
- to_path
38
+
39
+ return_hash[to_path] = tp.tests_successful?
29
40
  end
41
+ return_hash
30
42
  end
31
43
 
32
44
  def initialize(path)
@@ -46,11 +58,17 @@ module Trainer
46
58
  JunitGenerator.new(self.data).generate
47
59
  end
48
60
 
61
+ # @return [Bool] were all tests successful? Is false if at least one test failed
62
+ def tests_successful?
63
+ self.data.collect { |a| a[:number_of_failures] }.all? { |a| a == 0 }
64
+ end
65
+
49
66
  private
50
67
 
51
68
  def ensure_file_valid!
52
69
  format_version = self.raw_json["FormatVersion"]
53
- UI.user_error!("Format version '#{format_version}' is not supported") unless format_version == "1.2"
70
+ supported_versions = ["1.1", "1.2"]
71
+ UI.user_error!("Format version '#{format_version}' is not supported, must be #{supported_versions.join(', ')}") unless supported_versions.include?(format_version)
54
72
  end
55
73
 
56
74
  # Convert the Hashes and Arrays in something more useful
@@ -1,4 +1,4 @@
1
1
  module Trainer
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  DESCRIPTION = "Convert xcodebuild plist files to JUnit reports"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trainer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-02 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane_core
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.48.1
19
+ version: 0.50.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.48.1
29
+ version: 0.50.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
@@ -158,9 +158,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  version: '0'
159
159
  requirements: []
160
160
  rubyforge_project:
161
- rubygems_version: 2.6.6
161
+ rubygems_version: 2.5.1
162
162
  signing_key:
163
163
  specification_version: 4
164
164
  summary: Convert xcodebuild plist files to JUnit reports
165
165
  test_files: []
166
- has_rdoc: