dockly 2.1.0 → 2.2.0
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.
- data/README.md +3 -0
 - data/lib/dockly/docker.rb +22 -3
 - data/lib/dockly/version.rb +1 -1
 - data/spec/dockly/build_cache/docker_spec.rb +4 -4
 - data/spec/dockly/deb_spec.rb +1 -1
 - data/spec/dockly/docker_spec.rb +9 -8
 - metadata +2 -2
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -111,6 +111,9 @@ The `docker` DSL is used to define Docker containers. It has the following attri 
     | 
|
| 
       111 
111 
     | 
    
         
             
                - required: `false` -- only required when `import` is not supplied
         
     | 
| 
       112 
112 
     | 
    
         
             
                - description: the location  of the base image to start building from
         
     | 
| 
       113 
113 
     | 
    
         
             
                - examples: `paintedfox/ruby`, `registry.example.com/my-custom-image`
         
     | 
| 
      
 114 
     | 
    
         
            +
            - `build_env`
         
     | 
| 
      
 115 
     | 
    
         
            +
                - required: `false`
         
     | 
| 
      
 116 
     | 
    
         
            +
                - description: Hash whose values are environment variables and keys are their values. These variables are only used during build commands, exported images will not contain them.
         
     | 
| 
       114 
117 
     | 
    
         
             
            - `import`
         
     | 
| 
       115 
118 
     | 
    
         
             
                - required: `false` -- only required when `registry_import` is not supplied
         
     | 
| 
       116 
119 
     | 
    
         
             
                - description: the location (url or S3 path) of the base image to start building from
         
     | 
    
        data/lib/dockly/docker.rb
    CHANGED
    
    | 
         @@ -28,6 +28,10 @@ class Dockly::Docker 
     | 
|
| 
       28 
28 
     | 
    
         
             
              default_value :s3_bucket, nil
         
     | 
| 
       29 
29 
     | 
    
         
             
              default_value :s3_object_prefix, ""
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
              def build_env(hash = nil)
         
     | 
| 
      
 32 
     | 
    
         
            +
                (@build_env ||= {}).tap { |env| env.merge!(hash) if hash.is_a?(Hash) }
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       31 
35 
     | 
    
         
             
              def generate!
         
     | 
| 
       32 
36 
     | 
    
         
             
                image = generate_build
         
     | 
| 
       33 
37 
     | 
    
         
             
                export_image(image)
         
     | 
| 
         @@ -50,9 +54,10 @@ class Dockly::Docker 
     | 
|
| 
       50 
54 
     | 
    
         
             
                  info "Successfully pulled #{full_name}"
         
     | 
| 
       51 
55 
     | 
    
         
             
                end
         
     | 
| 
       52 
56 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                images[:two] =  
     | 
| 
       54 
     | 
    
         
            -
                images[:three] =  
     | 
| 
       55 
     | 
    
         
            -
                 
     | 
| 
      
 57 
     | 
    
         
            +
                images[:two] = add_build_env(images[:one])
         
     | 
| 
      
 58 
     | 
    
         
            +
                images[:three] = add_git_archive(images[:two])
         
     | 
| 
      
 59 
     | 
    
         
            +
                images[:four] = run_build_caches(images[:three])
         
     | 
| 
      
 60 
     | 
    
         
            +
                build_image(images[:four])
         
     | 
| 
       56 
61 
     | 
    
         
             
              ensure
         
     | 
| 
       57 
62 
     | 
    
         
             
                cleanup(images.values.compact) if cleanup_images
         
     | 
| 
       58 
63 
     | 
    
         
             
              end
         
     | 
| 
         @@ -69,6 +74,8 @@ class Dockly::Docker 
     | 
|
| 
       69 
74 
     | 
    
         | 
| 
       70 
75 
     | 
    
         
             
              def cleanup(images)
         
     | 
| 
       71 
76 
     | 
    
         
             
                info 'Cleaning up intermediate images'
         
     | 
| 
      
 77 
     | 
    
         
            +
                images ||= []
         
     | 
| 
      
 78 
     | 
    
         
            +
                images = images.compact
         
     | 
| 
       72 
79 
     | 
    
         
             
                ::Docker::Container.all(:all => true).each do |container|
         
     | 
| 
       73 
80 
     | 
    
         
             
                  image_id = container.json['Image']
         
     | 
| 
       74 
81 
     | 
    
         
             
                  if images.any? { |image| image.id.start_with?(image_id) || image_id.start_with?(image.id) }
         
     | 
| 
         @@ -144,6 +151,18 @@ class Dockly::Docker 
     | 
|
| 
       144 
151 
     | 
    
         
             
                image
         
     | 
| 
       145 
152 
     | 
    
         
             
              end
         
     | 
| 
       146 
153 
     | 
    
         | 
| 
      
 154 
     | 
    
         
            +
              def add_build_env(image)
         
     | 
| 
      
 155 
     | 
    
         
            +
                return image if build_env.empty?
         
     | 
| 
      
 156 
     | 
    
         
            +
                info "Setting the following environment variables in the docker image: #{build_env.keys}"
         
     | 
| 
      
 157 
     | 
    
         
            +
                dockerfile = [
         
     | 
| 
      
 158 
     | 
    
         
            +
                  "FROM #{image.id}",
         
     | 
| 
      
 159 
     | 
    
         
            +
                  *build_env.map { |key, val| "ENV #{key.to_s.shellescape}=#{val.to_s.shellescape}" }
         
     | 
| 
      
 160 
     | 
    
         
            +
                ].join("\n")
         
     | 
| 
      
 161 
     | 
    
         
            +
                out_image = ::Docker::Image.build(dockerfile)
         
     | 
| 
      
 162 
     | 
    
         
            +
                info "Successfully set the environment variables in the dockerfile"
         
     | 
| 
      
 163 
     | 
    
         
            +
                out_image
         
     | 
| 
      
 164 
     | 
    
         
            +
              end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
       147 
166 
     | 
    
         
             
              def add_git_archive(image)
         
     | 
| 
       148 
167 
     | 
    
         
             
                return image if git_archive.nil?
         
     | 
| 
       149 
168 
     | 
    
         
             
                info "adding the git archive"
         
     | 
    
        data/lib/dockly/version.rb
    CHANGED
    
    
| 
         @@ -7,7 +7,7 @@ describe Dockly::BuildCache::Docker, :docker do 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  git_archive '/app'
         
     | 
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
     | 
    
         
            -
              let(:image) { ::Docker::Image.build('from  
     | 
| 
      
 10 
     | 
    
         
            +
              let(:image) { ::Docker::Image.build('from ubuntu:14.04') }
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              before do
         
     | 
| 
       13 
13 
     | 
    
         
             
                build_cache.s3_bucket 'lol'
         
     | 
| 
         @@ -100,7 +100,7 @@ describe Dockly::BuildCache::Docker, :docker do 
     | 
|
| 
       100 
100 
     | 
    
         | 
| 
       101 
101 
     | 
    
         
             
              describe '#hash_output' do
         
     | 
| 
       102 
102 
     | 
    
         
             
                let(:output) {
         
     | 
| 
       103 
     | 
    
         
            -
                  " 
     | 
| 
      
 103 
     | 
    
         
            +
                  "b458e7b28b9bc2d04bd5a3fd0f8d777e  /etc/vim/vimrc"
         
     | 
| 
       104 
104 
     | 
    
         
             
                }
         
     | 
| 
       105 
105 
     | 
    
         | 
| 
       106 
106 
     | 
    
         
             
                context "when hash command returns successfully" do
         
     | 
| 
         @@ -127,7 +127,7 @@ describe Dockly::BuildCache::Docker, :docker do 
     | 
|
| 
       127 
127 
     | 
    
         
             
              end
         
     | 
| 
       128 
128 
     | 
    
         | 
| 
       129 
129 
     | 
    
         
             
              describe '#copy_output_dir' do
         
     | 
| 
       130 
     | 
    
         
            -
                let(:container) { Docker::Container.create('Image' => ' 
     | 
| 
      
 130 
     | 
    
         
            +
                let(:container) { Docker::Container.create('Image' => 'ubuntu:14.04', 'Cmd' => %w[true]) }
         
     | 
| 
       131 
131 
     | 
    
         
             
                let(:file) { build_cache.copy_output_dir(container) }
         
     | 
| 
       132 
132 
     | 
    
         
             
                let(:hash) { 'this_really_unique_hash' }
         
     | 
| 
       133 
133 
     | 
    
         
             
                let(:path) { file.path }
         
     | 
| 
         @@ -156,7 +156,7 @@ describe Dockly::BuildCache::Docker, :docker do 
     | 
|
| 
       156 
156 
     | 
    
         
             
                context "when parameter command returns successfully" do
         
     | 
| 
       157 
157 
     | 
    
         
             
                  let(:command) { "uname -r" }
         
     | 
| 
       158 
158 
     | 
    
         
             
                  it 'returns the output of the parameter_command' do
         
     | 
| 
       159 
     | 
    
         
            -
                    expect(build_cache.parameter_output(command)).to match(/\A3\.\d{2}\.\d-\d- 
     | 
| 
      
 159 
     | 
    
         
            +
                    expect(build_cache.parameter_output(command)).to match(/\A3\.\d{2}\.\d-\d{2}-generic\Z/)
         
     | 
| 
       160 
160 
     | 
    
         
             
                  end
         
     | 
| 
       161 
161 
     | 
    
         
             
                end
         
     | 
| 
       162 
162 
     | 
    
         | 
    
        data/spec/dockly/deb_spec.rb
    CHANGED
    
    
    
        data/spec/dockly/docker_spec.rb
    CHANGED
    
    | 
         @@ -148,7 +148,7 @@ describe Dockly::Docker do 
     | 
|
| 
       148 
148 
     | 
    
         
             
              end
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
150 
     | 
    
         
             
              describe "#export_image", :docker do
         
     | 
| 
       151 
     | 
    
         
            -
                let(:image) { Docker::Image.create('fromImage' => ' 
     | 
| 
      
 151 
     | 
    
         
            +
                let(:image) { Docker::Image.create('fromImage' => 'ubuntu:14.04') }
         
     | 
| 
       152 
152 
     | 
    
         | 
| 
       153 
153 
     | 
    
         
             
                context "with a registry export" do
         
     | 
| 
       154 
154 
     | 
    
         
             
                  let(:registry) { double(:registry) }
         
     | 
| 
         @@ -250,7 +250,7 @@ describe Dockly::Docker do 
     | 
|
| 
       250 
250 
     | 
    
         
             
                let(:docker_file) { 'build/docker/dockly_test-image.tgz' }
         
     | 
| 
       251 
251 
     | 
    
         
             
                before { FileUtils.rm_rf(docker_file) }
         
     | 
| 
       252 
252 
     | 
    
         | 
| 
       253 
     | 
    
         
            -
                context ' 
     | 
| 
      
 253 
     | 
    
         
            +
                context 'with cleaning up' do
         
     | 
| 
       254 
254 
     | 
    
         
             
                  before do
         
     | 
| 
       255 
255 
     | 
    
         
             
                    subject.instance_eval do
         
     | 
| 
       256 
256 
     | 
    
         
             
                      import 'https://s3.amazonaws.com/swipely-pub/docker-export-ubuntu-latest.tgz'
         
     | 
| 
         @@ -258,7 +258,7 @@ describe Dockly::Docker do 
     | 
|
| 
       258 
258 
     | 
    
         
             
                      build "run touch /it_worked"
         
     | 
| 
       259 
259 
     | 
    
         
             
                      repository 'dockly_test'
         
     | 
| 
       260 
260 
     | 
    
         
             
                      build_dir 'build/docker'
         
     | 
| 
       261 
     | 
    
         
            -
                      cleanup_images  
     | 
| 
      
 261 
     | 
    
         
            +
                      cleanup_images true
         
     | 
| 
       262 
262 
     | 
    
         
             
                    end
         
     | 
| 
       263 
263 
     | 
    
         
             
                  end
         
     | 
| 
       264 
264 
     | 
    
         | 
| 
         @@ -276,19 +276,20 @@ describe Dockly::Docker do 
     | 
|
| 
       276 
276 
     | 
    
         
             
                      paths.should include('sbin/init')
         
     | 
| 
       277 
277 
     | 
    
         
             
                      paths.should include('lib/dockly.rb')
         
     | 
| 
       278 
278 
     | 
    
         
             
                      paths.should include('it_worked')
         
     | 
| 
       279 
     | 
    
         
            -
                    }. 
     | 
| 
      
 279 
     | 
    
         
            +
                    }.to_not change { ::Docker::Image.all(:all => true).length }
         
     | 
| 
       280 
280 
     | 
    
         
             
                  end
         
     | 
| 
       281 
281 
     | 
    
         
             
                end
         
     | 
| 
       282 
282 
     | 
    
         | 
| 
       283 
     | 
    
         
            -
                context ' 
     | 
| 
      
 283 
     | 
    
         
            +
                context 'without cleaning up' do
         
     | 
| 
       284 
284 
     | 
    
         
             
                  before do
         
     | 
| 
       285 
285 
     | 
    
         
             
                    subject.instance_eval do
         
     | 
| 
       286 
286 
     | 
    
         
             
                      import 'https://s3.amazonaws.com/swipely-pub/docker-export-ubuntu-latest.tgz'
         
     | 
| 
       287 
287 
     | 
    
         
             
                      git_archive '.'
         
     | 
| 
       288 
     | 
    
         
            -
                       
     | 
| 
      
 288 
     | 
    
         
            +
                      build_env 'TEST_FILE' => 'it_worked'
         
     | 
| 
      
 289 
     | 
    
         
            +
                      build "run touch $TEST_FILE"
         
     | 
| 
       289 
290 
     | 
    
         
             
                      repository 'dockly_test'
         
     | 
| 
       290 
291 
     | 
    
         
             
                      build_dir 'build/docker'
         
     | 
| 
       291 
     | 
    
         
            -
                      cleanup_images  
     | 
| 
      
 292 
     | 
    
         
            +
                      cleanup_images false
         
     | 
| 
       292 
293 
     | 
    
         
             
                    end
         
     | 
| 
       293 
294 
     | 
    
         
             
                  end
         
     | 
| 
       294 
295 
     | 
    
         | 
| 
         @@ -306,7 +307,7 @@ describe Dockly::Docker do 
     | 
|
| 
       306 
307 
     | 
    
         
             
                      paths.should include('sbin/init')
         
     | 
| 
       307 
308 
     | 
    
         
             
                      paths.should include('lib/dockly.rb')
         
     | 
| 
       308 
309 
     | 
    
         
             
                      paths.should include('it_worked')
         
     | 
| 
       309 
     | 
    
         
            -
                    }. 
     | 
| 
      
 310 
     | 
    
         
            +
                    }.to change { ::Docker::Image.all(:all => true).length }.by(4)
         
     | 
| 
       310 
311 
     | 
    
         
             
                  end
         
     | 
| 
       311 
312 
     | 
    
         
             
                end
         
     | 
| 
       312 
313 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: dockly
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-05-12 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: clamp
         
     |