xcknife 0.6.6 → 0.13.0
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 +5 -5
- data/.github/workflows/tests.yml +24 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +168 -0
- data/.ruby-version +1 -1
- data/.vscode/configure.sh +23 -0
- data/.vscode/vscode_ruby.json.template +44 -0
- data/Gemfile +10 -2
- data/Gemfile.lock +63 -0
- data/OWNERS.yml +2 -0
- data/README.md +9 -1
- data/Rakefile +16 -11
- data/TestDumper/README.md +2 -1
- data/TestDumper/TestDumper.xcodeproj/project.pbxproj +27 -5
- data/TestDumper/TestDumper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/TestDumper/TestDumper.xcodeproj/xcshareddata/xcschemes/TestDumper.xcscheme +1 -1
- data/TestDumper/TestDumper/Initialize.m +83 -44
- data/bin/xcknife +2 -0
- data/bin/xcknife-min +12 -15
- data/bin/xcknife-test-dumper +2 -0
- data/example/run_example.rb +10 -8
- data/example/xcknife-exemplar-historical-data.json-stream +3 -3
- data/example/xcknife-exemplar.json-stream +3 -3
- data/lib/xcknife.rb +3 -1
- data/lib/xcknife/events_analyzer.rb +11 -6
- data/lib/xcknife/exceptions.rb +6 -2
- data/lib/xcknife/json_stream_parser_helper.rb +8 -8
- data/lib/xcknife/runner.rb +18 -19
- data/lib/xcknife/stream_parser.rb +84 -37
- data/lib/xcknife/test_dumper.rb +283 -112
- data/lib/xcknife/xcscheme_analyzer.rb +9 -9
- data/lib/xcknife/xctool_cmd_helper.rb +28 -4
- data/xcknife.gemspec +8 -9
- metadata +15 -12
- data/.gitmodules +0 -3
- data/.travis.yml +0 -18
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rexml/document'
|
2
4
|
|
3
5
|
module XCKnife
|
@@ -8,20 +10,18 @@ module XCKnife
|
|
8
10
|
ret = {}
|
9
11
|
xml_root = REXML::Document.new(xscheme_data).root
|
10
12
|
|
11
|
-
|
12
|
-
action = xml_root.elements["//TestAction"]
|
13
|
+
action = xml_root.elements['//TestAction']
|
13
14
|
return ret if action.nil?
|
14
|
-
|
15
|
-
|
16
|
-
end
|
15
|
+
|
16
|
+
action = xml_root.elements['//LaunchAction'] if action.attributes['shouldUseLaunchSchemeArgsEnv'] == 'YES'
|
17
17
|
return ret if action.nil?
|
18
|
-
|
18
|
+
|
19
|
+
env_elements = action.elements['.//EnvironmentVariables']
|
19
20
|
return ret if env_elements.nil?
|
21
|
+
|
20
22
|
env_elements.elements.each do |e|
|
21
23
|
attrs = e.attributes
|
22
|
-
if attrs[
|
23
|
-
ret[attrs["key"]] = attrs["value"]
|
24
|
-
end
|
24
|
+
ret[attrs['key']] = attrs['value'] if attrs['isEnabled'] == 'YES'
|
25
25
|
end
|
26
26
|
ret
|
27
27
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'set'
|
2
4
|
|
3
5
|
module XCKnife
|
@@ -5,12 +7,14 @@ module XCKnife
|
|
5
7
|
def only_arguments_for_a_partition_set(output_type, partition_set)
|
6
8
|
method = "#{output_type}_only_arguments_for_a_partition_set"
|
7
9
|
raise "Unknown output_type: #{output_type}" unless respond_to?(method)
|
10
|
+
|
8
11
|
__send__(method, partition_set)
|
9
12
|
end
|
10
13
|
|
11
14
|
def only_arguments(output_type, partition)
|
12
15
|
method = "#{output_type}_only_arguments"
|
13
16
|
raise "Unknown output_type: #{output_type}" unless respond_to?(method)
|
17
|
+
|
14
18
|
__send__(method, partition)
|
15
19
|
end
|
16
20
|
|
@@ -25,12 +29,31 @@ module XCKnife
|
|
25
29
|
end
|
26
30
|
|
27
31
|
# only-testing is available since Xcode 8
|
28
|
-
|
29
|
-
|
32
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
33
|
+
def xcodebuild_only_arguments(single_partition, meta_partition = nil)
|
34
|
+
only_targets = Set.new
|
35
|
+
|
36
|
+
if meta_partition
|
37
|
+
filtered = meta_partition.flat_map(&:keys)
|
38
|
+
.group_by(&:to_s)
|
39
|
+
.select { |_, v| v.size == 1 }
|
40
|
+
.map(&:first)
|
41
|
+
.to_set
|
42
|
+
|
43
|
+
only_targets = single_partition.keys.to_set & filtered
|
44
|
+
end
|
45
|
+
|
46
|
+
only_target_arguments = only_targets.sort.map { |test_target| "-only-testing:#{test_target}" }
|
47
|
+
|
48
|
+
only_class_arguments = single_partition.flat_map do |test_target, classes|
|
49
|
+
next [] if only_targets.include?(test_target)
|
50
|
+
|
30
51
|
classes.sort.map do |clazz|
|
31
52
|
"-only-testing:#{test_target}/#{clazz}"
|
32
53
|
end
|
33
|
-
end
|
54
|
+
end.sort
|
55
|
+
|
56
|
+
only_target_arguments + only_class_arguments
|
34
57
|
end
|
35
58
|
|
36
59
|
# skip-testing is available since Xcode 8
|
@@ -50,4 +73,5 @@ module XCKnife
|
|
50
73
|
partition_set.map { |partition| xctool_only_arguments(partition) }
|
51
74
|
end
|
52
75
|
end
|
53
|
-
|
76
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
77
|
+
end
|
data/xcknife.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
4
6
|
require 'xcknife'
|
5
7
|
|
6
8
|
Gem::Specification.new do |s|
|
@@ -11,22 +13,19 @@ Gem::Specification.new do |s|
|
|
11
13
|
s.homepage = 'https://github.com/square/xcknife'
|
12
14
|
s.licenses = ['Apache-2.0']
|
13
15
|
|
14
|
-
s.summary =
|
16
|
+
s.summary = 'Simple tool for optimizing XCTest runs across machines'
|
15
17
|
s.description = <<-DESCRIPTION
|
16
18
|
Simple tool for optimizing XCTest runs across machines.
|
17
19
|
Works by leveraging xctool's json-streams timing and test data.
|
18
20
|
DESCRIPTION
|
19
21
|
|
20
|
-
|
21
|
-
s.metadata["allowed_push_host"] = 'https://rubygems.org'
|
22
|
-
|
23
|
-
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR).reject { |f| f =~ /^spec/} + ["TestDumper/TestDumper.dylib"]
|
22
|
+
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR).reject { |f| f =~ /^spec/ } + ['TestDumper/TestDumper.dylib']
|
24
23
|
s.bindir = 'bin'
|
25
|
-
s.executables
|
24
|
+
s.executables = %w[xcknife xcknife-min xcknife-test-dumper]
|
26
25
|
s.require_paths = ['lib']
|
27
26
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
28
27
|
|
29
|
-
s.required_ruby_version = '>= 2.
|
28
|
+
s.required_ruby_version = '>= 2.6.0'
|
30
29
|
|
31
30
|
s.add_development_dependency 'bundler', '~> 1.12'
|
32
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcknife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Ribeiro
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -37,19 +37,24 @@ executables:
|
|
37
37
|
extensions: []
|
38
38
|
extra_rdoc_files: []
|
39
39
|
files:
|
40
|
+
- ".github/workflows/tests.yml"
|
40
41
|
- ".gitignore"
|
41
|
-
- ".gitmodules"
|
42
42
|
- ".rspec"
|
43
|
+
- ".rubocop.yml"
|
43
44
|
- ".ruby-version"
|
44
|
-
- ".
|
45
|
+
- ".vscode/configure.sh"
|
46
|
+
- ".vscode/vscode_ruby.json.template"
|
45
47
|
- CONTRIBUTING.md
|
46
48
|
- Gemfile
|
49
|
+
- Gemfile.lock
|
47
50
|
- LICENSE
|
51
|
+
- OWNERS.yml
|
48
52
|
- README.md
|
49
53
|
- Rakefile
|
50
54
|
- TestDumper/README.md
|
51
55
|
- TestDumper/TestDumper.dylib
|
52
56
|
- TestDumper/TestDumper.xcodeproj/project.pbxproj
|
57
|
+
- TestDumper/TestDumper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
53
58
|
- TestDumper/TestDumper.xcodeproj/xcshareddata/xcschemes/TestDumper.xcscheme
|
54
59
|
- TestDumper/TestDumper/Info.plist
|
55
60
|
- TestDumper/TestDumper/Initialize.m
|
@@ -75,9 +80,8 @@ files:
|
|
75
80
|
homepage: https://github.com/square/xcknife
|
76
81
|
licenses:
|
77
82
|
- Apache-2.0
|
78
|
-
metadata:
|
79
|
-
|
80
|
-
post_install_message:
|
83
|
+
metadata: {}
|
84
|
+
post_install_message:
|
81
85
|
rdoc_options: []
|
82
86
|
require_paths:
|
83
87
|
- lib
|
@@ -85,16 +89,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
89
|
requirements:
|
86
90
|
- - ">="
|
87
91
|
- !ruby/object:Gem::Version
|
88
|
-
version: 2.
|
92
|
+
version: 2.6.0
|
89
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
94
|
requirements:
|
91
95
|
- - ">="
|
92
96
|
- !ruby/object:Gem::Version
|
93
97
|
version: '0'
|
94
98
|
requirements: []
|
95
|
-
|
96
|
-
|
97
|
-
signing_key:
|
99
|
+
rubygems_version: 3.0.1
|
100
|
+
signing_key:
|
98
101
|
specification_version: 4
|
99
102
|
summary: Simple tool for optimizing XCTest runs across machines
|
100
103
|
test_files: []
|
data/.gitmodules
DELETED
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
language: objective-c
|
2
|
-
sudo: false
|
3
|
-
matrix:
|
4
|
-
include:
|
5
|
-
- os: osx
|
6
|
-
osx_image: xcode8
|
7
|
-
- os: osx
|
8
|
-
osx_image: xcode8.1
|
9
|
-
- os: osx
|
10
|
-
osx_image: xcode8.2
|
11
|
-
|
12
|
-
before_script:
|
13
|
-
- export LANG=en_US.UTF-8
|
14
|
-
install: bundle
|
15
|
-
script:
|
16
|
-
- csrutil status
|
17
|
-
- git submodule update --init --recursive
|
18
|
-
- bundle exec rake build_test_dumper spec
|