rbld 1.3.4 → 1.3.5

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: 94bbf882c9641e89b93419feedd8b99818fe7b72
4
- data.tar.gz: 1eafc984b557b8a420289fb80ae97ab43eead5dc
3
+ metadata.gz: fc3bf06f427b26d18323c5f232e31579479b0907
4
+ data.tar.gz: fdc5b95543ea855690230682759a139175a26aed
5
5
  SHA512:
6
- metadata.gz: a4e2551b3b1bea0fac3841ef45b1d52f3445b3f4bf3c3b9f77eebe6d8499aa274fa1970803e48a66b4ec19f17322a62a1ec2dfd0b8acc36d723be6f03e343794
7
- data.tar.gz: 246e52055929d406644c8eedb0a984d354de2371d275ee517f907b83c6aaa2e7650eccec386b39979ca26735018ed354b3a5b4da862dc70deddb11fa7107cb4c
6
+ metadata.gz: 969921f5c1152e067706ff5d75e002164d7e65546cd33339c5596b5ec8c3018bee3944966ef490306603840b8284e39e113884dcc9e541dcf5f648b5e98487ec
7
+ data.tar.gz: ed3610e8ffe3e6b98effd0589047db91121bd2bbe365bbb1f2ca9e9b16ff368cdec1df0928d4c9e5f90fe34af0e9f94293538629eb72e0b2690f12cf413ad3d5
@@ -1 +1 @@
1
- 1.3.4
1
+ 1.3.5
@@ -100,13 +100,9 @@ module Rebuild
100
100
  end
101
101
 
102
102
  def process_log(log_item)
103
- begin
104
- json = JSON.parse( log_item )
105
- rescue
106
- else
107
- trace_progress( json['progress'] )
108
- save_last_error( json['errorDetail'] )
109
- end
103
+ json = Rebuild::Utils::SafeJSONParser.new( log_item )
104
+ trace_progress( json['progress'] )
105
+ save_last_error( json['errorDetail'] )
110
106
  end
111
107
 
112
108
  def trace_progress(line)
@@ -25,7 +25,8 @@ module Rebuild::Engine
25
25
  @name, @api_obj = name, api_obj
26
26
  end
27
27
 
28
- def remove!
28
+ def remove!(with_containers = false)
29
+ remove_containers if with_containers
29
30
  @api_obj.remove( name: @name.to_s )
30
31
  end
31
32
 
@@ -37,6 +38,17 @@ module Rebuild::Engine
37
38
  def identity
38
39
  @name.to_s
39
40
  end
41
+
42
+ private
43
+
44
+ def remove_containers
45
+ Docker::Container.all( opts = { all:true } ).each do |c|
46
+ if c.info['ImageID'] == @api_obj.info['id']
47
+ rbld_log.info("Removing dangling container #{c.info['id']}")
48
+ c.delete( force: true )
49
+ end
50
+ end
51
+ end
40
52
  end
41
53
 
42
54
  class NamedDockerContainer
@@ -459,11 +471,17 @@ module Rebuild::Engine
459
471
  end
460
472
 
461
473
  def load!(filename)
462
- EnvironmentFile.new( filename ).load!
474
+ if name = EnvironmentFile.new( filename ).load!
475
+ # In case a modified environment was overriden,
476
+ # drop modifications as well
477
+ rbld_log.info( "Loaded environment #{name}, running checkout")
478
+ checkout!( name ) if @cache.get( name )
479
+ end
480
+
463
481
  # If image with the same name but another
464
482
  # ID existed before load it becomes dangling
465
483
  # and should be ditched
466
- @cache.dangling.each(&:remove)
484
+ @cache.dangling.each { |img| remove_docker_img_if_unused( img ) }
467
485
  @cache.refresh!
468
486
  end
469
487
 
@@ -557,7 +575,7 @@ module Rebuild::Engine
557
575
 
558
576
  names = NameFactory.new( new_name )
559
577
  env.modification_container.flatten( names.identity )
560
- env.rerun_img.remove! if env.rerun_img
578
+ env.rerun_img.remove!( true ) if env.rerun_img
561
579
  else
562
580
  raise NoChangesToCommit, env_name.full
563
581
  end
@@ -592,11 +610,8 @@ module Rebuild::Engine
592
610
  opts = { t: NameFactory.new(env_name).identity,
593
611
  rm: true }
594
612
  new_img = Docker::Image.build_from_tar( tar, opts ) do |v|
595
- begin
596
- if ( log = JSON.parse( v ) ) && log.has_key?( "stream" )
597
- rbld_print.raw_trace( log["stream"] )
598
- end
599
- rescue
613
+ Rebuild::Utils::SafeJSONParser.new( v ).get( 'stream' ) do |s|
614
+ rbld_print.raw_trace( s )
600
615
  end
601
616
  end
602
617
  end
@@ -639,7 +654,7 @@ module Rebuild::Engine
639
654
  rescue => msg
640
655
  rbld_log.fatal( msg )
641
656
  raise InaccessibleDockerService
642
- end
657
+ end
643
658
 
644
659
  def registry
645
660
  return @registry if @registry
@@ -759,5 +774,11 @@ module Rebuild::Engine
759
774
  def nonexisting_env(name)
760
775
  raise EnvironmentAlreadyExists, name.full if @cache.get(name)
761
776
  end
777
+
778
+ def remove_docker_img_if_unused(image)
779
+ image.remove
780
+ rescue Docker::Error::ConflictError => e
781
+ rbld_log.info( "Unable to delete dangling image after load: #{e}" )
782
+ end
762
783
  end
763
784
  end
@@ -15,7 +15,28 @@ module Rebuild::Engine
15
15
  end
16
16
 
17
17
  def load!
18
- with_gzip_reader { |gz| Docker::Image.load(gz) }
18
+ loaded_name = nil
19
+
20
+ with_gzip_reader do |gz|
21
+ Docker::Image.load(gz) do |response|
22
+ Rebuild::Utils::SafeJSONParser.new( response ).get( 'stream' ) do |s|
23
+ response = s
24
+ end
25
+
26
+ if m = response.match( /Loaded image: (.*)$/ )
27
+ loaded_name = m.captures[0]
28
+ elsif m = response.match( /The image (.*) already exists/ )
29
+ loaded_name = m.captures[0]
30
+ end
31
+ end
32
+ end
33
+
34
+ if loaded_name
35
+ env = Environment.from_image( loaded_name, nil )
36
+ return Rebuild::Utils::EnvNameHolder.new( env.name, env.tag )
37
+ else
38
+ return nil
39
+ end
19
40
 
20
41
  rescue => msg
21
42
  rbld_print.trace( msg )
@@ -69,11 +69,8 @@ module Rebuild
69
69
  private
70
70
 
71
71
  def trace_progress(log_item)
72
- begin
73
- line = JSON.parse( log_item )["progress"]
74
- rbld_print.inplace_trace( line ) if line
75
- rescue
76
- end
72
+ line = Rebuild::Utils::SafeJSONParser.new( log_item )['progress']
73
+ rbld_print.inplace_trace( line ) if line
77
74
  end
78
75
 
79
76
  def parse_entry(internal_name)
@@ -1,5 +1,6 @@
1
1
  require 'delegate'
2
2
  require 'ruby-progressbar'
3
+ require 'json'
3
4
 
4
5
  module Rebuild
5
6
  module Utils
@@ -37,6 +38,19 @@ module Rebuild
37
38
  alias_method :name, :repo
38
39
  end
39
40
 
41
+ class EnvNameHolder
42
+ def initialize(name, tag)
43
+ @name, @tag = name, tag
44
+ @full = "#{name}:#{tag}"
45
+ end
46
+
47
+ def to_s
48
+ @full
49
+ end
50
+
51
+ attr_reader :name, :tag, :full
52
+ end
53
+
40
54
  module Errors
41
55
  def rebuild_errors(definitions)
42
56
  definitions.each_pair do |name, msg_fmt|
@@ -108,5 +122,21 @@ module Rebuild
108
122
  end
109
123
  end
110
124
 
125
+ class SafeJSONParser
126
+ def initialize(string)
127
+ @json = JSON.parse( string )
128
+ rescue
129
+ end
130
+
131
+ def [](key)
132
+ get( key )
133
+ end
134
+
135
+ def get(key)
136
+ key = ( @json && @json.has_key?( key ) ) ? @json[key] : nil
137
+ yield key if key && block_given?
138
+ key
139
+ end
140
+ end
111
141
  end
112
142
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbld
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Fleytman
8
8
  autorequire:
9
9
  bindir: cli/bin
10
10
  cert_chain: []
11
- date: 2017-06-01 00:00:00.000000000 Z
11
+ date: 2017-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -207,25 +207,39 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: 1.0.2
209
209
  - !ruby/object:Gem::Dependency
210
- name: rake
210
+ name: json
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '11.2'
215
+ version: '2.1'
216
216
  - - ">="
217
217
  - !ruby/object:Gem::Version
218
- version: 11.2.2
218
+ version: 2.1.0
219
219
  type: :runtime
220
220
  prerelease: false
221
221
  version_requirements: !ruby/object:Gem::Requirement
222
222
  requirements:
223
223
  - - "~>"
224
224
  - !ruby/object:Gem::Version
225
- version: '11.2'
225
+ version: '2.1'
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: 2.1.0
229
+ - !ruby/object:Gem::Dependency
230
+ name: rake
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ type: :runtime
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
226
240
  - - ">="
227
241
  - !ruby/object:Gem::Version
228
- version: 11.2.2
242
+ version: '0'
229
243
  - !ruby/object:Gem::Dependency
230
244
  name: travis
231
245
  requirement: !ruby/object:Gem::Requirement
@@ -386,6 +400,26 @@ dependencies:
386
400
  - - ">="
387
401
  - !ruby/object:Gem::Version
388
402
  version: 0.1.9
403
+ - !ruby/object:Gem::Dependency
404
+ name: license_finder
405
+ requirement: !ruby/object:Gem::Requirement
406
+ requirements:
407
+ - - "~>"
408
+ - !ruby/object:Gem::Version
409
+ version: '3.0'
410
+ - - ">="
411
+ - !ruby/object:Gem::Version
412
+ version: 3.0.0
413
+ type: :development
414
+ prerelease: false
415
+ version_requirements: !ruby/object:Gem::Requirement
416
+ requirements:
417
+ - - "~>"
418
+ - !ruby/object:Gem::Version
419
+ version: '3.0'
420
+ - - ">="
421
+ - !ruby/object:Gem::Version
422
+ version: 3.0.0
389
423
  description: Zero-dependency, reproducible build environments
390
424
  email: rbld-devel@rbld.io
391
425
  executables:
@@ -452,5 +486,5 @@ rubyforge_project:
452
486
  rubygems_version: 2.6.11
453
487
  signing_key:
454
488
  specification_version: 4
455
- summary: rbld-1.3.4
489
+ summary: rbld-1.3.5
456
490
  test_files: []