xcjobs 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xcjobs/version.rb +1 -1
- data/lib/xcjobs/xcodebuild.rb +50 -64
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 694d4c8a53b9a099ff689a38bb163e0d225f7327
|
4
|
+
data.tar.gz: d05a32b42325bc2887be5c5b7319608bfc37220e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea48a6001664419ebcecb65db4916711f43b781db685fccbfddda5dc1b60b51deeb6759f2b4ccef3d6d1b0d5dfd06c720c3e66315ff67af1cd7a364fa9e69750
|
7
|
+
data.tar.gz: 8f2966ae904065af2080c47771305ca6757e5f71a48c6278016561b12c8bb6be600cc9ed440fa5a6173fd87363ec7f901da9a00f0fd29244d100c4fab069489c
|
data/lib/xcjobs/version.rb
CHANGED
data/lib/xcjobs/xcodebuild.rb
CHANGED
@@ -31,7 +31,7 @@ module XCJobs
|
|
31
31
|
|
32
32
|
def initialize(name)
|
33
33
|
$stdout.sync = $stderr.sync = true
|
34
|
-
|
34
|
+
|
35
35
|
@name = name
|
36
36
|
@destinations = []
|
37
37
|
@only_testings = []
|
@@ -39,6 +39,7 @@ module XCJobs
|
|
39
39
|
@build_options = {}
|
40
40
|
@build_settings = {}
|
41
41
|
@unsetenv_others = false
|
42
|
+
@description = Rake.application.last_description # nil or given from "desc"
|
42
43
|
end
|
43
44
|
|
44
45
|
def project
|
@@ -174,7 +175,7 @@ module XCJobs
|
|
174
175
|
|
175
176
|
def initialize(name = :test)
|
176
177
|
super
|
177
|
-
@description
|
178
|
+
@description ||= 'test application'
|
178
179
|
@without_building = false
|
179
180
|
yield self if block_given?
|
180
181
|
define
|
@@ -185,66 +186,30 @@ module XCJobs
|
|
185
186
|
end
|
186
187
|
|
187
188
|
private
|
188
|
-
|
189
|
-
def
|
189
|
+
|
190
|
+
def show_coverage_report(profdata_path, target_path)
|
190
191
|
cmd = ['xcrun', 'llvm-cov', 'report']
|
191
192
|
opts = ['-instr-profile', profdata_path, target_path, '-use-color=0']
|
192
|
-
|
193
|
-
out, status = Open3.capture2(*(cmd + opts))
|
194
|
-
out.lines.each do |line|
|
195
|
-
puts line
|
196
|
-
end
|
193
|
+
sh *(cmd + opts)
|
197
194
|
end
|
198
|
-
|
199
|
-
def
|
200
|
-
puts 'Generage gcov file...'
|
195
|
+
|
196
|
+
def build_coverage_report(profdata_path, target_path)
|
201
197
|
gcov_file = {}
|
202
198
|
source_path = ''
|
203
|
-
|
199
|
+
|
204
200
|
cmd = ['xcrun', 'llvm-cov', 'show']
|
205
201
|
opts = ['-instr-profile', profdata_path, target_path, '-use-color=0']
|
206
|
-
|
207
|
-
|
208
|
-
out.lines.each do |line|
|
209
|
-
match = /^(['"]?(?:\/[^\/]+)*['"]?):$/.match(line)
|
210
|
-
if match.to_a.count > 0
|
211
|
-
source_path = match.to_a[1]
|
212
|
-
gcov_file[source_path] = []
|
213
|
-
next
|
214
|
-
end
|
215
|
-
|
216
|
-
match = /^[ ]*([0-9]+|[ ]+)\|[ ]*([0-9]+)\|(.*)$/.match(line)
|
217
|
-
next unless match.to_a.count == 4
|
218
|
-
count, number, text = match.to_a[1..3]
|
219
|
-
|
220
|
-
execution_count = case count.strip
|
221
|
-
when ''
|
222
|
-
'-'.rjust(5)
|
223
|
-
when '0'
|
224
|
-
'#####'
|
225
|
-
else count
|
226
|
-
end
|
227
|
-
gcov_file[source_path] << "#{execution_count.rjust(5)}:#{number.rjust(5)}:#{text}"
|
228
|
-
end
|
229
|
-
|
230
|
-
gcov_file.each do |key, value|
|
231
|
-
gcon_path = File.join(File.dirname(profdata_path), "#{SecureRandom.urlsafe_base64(6)}-#{File.basename(target_path)}.gcov")
|
232
|
-
file = File::open(gcon_path, "w")
|
233
|
-
file.puts("#{'-'.rjust(5)}:#{'0'.rjust(5)}:Source:#{key}")
|
234
|
-
file.puts(value)
|
235
|
-
file.flush
|
236
|
-
end
|
202
|
+
|
203
|
+
sh *(cmd + opts)
|
237
204
|
end
|
238
|
-
|
205
|
+
|
239
206
|
def coverage_report(options)
|
240
207
|
settings = build_settings(options)
|
241
|
-
|
242
|
-
xcode_version = `xcodebuild -version`.split("\n").first.scan(/\d+/).join('.')
|
243
|
-
|
208
|
+
|
244
209
|
targetSettings = settings.select { |key, _| settings[key]['PRODUCT_TYPE'] != 'com.apple.product-type.bundle.unit-test' }
|
245
210
|
targetSettings.each do |target, settings|
|
246
211
|
objroot = settings['OBJROOT']
|
247
|
-
|
212
|
+
|
248
213
|
product_type = settings['PRODUCT_TYPE']
|
249
214
|
if product_type == 'com.apple.product-type.framework' || product_type == 'com.apple.product-type.application'
|
250
215
|
if sdk.start_with?('iphone') && settings['ONLY_ACTIVE_ARCH'] == 'NO'
|
@@ -256,17 +221,17 @@ module XCJobs
|
|
256
221
|
elsif
|
257
222
|
raise %[Product type (PRODUCT_TYPE) '#{product_type}' is unsupported.]
|
258
223
|
end
|
259
|
-
|
224
|
+
|
260
225
|
profdata_path = Dir.glob(File.join(objroot, '/**/Coverage.profdata')).first
|
261
|
-
|
262
|
-
|
263
|
-
|
226
|
+
|
227
|
+
show_coverage_report(profdata_path, target_path)
|
228
|
+
build_coverage_report(profdata_path, target_path)
|
264
229
|
end
|
265
230
|
end
|
266
|
-
|
231
|
+
|
267
232
|
def build_settings(options)
|
268
233
|
out, status = Open3.capture2(*(['xcodebuild', 'test'] + options + ['-showBuildSettings']))
|
269
|
-
|
234
|
+
|
270
235
|
settings, target = {}, nil
|
271
236
|
out.lines.each do |line|
|
272
237
|
case line
|
@@ -286,25 +251,26 @@ module XCJobs
|
|
286
251
|
raise 'cannot specify both a scheme and targets' if scheme && target
|
287
252
|
|
288
253
|
desc @description
|
289
|
-
task @name do
|
254
|
+
task @name do
|
290
255
|
add_build_setting('GCC_SYMBOLS_PRIVATE_EXTERN', 'NO')
|
291
256
|
|
292
|
-
run(['xcodebuild',
|
257
|
+
run(['xcodebuild', command] + options)
|
293
258
|
|
294
259
|
if coverage_enabled
|
295
260
|
coverage_report(options)
|
296
261
|
end
|
297
262
|
end
|
298
263
|
end
|
264
|
+
|
265
|
+
def command
|
266
|
+
'test'
|
267
|
+
end
|
299
268
|
end
|
300
269
|
|
301
270
|
class Build < Xcodebuild
|
302
|
-
attr_accessor :for_testing
|
303
|
-
|
304
271
|
def initialize(name = :build)
|
305
272
|
super
|
306
|
-
@description
|
307
|
-
@for_testing = false
|
273
|
+
@description ||= 'build application'
|
308
274
|
yield self if block_given?
|
309
275
|
define
|
310
276
|
end
|
@@ -324,9 +290,29 @@ module XCJobs
|
|
324
290
|
add_build_setting('CODE_SIGN_IDENTITY', signing_identity) if signing_identity
|
325
291
|
add_build_setting('PROVISIONING_PROFILE', provisioning_profile_uuid) if provisioning_profile_uuid
|
326
292
|
|
327
|
-
run(['xcodebuild',
|
293
|
+
run(['xcodebuild', command] + options)
|
328
294
|
end
|
329
295
|
end
|
296
|
+
|
297
|
+
def command
|
298
|
+
'build'
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
class TestWithoutBuilding < Build
|
303
|
+
private
|
304
|
+
|
305
|
+
def command
|
306
|
+
'test-without-building'
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
class BuildForTesting < Build
|
311
|
+
private
|
312
|
+
|
313
|
+
def command
|
314
|
+
'build-for-testing'
|
315
|
+
end
|
330
316
|
end
|
331
317
|
|
332
318
|
class Archive < Xcodebuild
|
@@ -334,7 +320,7 @@ module XCJobs
|
|
334
320
|
|
335
321
|
def initialize(name = :archive)
|
336
322
|
super
|
337
|
-
@description
|
323
|
+
@description ||= 'make xcarchive'
|
338
324
|
yield self if block_given?
|
339
325
|
define
|
340
326
|
end
|
@@ -393,7 +379,7 @@ module XCJobs
|
|
393
379
|
def initialize(name = :export)
|
394
380
|
super
|
395
381
|
self.unsetenv_others = true
|
396
|
-
@description
|
382
|
+
@description ||= 'export from an archive'
|
397
383
|
@export_format = 'IPA'
|
398
384
|
yield self if block_given?
|
399
385
|
define
|
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.9.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: 2017-
|
11
|
+
date: 2017-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.6.11
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: Support the automation of release process of iOS/OSX apps with CI
|