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 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] = add_git_archive(images[:one])
54
- images[:three] = run_build_caches(images[:two])
55
- build_image(images[:three])
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"
@@ -1,3 +1,3 @@
1
1
  module Dockly
2
- VERSION = '2.1.0'
2
+ VERSION = '2.2.0'
3
3
  end
@@ -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 base') }
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
- "682aa2a07693cc27756eee9751db3903 /etc/vim/vimrc"
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' => 'base', 'Cmd' => %w[true]) }
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-ARCH\Z/)
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
 
@@ -52,7 +52,7 @@ describe Dockly::Deb do
52
52
  subject.create_package!
53
53
  end
54
54
 
55
- it 'exports the foreman to the deb', :cur do
55
+ it 'exports the foreman to the deb' do
56
56
  expect(contents).to match(/upstart-foreman/)
57
57
  expect(contents).to match(/systemd-foreman/)
58
58
  end
@@ -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' => 'base') }
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 'without cleaning up' do
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 false
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
- }.to change { ::Docker::Image.all(:all => true).length }.by(3)
279
+ }.to_not change { ::Docker::Image.all(:all => true).length }
280
280
  end
281
281
  end
282
282
 
283
- context 'with cleaning up' do
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
- build "run touch /it_worked"
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 true
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
- }.to_not change { ::Docker::Image.all(:all => true).length }
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.1.0
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-04-24 00:00:00.000000000 Z
12
+ date: 2015-05-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp