xcjobs 0.1.2 → 0.2.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 +4 -4
- data/README.md +6 -1
- data/circle.yml +6 -0
- data/lib/xcjobs/coverage.rb +2 -8
- data/lib/xcjobs/version.rb +1 -1
- data/lib/xcjobs/xcodebuild.rb +70 -25
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f32da1984b26234e750171374e06b8f80d4239e5
|
4
|
+
data.tar.gz: 58446dc2854f728e56bee1e98d3e4a465f6cfe62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccbb36c27d38e9128c63db56530007f3c06f0ba82b786e28cd8a14f0d0f2f0da4317a95f38adfe2240df30d67c4877254f99c1f80880b3da0a381b4bd6967cd7
|
7
|
+
data.tar.gz: 512b672869af92b52bb38072479340a838068f56f8f8e476c2983b9f02c2ab9295f3427bcff31c6bd9a5d93e790f71efa64a119e15b8ae62d7997bab53389c30
|
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# XCJobs
|
2
|
-
[](http://badge.fury.io/rb/xcjobs)
|
2
|
+
[](http://badge.fury.io/rb/xcjobs)
|
3
|
+
[](https://circleci.com/gh/kishikawakatsumi/xcjobs)
|
4
|
+
[](https://travis-ci.org/kishikawakatsumi/xcjobs)
|
5
|
+
[](https://coveralls.io/r/kishikawakatsumi/xcjobs?branch=master)
|
6
|
+
[](https://codeclimate.com/github/kishikawakatsumi/xcjobs)
|
7
|
+
[](https://gemnasium.com/kishikawakatsumi/xcjobs)
|
3
8
|
|
4
9
|
Support the automation of release process of iOS/OSX apps with CI
|
5
10
|
|
data/circle.yml
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
dependencies:
|
2
|
+
pre:
|
3
|
+
- case $CIRCLE_NODE_INDEX in 0) rvm use 1.9.3 --default ;; 1) rvm use 2.0.0 --default ;; 2) rvm use 2.1 --default ;; 3) rvm use 2.2 --default ;; esac
|
4
|
+
test:
|
5
|
+
override:
|
6
|
+
- ruby -v ; bundle exec rspec --format documentation --color spec: {parallel: true}
|
data/lib/xcjobs/coverage.rb
CHANGED
@@ -8,12 +8,6 @@ require 'digest/md5'
|
|
8
8
|
module XCJobs
|
9
9
|
module Coverage
|
10
10
|
|
11
|
-
def self.run_gcov(configuration_temp_dir)
|
12
|
-
Dir.glob("#{configuration_temp_dir}/**/*.gcda").each do |file|
|
13
|
-
system %[(cd "#{File.dirname(file)}" && gcov -l "#{file}")]
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
11
|
class Coveralls < Rake::TaskLib
|
18
12
|
include Rake::DSL if defined?(Rake::DSL)
|
19
13
|
|
@@ -109,9 +103,9 @@ module XCJobs
|
|
109
103
|
end
|
110
104
|
else
|
111
105
|
coverage[number.to_i - 1] = case count.strip
|
112
|
-
when
|
106
|
+
when '-'
|
113
107
|
nil
|
114
|
-
when
|
108
|
+
when '#####'
|
115
109
|
if text.strip == '}'
|
116
110
|
nil
|
117
111
|
else
|
data/lib/xcjobs/version.rb
CHANGED
data/lib/xcjobs/xcodebuild.rb
CHANGED
@@ -43,17 +43,6 @@ module XCJobs
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def coverage=(coverage)
|
47
|
-
@coverage = coverage
|
48
|
-
if coverage
|
49
|
-
add_build_setting('GCC_INSTRUMENT_PROGRAM_FLOW_ARCS', 'YES')
|
50
|
-
add_build_setting('GCC_GENERATE_TEST_COVERAGE_FILES', 'YES')
|
51
|
-
else
|
52
|
-
@build_settings.delete('GCC_INSTRUMENT_PROGRAM_FLOW_ARCS')
|
53
|
-
@build_settings.delete('GCC_GENERATE_TEST_COVERAGE_FILES')
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
46
|
def coverage_enabled
|
58
47
|
@coverage
|
59
48
|
end
|
@@ -84,11 +73,6 @@ module XCJobs
|
|
84
73
|
def run(cmd)
|
85
74
|
@before_action.call if @before_action
|
86
75
|
|
87
|
-
if coverage_enabled
|
88
|
-
out, status = Open3.capture2(*(cmd + ['-showBuildSettings']))
|
89
|
-
configuration_temp_dir = out.lines.grep(/\bCONFIGURATION_TEMP_DIR\b/).first.split('=').last.strip
|
90
|
-
end
|
91
|
-
|
92
76
|
if @formatter
|
93
77
|
puts (cmd + ['|', @formatter]).join(" ")
|
94
78
|
else
|
@@ -105,10 +89,6 @@ module XCJobs
|
|
105
89
|
|
106
90
|
status = wait_thrs.first.value
|
107
91
|
if status.success?
|
108
|
-
if coverage_enabled
|
109
|
-
XCJobs::Coverage.run_gcov(configuration_temp_dir)
|
110
|
-
end
|
111
|
-
|
112
92
|
@after_action.call(output, status) if @after_action
|
113
93
|
else
|
114
94
|
fail "xcodebuild failed (exited with status: #{status.exitstatus})"
|
@@ -124,10 +104,6 @@ module XCJobs
|
|
124
104
|
|
125
105
|
status = wait_thr.value
|
126
106
|
if status.success?
|
127
|
-
if coverage_enabled
|
128
|
-
XCJobs::Coverage.run_gcov(configuration_temp_dir)
|
129
|
-
end
|
130
|
-
|
131
107
|
@after_action.call(output, status) if @after_action
|
132
108
|
else
|
133
109
|
fail "xcodebuild failed (exited with status: #{status.exitstatus})"
|
@@ -144,6 +120,7 @@ module XCJobs
|
|
144
120
|
opts.concat(['-scheme', scheme]) if scheme
|
145
121
|
opts.concat(['-sdk', sdk]) if sdk
|
146
122
|
opts.concat(['-configuration', configuration]) if configuration
|
123
|
+
opts.concat(['-enableCodeCoverage', 'YES']) if coverage_enabled
|
147
124
|
opts.concat(['-derivedDataPath', build_dir]) if build_dir
|
148
125
|
|
149
126
|
@destinations.each do |destination|
|
@@ -180,10 +157,78 @@ module XCJobs
|
|
180
157
|
add_build_setting('CODE_SIGN_IDENTITY', '""')
|
181
158
|
add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
|
182
159
|
end
|
183
|
-
|
160
|
+
if sdk == 'macosx'
|
161
|
+
add_build_setting('CONFIGURATION_BUILD_DIR', File.expand_path(build_dir)) if build_dir
|
162
|
+
end
|
163
|
+
add_build_setting('CONFIGURATION_TEMP_DIR', File.join(build_dir, 'temp')) if build_dir
|
184
164
|
add_build_setting('GCC_SYMBOLS_PRIVATE_EXTERN', 'NO')
|
185
165
|
|
186
166
|
run(['xcodebuild', 'test'] + options)
|
167
|
+
|
168
|
+
if coverage_enabled
|
169
|
+
out, status = Open3.capture2(*(['xcodebuild', 'test'] + options + ['-showBuildSettings']))
|
170
|
+
|
171
|
+
configuration_build_dir = out.lines.grep(/\bCONFIGURATION_BUILD_DIR\b/).first.split('=').last.strip
|
172
|
+
project_temp_root = out.lines.grep(/\bPROJECT_TEMP_ROOT\b/).first.split('=').last.strip
|
173
|
+
object_file_dir_normal = out.lines.grep(/\bOBJECT_FILE_DIR_normal\b/).first.split('=').last.strip
|
174
|
+
current_arch = out.lines.grep(/\bCURRENT_ARCH\b/).first.split('=').last.strip
|
175
|
+
executable_name = out.lines.grep(/\bEXECUTABLE_NAME\b/).first.split('=').last.strip
|
176
|
+
executable_path = out.lines.grep(/\bEXECUTABLE_PATH\b/).first.split('=').last.strip
|
177
|
+
|
178
|
+
if sdk.start_with 'iphone'
|
179
|
+
target_path = File.join(File.join(object_file_dir_normal, current_arch), executable_name)
|
180
|
+
elsif sdk == 'macosx'
|
181
|
+
target_path = File.join(configuration_build_dir, executable_path)
|
182
|
+
end
|
183
|
+
|
184
|
+
code_coverage_dir = File.join(project_temp_root, 'CodeCoverage')
|
185
|
+
profdata_dir = File.join(code_coverage_dir, scheme)
|
186
|
+
profdata_path = File.join(profdata_dir, 'Coverage.profdata')
|
187
|
+
|
188
|
+
gcov_file = {}
|
189
|
+
source_path = ''
|
190
|
+
|
191
|
+
cmd = ['xcrun', 'llvm-cov', 'report']
|
192
|
+
opts = ['-instr-profile', profdata_path, target_path, '-use-color=0']
|
193
|
+
puts (cmd + opts).join(" ")
|
194
|
+
out, status = Open3.capture2(*(cmd + opts))
|
195
|
+
out.lines.each do |line|
|
196
|
+
puts line
|
197
|
+
end
|
198
|
+
|
199
|
+
cmd = ['xcrun', 'llvm-cov', 'show']
|
200
|
+
puts (cmd + opts).join(" ")
|
201
|
+
out, status = Open3.capture2(*(cmd + opts))
|
202
|
+
out.lines.each do |line|
|
203
|
+
match = /^(['"]?(?:\/[^\/]+)*['"]?):$/.match(line)
|
204
|
+
if match.to_a.count > 0
|
205
|
+
source_path = match.to_a[1]
|
206
|
+
gcov_file[source_path] = []
|
207
|
+
next
|
208
|
+
end
|
209
|
+
|
210
|
+
match = /^[ ]*([0-9]+|[ ]+)\|[ ]*([0-9]+)\|(.*)$/.match(line)
|
211
|
+
next unless match.to_a.count == 4
|
212
|
+
count, number, text = match.to_a[1..3]
|
213
|
+
|
214
|
+
execution_count = case count.strip
|
215
|
+
when ''
|
216
|
+
'-'.rjust(5)
|
217
|
+
when '0'
|
218
|
+
'#####'
|
219
|
+
else count
|
220
|
+
end
|
221
|
+
gcov_file[source_path] << "#{execution_count.rjust(5)}:#{number.rjust(5)}:#{text}"
|
222
|
+
end
|
223
|
+
|
224
|
+
gcov_file.each do |key, value|
|
225
|
+
gcon_path = File.join(File.dirname(target_path), "#{File.basename(target_path)}.gcov")
|
226
|
+
file = File::open(gcon_path, "w")
|
227
|
+
file.puts("#{'-'.rjust(5)}:#{'0'.rjust(5)}:Source:#{key}")
|
228
|
+
file.puts(value)
|
229
|
+
file.flush
|
230
|
+
end
|
231
|
+
end
|
187
232
|
end
|
188
233
|
end
|
189
234
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcjobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kishikawa katsumi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- LICENSE
|
81
81
|
- README.md
|
82
82
|
- Rakefile
|
83
|
+
- circle.yml
|
83
84
|
- lib/xcjobs.rb
|
84
85
|
- lib/xcjobs/certificate.rb
|
85
86
|
- lib/xcjobs/coverage.rb
|
@@ -119,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
120
|
version: '0'
|
120
121
|
requirements: []
|
121
122
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.4.5
|
123
|
+
rubygems_version: 2.4.5.1
|
123
124
|
signing_key:
|
124
125
|
specification_version: 4
|
125
126
|
summary: Support the automation of release process of iOS/OSX apps with CI
|