rbld 1.3.4 → 1.3.5

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: 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: []