cicd-builder 0.9.43 → 0.9.44

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: 3e630d2753c0ba54a1f36eba362f4d509559a26b
4
- data.tar.gz: e63f43e2a28215b442cdab10d474d4590b644ebc
3
+ metadata.gz: be47ca1bd0f4693e4b88daf215d83657cea3eab6
4
+ data.tar.gz: 90d1904eba2ecdaa0ae0c64ccf0ba6c83632fb91
5
5
  SHA512:
6
- metadata.gz: 1b39631241e15f227fe9e7b66bac9ea12f4f81beae53feb821f627afabc13df23dfdfb1bf9728c8aa5d6548e6fc8afdd2033abc8296239c8965705a03b3ecdad
7
- data.tar.gz: 51b3b2e948345991854091f846864f0e2677da40ddc840950119923e7e4113ff3b569d5ad2634f97f9e8e5889777e10b4065e29c8038d09babc89e67d5921f4a
6
+ metadata.gz: 42fac91c4652e1e509eed4cc9de9b7f097cf86bf4e46327146b22938ccb2a010e696a8e77dbf4d5af43170bba493cdf7f07389e7b3e2c0006b5f3457bdeab24e
7
+ data.tar.gz: d4edf11d4058baf5d37a22fc09158139083936c0bf20991f773b222f074f2a54a2c3d9125a340f4464c670c6d141e82f5566e92939c2ada597005da986215b84
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cicd-builder (0.9.43)
4
+ cicd-builder (0.9.44)
5
5
  artifactory (>= 2.2.1, < 2.3)
6
6
  awesome_print (>= 1.6, < 2.0)
7
7
  aws-sdk (>= 2.0, < 2.1)
data/lib/cicd/builder.rb CHANGED
@@ -68,11 +68,18 @@ module CiCd
68
68
  setup()
69
69
 
70
70
  ret = 0
71
- %w(checkEnvironment getVars prepareBuild makeBuild saveBuild uploadBuildArtifacts).each do |step|
71
+ %w(checkEnvironment getVars).each do |step|
72
72
  @logger.step "#{step}"
73
73
  ret = send(step)
74
74
  break unless ret == 0
75
- end
75
+ end
76
+ if ret == 0
77
+ @vars[:actions].each do |step|
78
+ @logger.step "#{step}"
79
+ ret = send(step)
80
+ break unless ret == 0
81
+ end
82
+ end
76
83
 
77
84
  @vars[:return_code]
78
85
  end
@@ -38,7 +38,8 @@ module CiCd
38
38
  @vars[:variant] = 'SNAPSHOT'
39
39
 
40
40
  if ENV.has_key?('PROJECT_NAME')
41
- @vars[:project_name] = ENV['PROJECT_NAME']
41
+ @vars[:product] =
42
+ @vars[:project_name] = ENV['PROJECT_NAME']
42
43
  end
43
44
 
44
45
  if ENV.has_key?('RELEASE')
@@ -63,6 +64,10 @@ module CiCd
63
64
  @vars[:build_store] = "#{ENV['BUILD_STORE']}"
64
65
  end
65
66
 
67
+ if ENV.has_key?('BRANCH')
68
+ @vars[:branch] = "#{ENV['BRANCH']}"
69
+ end
70
+
66
71
  if ENV.has_key?('VARIANT')
67
72
  @vars[:variant] = "#{ENV['VARIANT']}"
68
73
  end
@@ -71,7 +76,21 @@ module CiCd
71
76
  @vars[:build_num] = "#{ENV['BUILD_NUMBER']}"
72
77
  end
73
78
 
74
- @vars[:return_code] = getLatest()
79
+ if ENV.has_key?('ACTIONS')
80
+ @vars[:actions] = ENV['ACTIONS'].split(%r'[, \t]+')
81
+ else
82
+ @vars[:actions] = %w(prepareBuild makeBuild saveBuild uploadBuildArtifacts)
83
+ end
84
+
85
+ if ENV.has_key?('TREE')
86
+ @vars[:tree] = ENV['TREE']
87
+ end
88
+
89
+ if ENV.has_key?('PRUNER')
90
+ @vars[:pruner] = ENV['PRUNER']
91
+ end
92
+
93
+ @vars[:return_code] = getLatest()
75
94
  end
76
95
 
77
96
  # ---------------------------------------------------------------------------------------------------------------
@@ -39,6 +39,15 @@ module CiCd
39
39
  NO_PROJECT_NAMES = i+=1
40
40
  NO_PROJECTS_PATH = i+=1
41
41
  TEMP_FILE_MISSING = i+=1
42
+ PRUNE_BAD_REPO = i+=1
43
+ PRUNE_NO_TREE = i+=1
44
+ PRUNE_NO_VARIANT = i+=1
45
+ PRUNE_NO_PRUNER = i+=1
46
+ PRUNE_TOO_OLD = i+=1
47
+ PRUNE_VARIANT_MIA = i+=1
48
+ PRUNE_BAD_BRANCH = i+=1
49
+ PRUNE_BAD_VERSION = i+=1
50
+ PRUNE_BAD_PRUNER = i+=1
42
51
 
43
52
  require 'awesome_print'
44
53
 
@@ -32,19 +32,37 @@ module CiCd
32
32
  end
33
33
 
34
34
  # ---------------------------------------------------------------------------------------------------------------
35
- def uploadBuildArtifacts()
35
+ def performOnRepoInstance(verb)
36
36
  @logger.step __method__.to_s
37
37
  clazz = getRepoClass()
38
38
  if clazz.is_a?(Class) and not clazz.nil?
39
39
  @repo = clazz.new(self)
40
- @vars[:return_code] = @repo.uploadBuildArtifacts()
40
+ method = @repo.method(verb)
41
+ if method.owner == clazz
42
+ @vars[:return_code] = @repo.send(verb)
43
+ else
44
+ @logger.error "#{clazz.name.to_s} cannot do action #{verb}"
45
+ @vars[:return_code] = Errors::BUILDER_REPO_ACTION
46
+ end
41
47
  else
42
- @logger.error "CiCd::Builder::Repo::#{type} is not a valid repo class"
48
+ @logger.error "#{clazz.name.to_s} is not a valid repo class"
43
49
  @vars[:return_code] = Errors::BUILDER_REPO_TYPE
44
50
  end
45
51
  @vars[:return_code]
46
52
  end
47
53
 
54
+ # ---------------------------------------------------------------------------------------------------------------
55
+ def uploadBuildArtifacts()
56
+ @logger.step __method__.to_s
57
+ performOnRepoInstance(__method__.to_s)
58
+ end
59
+
60
+ # ---------------------------------------------------------------------------------------------------------------
61
+ def pruneRepo()
62
+ @logger.step __method__.to_s
63
+ performOnRepoInstance(__method__.to_s)
64
+ end
65
+
48
66
  # ---------------------------------------------------------------------------------------------------------------
49
67
  def manifestMetadata
50
68
  manifest = @vars[:build_mdd].dup
@@ -125,55 +125,35 @@ EC2 Instance profile
125
125
  nil
126
126
  rescue Aws::S3::Errors::NoSuchKey
127
127
  nil
128
+ rescue Aws::S3::Errors::Forbidden
129
+ nil
130
+ rescue Exception => e
131
+ nil
128
132
  end
133
+ # noinspection RubyUnnecessaryReturnValue
129
134
  s3_obj
130
135
  end
131
136
 
132
137
  # ---------------------------------------------------------------------------------------------------------------
133
- def takeInventory()
134
- def _update(hash, key, value)
135
- h = {}
136
- i = -1
137
- hash[key].each { |v| h[v] = i+=1 }
138
- unless h.has_key?(value)
139
- h[value] = h.keys.size # No -1 because this is evaluated BEFORE we make the addition!
140
- end
141
- s = h.sort_by { |_, v| v }
142
- s = s.map { |v| v[0] }
143
- hash[key] = s
144
- h[value]
138
+ def _update(hash, key, value)
139
+ h = {}
140
+ i = -1
141
+ hash[key].each { |v| h[v] = i+=1 }
142
+ unless h.has_key?(value)
143
+ h[value] = h.keys.size # No -1 because this is evaluated BEFORE we make the addition!
145
144
  end
145
+ s = h.sort_by { |_, v| v }
146
+ s = s.map { |v| v[0] }
147
+ hash[key] = s
148
+ h[value]
149
+ end
146
150
 
147
- # Read and parse in JSON
148
- json_s = ''
149
- json = nil
151
+ # ---------------------------------------------------------------------------------------------------------------
152
+ def takeInventory()
150
153
  varianth = nil
151
-
152
- key = "#{@vars[:project_name]}/INVENTORY.json"
153
- s3_obj = maybeS3Object(key)
154
- # If the inventory has started then add to it else create a new one
155
- if s3_obj.nil?
156
- # Start a new inventory
157
- over = true
158
- else
159
- resp = s3_obj.get()
160
- body = resp.body
161
- if body.is_a?(String)
162
- json_s = resp.data
163
- else
164
- body.rewind
165
- json_s = body.read()
166
- end
167
- json = Yajl::Parser.parse(json_s)
168
- over = false
169
- # Is the inventory format up to date ...
170
- constraint = ::Semverse::Constraint.new "<= #{@options[:gen]}"
171
- version = ::Semverse::Version.new(json['gen'])
172
- # raise CiCd::Builder::Errors::InvalidVersion.new "The constraint failed: #{json['gen']} #{constraint}"
173
-
174
- unless constraint.satisfies?(version)
175
- raise CiCd::Builder::Errors::InvalidVersion.new "The inventory generation is newer than I can manage: #{version} <=> #{@options[:gen]}"
176
- end
154
+ # Read and parse in JSON
155
+ key, json, over = pullInventory()
156
+ unless json.nil?
177
157
  if json['container'] and json['container']['variants']
178
158
  # but does not have our variant then add it
179
159
  variants = json['container']['variants']
@@ -231,18 +211,7 @@ EC2 Instance profile
231
211
  varianth['builds'] << filing
232
212
  end
233
213
  build_lst = (varianth['builds'].size-1)
234
- build_rel = build_lst
235
- i = -1
236
- varianth['builds'].each{ |h|
237
- i += 1
238
- convert_build(h)
239
- convert_build(varianth['builds'][build_rel])
240
- if h['release'].to_i > varianth['builds'][build_rel]['release'].to_i
241
- build_rel = i
242
- elsif h['release'] == varianth['builds'][build_rel]['release']
243
- build_rel = i if h['build_number'].to_i > varianth['builds'][build_rel]['build_number'].to_i
244
- end
245
- }
214
+ build_rel = _getLatestRelease(build_lst, varianth)
246
215
 
247
216
  # Add new branch ...
248
217
  build_bra = _update(varianth, 'branches', @vars[:build_bra])
@@ -259,14 +228,18 @@ EC2 Instance profile
259
228
  json['gen'] = @options[:gen]
260
229
  json_s = JSON.pretty_generate( json, { indent: "\t", space: ' '})
261
230
  end
231
+ pushInventory(json_s, key)
232
+ end
233
+
234
+ def pushInventory(json_s, key)
262
235
  begin
263
236
  md5 = Digest::MD5.hexdigest(json_s)
264
237
  # [:'x-amz-meta-digest'] = "md5=#{md5}"
265
- resp = getS3.put_object( bucket: ENV['AWS_S3_BUCKET'],
266
- key: key,
267
- body: json_s,
268
- # acl: 'authenticated-read',
269
- metadata: {checksum: md5, digest: "md5=#{md5}"},
238
+ resp = getS3.put_object(bucket: ENV['AWS_S3_BUCKET'],
239
+ key: key,
240
+ body: json_s,
241
+ # acl: 'authenticated-read',
242
+ metadata: {checksum: md5, digest: "md5=#{md5}"},
270
243
  )
271
244
  s3_obj = maybeS3Object(key)
272
245
  # s3_obj.etag
@@ -278,6 +251,114 @@ EC2 Instance profile
278
251
  end
279
252
  end
280
253
 
254
+ # ---------------------------------------------------------------------------------------------------------------
255
+ def _getLatestRelease(build_lst, varianth)
256
+ build_rel = build_lst
257
+ i = -1
258
+ varianth['builds'].each { |h|
259
+ i += 1
260
+ convert_build(h)
261
+ convert_build(varianth['builds'][build_rel])
262
+ if h['release'].to_f > varianth['builds'][build_rel]['release'].to_f
263
+ build_rel = i
264
+ elsif h['release'] == varianth['builds'][build_rel]['release']
265
+ build_rel = i if h['build_number'].to_i > varianth['builds'][build_rel]['build_number'].to_i
266
+ end
267
+ }
268
+ build_rel
269
+ end
270
+
271
+ # ---------------------------------------------------------------------------------------------------------------
272
+ def _getLatestBranch(build_lst, varianth)
273
+ # noinspection RubyHashKeysTypesInspection
274
+ map = Hash[varianth['branches'].map.with_index.to_a]
275
+ build_bra = map[_getBranch(@vars, varianth['builds'][build_lst])]
276
+
277
+ i = -1
278
+ varianth['builds'].each { |h|
279
+ i += 1
280
+ convert_build(h)
281
+ brah = _getBranch(@vars, h)
282
+ bral = _getBranch(@vars, varianth['builds'][build_bra])
283
+ if map[brah] > map[bral]
284
+ build_bra = map[brah]
285
+ end
286
+ }
287
+ build_bra
288
+ end
289
+
290
+ # ---------------------------------------------------------------------------------------------------------------
291
+ def _getLatestVersion(build_lst, varianth)
292
+ # noinspection RubyHashKeysTypesInspection
293
+ map = Hash[varianth['versions'].map.with_index.to_a]
294
+ build_ver = map[_getVersion(@vars, varianth['builds'][build_lst])]
295
+
296
+ verl = _getVersion(@vars, varianth['builds'][build_ver])
297
+ gt = ::Semverse::Constraint.new "> #{verl}"
298
+ eq = ::Semverse::Constraint.new "= #{verl}"
299
+
300
+ i = -1
301
+ varianth['builds'].each { |h|
302
+ i += 1
303
+ convert_build(h)
304
+ verh = _getVersion(@vars, h)
305
+ version = ::Semverse::Version.new(verh)
306
+ if gt.satisfies?(version)
307
+ build_ver = map[verh]
308
+ build_lst = i
309
+ gt = ::Semverse::Constraint.new "> #{verh}"
310
+ eq = ::Semverse::Constraint.new "= #{verh}"
311
+ elsif eq.satisfies?(version)
312
+ if h['build_number'].to_i > varianth['builds'][build_lst]['build_number'].to_i
313
+ build_ver = map[verh]
314
+ build_lst = i
315
+ gt = ::Semverse::Constraint.new "> #{verh}"
316
+ eq = ::Semverse::Constraint.new "= #{verh}"
317
+ end
318
+ end
319
+ }
320
+ build_ver
321
+ end
322
+
323
+ # ---------------------------------------------------------------------------------------------------------------
324
+ def pullInventory()
325
+ json = nil
326
+ key, s3_obj = checkForInventory()
327
+ # If the inventory has started then add to it else create a new one
328
+ if s3_obj.nil?
329
+ # Start a new inventory
330
+ over = true
331
+ else
332
+ resp = s3_obj.get()
333
+ body = resp.body
334
+ if body.is_a?(String)
335
+ json_s = resp.data
336
+ else
337
+ body.rewind
338
+ json_s = body.read()
339
+ end
340
+ json = Yajl::Parser.parse(json_s)
341
+ over = false
342
+ # Is the inventory format up to date ...
343
+ constraint = ::Semverse::Constraint.new "<= #{@options[:gen]}"
344
+ version = ::Semverse::Version.new(json['gen'])
345
+ # raise CiCd::Builder::Errors::InvalidVersion.new "The constraint failed: #{json['gen']} #{constraint}"
346
+
347
+ unless constraint.satisfies?(version)
348
+ raise CiCd::Builder::Errors::InvalidVersion.new "The inventory generation is newer than I can manage: #{version} <=> #{@options[:gen]}"
349
+ end
350
+ end
351
+ return key, json, over
352
+ end
353
+
354
+ # ---------------------------------------------------------------------------------------------------------------
355
+ def checkForInventory
356
+ key = "#{@vars[:project_name]}/INVENTORY.json"
357
+ s3_obj = maybeS3Object(key)
358
+ return key, s3_obj
359
+ end
360
+
361
+ # ---------------------------------------------------------------------------------------------------------------
281
362
  def convert_build(h)
282
363
  if h.has_key?('number')
283
364
  h['build_number'] = h['number']
@@ -354,6 +435,242 @@ EC2 Instance profile
354
435
  @vars[:return_code]
355
436
  end
356
437
 
438
+ # noinspection RubyHashKeysTypesInspection,RubyHashKeysTypesInspection
439
+ # @param Hash args
440
+ def _getMatches(args, name, match)
441
+ args = args.dup
442
+ args[:version] = '[0-9\.]+'
443
+ args[:release] = '[0-9\.]+'
444
+ args[:branch] = '[^-]+'
445
+ args[:build] = '\d+'
446
+ map = [ :product,:version,:branch,:build ]
447
+ matches = name.match(/^(#{args[:product]})-(#{args[:version]})-(#{args[:branch]})-build-(\d+)$/)
448
+ unless matches
449
+ map = [ :product,:version,:branch,:variant,:build ]
450
+ matches = name.match(/^(#{args[:product]})-(#{args[:version]})-(#{args[:branch]})-(#{args[:variant]})-build-(\d+)$/)
451
+ unless matches
452
+ map = [ :product,:version,:release,:branch,:variant,:build ]
453
+ matches = name.match(/^(#{args[:product]})-(#{args[:version]})-release-(#{args[:release]})-(#{args[:branch]})-(#{args[:variant]})-build-(\d+)$/)
454
+ unless matches
455
+ name = name.dup
456
+ map.each { |key|
457
+ if key == match
458
+ break
459
+ elsif key == :release
460
+ name.gsub!(/^release-/, '')
461
+ elsif key == :build
462
+ name.gsub!(/^build-/, '')
463
+ end
464
+ name.gsub!(/^#{args[key]}-/, '')
465
+ }
466
+ map.reverse.each { |key|
467
+ if key == match
468
+ break
469
+ end
470
+ name.gsub!(/-#{args[key]}$/, '')
471
+ if key == :release
472
+ name.gsub!(/-release$/, '')
473
+ elsif key == :build
474
+ name.gsub!(/-build$/, '')
475
+ end
476
+ }
477
+ return name
478
+ end
479
+ end
480
+ end
481
+ if matches
482
+ map = Hash[map.map.with_index.to_a]
483
+ if map.has_key? match
484
+ matches[map[match]+1] # 0 is the whole thing
485
+ else
486
+ nil
487
+ end
488
+ else
489
+ nil
490
+ end
491
+ end
492
+
493
+ def _getBuildNumber(args,drawer, naming = nil)
494
+ name = drawer['build_name'] rescue drawer['build']
495
+ drawer['build_number'] || _getMatches(args, name, :build)
496
+ end
497
+
498
+ def _getVersion(args,drawer, naming = nil)
499
+ name = drawer['build_name'] rescue drawer['build']
500
+ drawer['version'] || _getMatches(args, name, :version)
501
+ end
502
+
503
+ def _getRelease(args,drawer, naming = nil)
504
+ name = drawer['build_name'] rescue drawer['build']
505
+ drawer['release'] || _getMatches(args, name, :release)
506
+ end
507
+
508
+ def _getBranch(args,drawer, naming = nil)
509
+ name = drawer['build_name'] rescue drawer['build']
510
+ drawer['branch'] || _getMatches(args, name, :branch)
511
+ end
512
+
513
+ def first(builds, pruner)
514
+ raise "Bad syntax: #{__method__}{ #{pruner.join(' ')}" unless pruner.size == 1
515
+ count = pruner[0].to_i
516
+ count > 0 ? builds[0..(count-1)] : []
517
+ end
518
+
519
+ def last(builds, pruner)
520
+ raise "Bad syntax: #{__method__} #{pruner.join(' ')}" unless pruner.size == 1
521
+ count = pruner[0].to_i
522
+ count > 0 ? builds[(-1-count+1)..-1] : []
523
+ end
524
+
525
+ def keep(builds, pruner)
526
+ prune builds, pruner
527
+ end
528
+
529
+ def drop(builds, pruner)
530
+ raise "Bad syntax: drop #{pruner.join(' ')}" unless pruner.size == 2
531
+ case pruner[0]
532
+ when 'first'
533
+ prune builds, [ 'keep', 'last', pruner[-1] ]
534
+ when 'last'
535
+ prune builds, [ 'keep', 'first', builds.size-pruner[-1].to_i ]
536
+ when /\d+/
537
+ prune builds, [ 'keep', pruner[-2], pruner[-1] ]
538
+ else
539
+ raise "Bad syntax: drop #{pruner.join(' ')}"
540
+ end
541
+ end
542
+
543
+ # ---------------------------------------------------------------------------------------------------------------
544
+ def prune(builds, pruner)
545
+ if pruner.size > 0
546
+ blds = builds.dup
547
+ eval("blds = #{pruner[0]} blds, #{pruner[1..-1]}")
548
+ blds
549
+ else
550
+ builds
551
+ end
552
+ end
553
+
554
+ # ---------------------------------------------------------------------------------------------------------------
555
+ def pruneRepo()
556
+ @logger.step __method__.to_s
557
+ # Read and parse in JSON
558
+ key, json, over = pullInventory()
559
+ if json.nil?
560
+ @logger.error "Bad repo/inventory specified. s3://#{ENV['AWS_S3_BUCKET']}/#{key}"
561
+ @vars[:return_code] = Errors::PRUNE_BAD_REPO
562
+ else
563
+ if @vars[:variant]
564
+ if @vars[:tree]
565
+ if @vars[:pruner]
566
+ if json['container'] and json['container']['variants']
567
+ # but does not have our variant ...
568
+ variants = json['container']['variants']
569
+ if variants[@vars[:variant]]
570
+ varianth = variants[@vars[:variant]]
571
+ # If the inventory 'latest' format is up to date ...
572
+ if varianth['latest'] and varianth['latest'].is_a?(Hash)
573
+ builds = varianth['builds']
574
+ branches = varianth['branches']
575
+ versions = varianth['versions']
576
+ case @vars[:tree]
577
+ when %r'variants?'
578
+ variants.delete(@vars[:pruner])
579
+ when %r'versions?'
580
+ if varianth['versions'].include?(@vars[:pruner])
581
+ survivors = builds.select{ |drawer|
582
+ ver = _getVersion(@vars, drawer)
583
+ ver != @vars[:pruner]
584
+ }
585
+ varianth['builds'] = survivors
586
+ varianth['versions'] = varianth['versions'].select{|ver| ver != @vars[:pruner] }
587
+ else
588
+ @logger.error "Cannot prune the version '#{@vars[:pruner]}' from variant '#{@vars[:variant]}'"
589
+ @vars[:return_code] = Errors::PRUNE_BAD_VERSION
590
+ end
591
+ when %r'branch(|es)'
592
+ if varianth['branches'].include?(@vars[:pruner])
593
+ survivors = builds.select{ |drawer|
594
+ bra = _getBranch(@vars, drawer)
595
+ bra != @vars[:pruner]
596
+ }
597
+ varianth['builds'] = survivors
598
+ varianth['branches'] = varianth['branches'].select{|bra| bra != @vars[:pruner] }
599
+ else
600
+ @logger.error "Cannot prune the branch '#{@vars[:pruner]}' from variant '#{@vars[:variant]}'"
601
+ @vars[:return_code] = Errors::PRUNE_BAD_BRANCH
602
+ end
603
+ when %r'builds?'
604
+ # noinspection RubyHashKeysTypesInspection
605
+ begin
606
+ builds = prune(builds, @vars[:pruner].split(/\s+/))
607
+ varianth['builds'] = builds
608
+ branches = builds.map{ |bld|
609
+ _getBranch(@vars, bld)
610
+ }
611
+ varianth['branches'] = Hash[branches.map.with_index.to_a].keys
612
+ versions = builds.map{ |bld|
613
+ _getVersion(@vars, bld)
614
+ }
615
+ varianth['versions'] = Hash[versions.map.with_index.to_a].keys
616
+ rescue Exception => e
617
+ @logger.error "Cannot prune the builds '#{e.message}'"
618
+ @vars[:return_code] = Errors::PRUNE_BAD_PRUNER
619
+ end
620
+ else
621
+ @logger.error "Bad 'TREE' specified. Only 'branches', 'builds', 'versions' and 'variant' can be pruned"
622
+ @vars[:return_code] = Errors::PRUNE_NO_TREE
623
+ end
624
+ if 0 == @vars[:return_code]
625
+ build_lst = (varianth['builds'].size-1)
626
+ build_rel = _getLatestRelease(build_lst, varianth)
627
+ # Latest branch ...
628
+ build_bra = _getLatestBranch(build_lst, varianth)
629
+ # Latest version ...
630
+ build_ver = _getLatestVersion(build_lst, varianth)
631
+
632
+ # Set latest
633
+ varianth['latest'] = {
634
+ branch: build_bra,
635
+ version: build_ver,
636
+ build: build_lst,
637
+ release: build_rel,
638
+ }
639
+ json_s = JSON.pretty_generate( json, { indent: "\t", space: ' '})
640
+ pushInventory(json_s, key)
641
+ end
642
+ else
643
+ # Start over ... too old/ incompatible
644
+ @logger.error 'Repo too old or incompatible to prune. No [container][variants][VARIANT][latest].'
645
+ @vars[:return_code] = Errors::PRUNE_TOO_OLD
646
+ end
647
+ else
648
+ @logger.error "Variant '#{@vars[:variant]}' not present."
649
+ @vars[:return_code] = Errors::PRUNE_VARIANT_MIA
650
+ end
651
+ else
652
+ # Start over ... too old/ incompatible
653
+ @logger.error 'Repo too old or incompatible to prune. No [container][variants].'
654
+ @vars[:return_code] = Errors::PRUNE_TOO_OLD
655
+ end
656
+ else
657
+ @logger.error "No 'PRUNER' specified"
658
+ @vars[:return_code] = Errors::PRUNE_NO_PRUNER
659
+ end
660
+ else
661
+ @logger.error "No 'TREE' specified"
662
+ @vars[:return_code] = Errors::PRUNE_NO_TREE
663
+ end
664
+ else
665
+ @logger.error "No 'VARIANT' specified"
666
+ @vars[:return_code] = Errors::PRUNE_NO_VARIANT
667
+ end
668
+ end
669
+ @vars[:return_code]
670
+ end
671
+
672
+ private :_update, :checkForInventory, :pullInventory
673
+
357
674
  end
358
675
  end
359
676
  end
@@ -4,7 +4,7 @@ module CiCd
4
4
  # file = File.expand_path("#{File.dirname(__FILE__)}/../../../VERSION")
5
5
  # lines = File.readlines(file)
6
6
  # version = lines[0]
7
- version = '0.9.43'
7
+ version = '0.9.44'
8
8
  VERSION = version unless const_defined?('VERSION')
9
9
  major, minor, tiny = VERSION.split('.')
10
10
  MAJOR = major unless const_defined?('MAJOR')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cicd-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.43
4
+ version: 0.9.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christo De Lange
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-09 00:00:00.000000000 Z
11
+ date: 2015-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print