cicd-builder 0.9.43 → 0.9.44

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 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