dockly 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -283,7 +283,7 @@ In addition to the above attributes, `deb` has the following references:
283
283
  - required: `false`
284
284
  - default: `nil`
285
285
  - class: `Dockly::Foreman`
286
- - description: any Foreman scripts used in the deb
286
+ - description: any Foreman scripts used in the deb.
287
287
 
288
288
  `rpm`
289
289
  -----
@@ -9,7 +9,7 @@ class Dockly::BuildCache::Base
9
9
  dsl_attribute :s3_bucket, :s3_object_prefix, :use_latest,
10
10
  :hash_command, :build_command, :parameter_commands,
11
11
  :base_dir, :command_dir, :output_dir, :tmp_dir,
12
- :keep_old_files
12
+ :keep_old_files, :safe_push_cache
13
13
 
14
14
  default_value :use_latest, false
15
15
  default_value :parameter_commands, {}
@@ -17,6 +17,7 @@ class Dockly::BuildCache::Base
17
17
  default_value :output_dir, '.'
18
18
  default_value :tmp_dir, Dir.tmpdir
19
19
  default_value :keep_old_files, false
20
+ default_value :safe_push_cache, false
20
21
 
21
22
  def execute!
22
23
  debug "Looking for cache for hash: #{hash_output}"
@@ -25,25 +25,11 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
25
25
  ensure_present! :output_dir
26
26
  if cache = pull_from_s3(version)
27
27
  debug "inserting to #{output_directory}"
28
- path = File.expand_path(cache.path)
29
- path_parent = File.dirname(path)
30
- tar_flags = keep_old_files ? '-xkf' : 'xf'
31
- container = ::Docker::Container.create(
32
- 'Image' => image.id,
33
- 'Cmd' => ['/bin/bash', '-c', [
34
- "mkdir -p #{File.dirname(output_directory)}",
35
- '&&',
36
- "tar #{tar_flags} #{File.join('/', 'host', path)} -C #{File.dirname(output_directory)}"
37
- ].join(' ')
38
- ],
39
- 'Volumes' => {
40
- File.join('/', 'host', path_parent) => { path_parent => 'rw' }
41
- }
42
- )
43
- container.start('Binds' => ["#{path_parent}:#{File.join('/', 'host', path_parent)}"])
44
- result = container.wait['StatusCode']
45
- raise "Got bad status code when copying build cache: #{result}" unless result.zero?
46
- self.image = container.commit
28
+ if safe_push_cache
29
+ push_cache_safe(cache)
30
+ else
31
+ push_cache_with_volumes(cache)
32
+ end
47
33
  debug "inserted cache into #{output_directory}"
48
34
  cache.close
49
35
  else
@@ -51,6 +37,37 @@ class Dockly::BuildCache::Docker < Dockly::BuildCache::Base
51
37
  end
52
38
  end
53
39
 
40
+ def push_cache_safe(cache)
41
+ container = image.run("mkdir -p #{File.dirname(output_directory)}")
42
+ image_with_dir = container.tap(&:wait).commit
43
+ self.image = image_with_dir.insert_local(
44
+ 'localPath' => cache.path,
45
+ 'outputPath' => File.dirname(output_directory)
46
+ )
47
+ end
48
+
49
+ def push_cache_with_volumes(cache)
50
+ path = File.expand_path(cache.path)
51
+ path_parent = File.dirname(path)
52
+ tar_flags = keep_old_files ? '-xkf' : 'xf'
53
+ container = ::Docker::Container.create(
54
+ 'Image' => image.id,
55
+ 'Cmd' => ['/bin/bash', '-c', [
56
+ "mkdir -p #{File.dirname(output_directory)}",
57
+ '&&',
58
+ "tar #{tar_flags} #{File.join('/', 'host', path)} -C #{File.dirname(output_directory)}"
59
+ ].join(' ')
60
+ ],
61
+ 'Volumes' => {
62
+ File.join('/', 'host', path_parent) => { path_parent => 'rw' }
63
+ }
64
+ )
65
+ container.start('Binds' => ["#{path_parent}:#{File.join('/', 'host', path_parent)}"])
66
+ result = container.wait['StatusCode']
67
+ raise "Got bad status code when copying build cache: #{result}" unless result.zero?
68
+ self.image = container.commit
69
+ end
70
+
54
71
  def copy_output_dir(container)
55
72
  ensure_present! :output_dir
56
73
  file_path = File.join(tmp_dir,s3_object(hash_output))
@@ -10,7 +10,7 @@ class Dockly::Deb
10
10
  :post_uninstall, :s3_bucket, :files, :app_user, :vendor
11
11
 
12
12
  dsl_class_attribute :docker, Dockly::Docker
13
- dsl_class_attribute :foreman, Dockly::Foreman
13
+ dsl_class_attribute :foreman, Dockly::Foreman, type: Array
14
14
 
15
15
  default_value :version, '0.0'
16
16
  default_value :release, '0'
@@ -127,14 +127,14 @@ private
127
127
  end
128
128
 
129
129
  def add_foreman(package)
130
- return if foreman.nil?
131
- info "adding foreman export"
132
- foreman.create!
133
- package.attributes[:prefix] = foreman.init_dir
134
- Dir.chdir(foreman.build_dir) do
135
- package.input('.')
130
+ return if (foreman || []).empty?
131
+ foreman.each do |fore|
132
+ info "adding foreman export '#{fore.name}'"
133
+ fore.create!
134
+ package.attributes[:prefix] = fore.init_dir
135
+ Dir.chdir(fore.build_dir) { package.input('.') }
136
+ package.attributes[:prefix] = nil
136
137
  end
137
- package.attributes[:prefix] = nil
138
138
  end
139
139
 
140
140
  def add_files(package)
@@ -1,3 +1,3 @@
1
1
  module Dockly
2
- VERSION = '2.0.2'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -13,7 +13,7 @@ docker_import() {
13
13
 
14
14
  worked=1
15
15
  for attempt in {1..200}; do
16
- [[ $worked != 0]] || break
16
+ [[ $worked != 0 ]] || break
17
17
  docker_import && worked=0 || (log "fetch: attempt $attempt failed, sleeping 30"; sleep 30)
18
18
  done
19
19
  [[ $worked != 0 ]] && fatal "fetch: failed to import diff image"
@@ -25,23 +25,36 @@ describe Dockly::Deb do
25
25
  end
26
26
  end
27
27
 
28
- context 'when it has a foreman export' do
28
+ context 'when it has foreman exports' do
29
+ let(:contents) { `dpkg --contents #{filename}` }
30
+
29
31
  before do
30
32
  subject.foreman do
31
- name 'foreman'
32
- init_dir '/etc/systemd/system'
33
+ name 'systemd-foreman'
33
34
  build_dir 'build/foreman'
35
+ init_dir '/etc/systemd/system'
34
36
  procfile File.join(File.dirname(__FILE__), '..', 'fixtures', 'Procfile')
35
37
  user 'root'
36
38
  type 'systemd'
37
39
  prefix '/bin/sh'
38
40
  end
39
- end
40
41
 
41
- it 'export the foreman to the deb' do
42
+ subject.foreman do
43
+ name 'upstart-foreman'
44
+ build_dir 'build/foreman'
45
+ init_dir '/etc/systemd/system'
46
+ procfile File.join(File.dirname(__FILE__), '..', 'fixtures', 'Procfile')
47
+ user 'root'
48
+ type 'upstart'
49
+ prefix '/bin/sh'
50
+ end
51
+
42
52
  subject.create_package!
43
- `dpkg --contents #{filename}`
44
- .lines.grep(/foreman/).should_not be_empty
53
+ end
54
+
55
+ it 'exports the foreman to the deb', :cur do
56
+ expect(contents).to match(/upstart-foreman/)
57
+ expect(contents).to match(/systemd-foreman/)
45
58
  end
46
59
  end
47
60
 
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.0.2
4
+ version: 2.1.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-03-11 00:00:00.000000000 Z
12
+ date: 2015-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp