dapp 0.7.19 → 0.7.20

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: 0fb95faf56ca420cff6868898fb7507b2282f0d0
4
- data.tar.gz: bf64455dcb33e447d8044c898d0159f2e5290eb9
3
+ metadata.gz: 96bc677343a9749478a52286ccb933740bc6e557
4
+ data.tar.gz: ab744c2f9d2be05923483460de051cafce13d646
5
5
  SHA512:
6
- metadata.gz: 5bd04cc708034bd5bdade09dba0bf77f0d2c0d8c0ed434409b32437fca1ffaa86bd25b3c296fc8eab22b80234caf3eeb0922ae6c834d541d8c60cb6eb0d9bfac
7
- data.tar.gz: 2a992ce6691468ac9207592e3cea2011664213768a86189b2def78da5acea80ef5df6cb3116a3038b28268472b4670aeabcb703d4b9bd205866cfebb43d44e13
6
+ metadata.gz: 4f229985856b89b0ff2379b465b37255729adc1f4c2fa9ae527885a7a08dbd1a4bd1927e520bdb13cdd0d6bcf6a2eb6b51dfbbda92e7542b202c7e07cfc7b7a5
7
+ data.tar.gz: 9c43f662cdabe89c20e063f001bc0bf1cfe2779d8cf03bb45f37b1708050ab3b461304b41bf5d79382ad0573fd1374c72637ef0e6d49c9fd4166bb56ba1dc31c
@@ -40,6 +40,7 @@ en:
40
40
  builder_type_conflict: 'Conflict between builder types!'
41
41
  builder_type_unsupported: "Defined unsupported builder type `%{type}`!"
42
42
  docker_from_incorrect: "`docker.from` has incorrect value `%{name}`!"
43
+ docker_from_without_tag: "`docker.from`: image `%{name}` without !"
43
44
  stage_artifact_not_associated: "Artifact not associated with any stage: expected `before` or `after` attribute!"
44
45
  stage_artifact_double_associate: "Cannot use `%{stage}` stage for artifact, already used in `%{conflict_stage}` stage!"
45
46
  stage_artifact_not_supported_associated_stage: "Bad artifact stage `%{stage}`!"
data/lib/dapp.rb CHANGED
@@ -64,6 +64,7 @@ require 'dapp/filelock'
64
64
  require 'dapp/config/base'
65
65
  require 'dapp/config/directive/base'
66
66
  require 'dapp/config/dimg/instance_methods'
67
+ require 'dapp/config/dimg/merging'
67
68
  require 'dapp/config/dimg/validation'
68
69
  require 'dapp/config/dimg'
69
70
  require 'dapp/config/artifact_dimg'
@@ -37,7 +37,7 @@ module Dapp
37
37
  excludes = find_command_excludes(from, exclude_paths).join(' ')
38
38
 
39
39
  copy_files = proc do |from_, path_ = ''|
40
- "if [[ -d #{File.join(from_, path_)} ]]; then " \
40
+ "if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
41
41
  "#{dimg.project.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
42
42
  "#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -D #{credentials} {} " \
43
43
  "#{File.join(to, '$(echo {} | ' \
@@ -2,7 +2,9 @@ module Dapp
2
2
  module Config
3
3
  # ArtifactDimg
4
4
  class ArtifactDimg < Dimg
5
- attr_reader :_artifact_dependencies
5
+ def _artifact_dependencies
6
+ @_artifact_dependencies ||= []
7
+ end
6
8
 
7
9
  def validate_scratch!
8
10
  end
@@ -30,14 +30,9 @@ module Dapp
30
30
 
31
31
  def export(*args, &blk)
32
32
  _export.concat begin
33
- artifact_config = pass_to_default(ArtifactDimg.new(
34
- "artifact-#{SecureRandom.hex(2)}",
35
- project: project
36
- ))
37
-
33
+ artifact_config = pass_to(ArtifactDimg.new("artifact-#{SecureRandom.hex(2)}", project: project))
38
34
  artifact = Directive::Artifact.new(project: project, config: artifact_config)
39
35
  artifact.send(:export, *args, &blk)
40
-
41
36
  artifact._export
42
37
  end
43
38
  end
@@ -48,10 +43,8 @@ module Dapp
48
43
  def check_dimg_group_directive_order(_directive)
49
44
  end
50
45
 
51
- def pass_to_default(obj)
52
- super(obj).tap do |artifact_dimg|
53
- artifact_dimg.instance_variable_set(:@_artifact_dependencies, _artifact_dependencies.dup)
54
- end
46
+ def passed_directives
47
+ super << :artifact_dependencies
55
48
  end
56
49
  end
57
50
  end
@@ -28,10 +28,6 @@ module Dapp
28
28
  def _clone
29
29
  Marshal.load Marshal.dump(self)
30
30
  end
31
-
32
- def _clone_to(obj)
33
- obj.marshal_load marshal_dump
34
- end
35
31
  end
36
32
  end
37
33
  end
@@ -4,6 +4,7 @@ module Dapp
4
4
  class Dimg < Base
5
5
  include Validation
6
6
  include InstanceMethods
7
+ include Merging
7
8
 
8
9
  attr_reader :_name
9
10
 
@@ -20,12 +20,12 @@ module Dapp
20
20
  end
21
21
 
22
22
  def chef(&blk)
23
- builder_validation(:chef)
23
+ builder(:chef)
24
24
  directive_eval(_chef, &blk)
25
25
  end
26
26
 
27
27
  def shell(&blk)
28
- builder_validation(:shell)
28
+ builder(:shell)
29
29
  directive_eval(_shell, &blk)
30
30
  end
31
31
 
@@ -35,7 +35,7 @@ module Dapp
35
35
 
36
36
  def artifact(&blk)
37
37
  _artifact.concat begin
38
- pass_to_custom(ArtifactGroup.new(project: project), :clone_to_artifact).tap do |artifact_group|
38
+ pass_to(ArtifactGroup.new(project: project)).tap do |artifact_group|
39
39
  artifact_group.instance_eval(&blk) if block_given?
40
40
  end._export
41
41
  end
@@ -150,7 +150,7 @@ module Dapp
150
150
 
151
151
  protected
152
152
 
153
- def builder_validation(type)
153
+ def builder(type)
154
154
  @_builder = type if _builder == :none
155
155
  raise Error::Config, code: :builder_type_conflict unless @_builder == type
156
156
  end
@@ -160,33 +160,34 @@ module Dapp
160
160
  directive
161
161
  end
162
162
 
163
- def pass_to_default(dimg)
164
- pass_to_custom(dimg, :clone)
165
- end
166
-
167
- def pass_to_custom(obj, clone_method)
163
+ def pass_to(obj)
168
164
  passed_directives.each do |directive|
169
- next if (variable = instance_variable_get(directive)).nil?
170
-
171
- obj.instance_variable_set(directive, begin
172
- case variable
173
- when Directive::Base, GitArtifact then variable.send(clone_method)
174
- when Symbol then variable
175
- when Array then variable.dup
176
- when TrueClass, FalseClass then variable
165
+ directive_variable_name = :"@_#{directive}"
166
+
167
+ next if (value = instance_variable_get(directive_variable_name)).nil?
168
+ obj_value = obj.instance_variable_get(directive_variable_name)
169
+
170
+ if value.is_a?(Directive::Base)
171
+ obj.builder(directive) if [:chef, :shell].include? directive
172
+ if obj_value.nil?
173
+ obj.instance_variable_set(directive_variable_name, value.send(:_clone))
177
174
  else
178
- raise
175
+ obj_value.send(:merge, value)
179
176
  end
180
- end)
177
+ elsif respond_to?(:"merge_#{directive}", true)
178
+ obj.instance_variable_set(directive_variable_name, send(:"merge_#{directive}", obj_value, value))
179
+ else
180
+ raise
181
+ end
181
182
  end
182
183
  obj
183
184
  end
184
185
 
185
186
  def passed_directives
186
- [:@_chef, :@_shell, :@_docker,
187
- :@_git_artifact, :@_mount,
188
- :@_artifact, :@_builder, :@_dev_mode,
189
- :@_install_dependencies, :@_setup_dependencies]
187
+ [:chef, :shell, :docker,
188
+ :git_artifact, :mount,
189
+ :artifact, :builder, :dev_mode,
190
+ :install_dependencies, :setup_dependencies]
190
191
  end
191
192
  end
192
193
  end
@@ -0,0 +1,28 @@
1
+ module Dapp
2
+ module Config
3
+ class Dimg < Base
4
+ # Merging
5
+ module Merging
6
+ protected
7
+
8
+ [:mount, :artifact].each do |directive|
9
+ define_method "merge_#{directive}" do |a, b|
10
+ b.map { |a| a.send(:_clone) }.concat(Array(a))
11
+ end
12
+ end
13
+
14
+ [:install_dependencies, :setup_dependencies, :artifact_dependencies].each do |directive|
15
+ define_method "merge_#{directive}" do |a, b|
16
+ b.dup.concat(Array(a))
17
+ end
18
+ end
19
+
20
+ [:builder, :dev_mode].each do |directive|
21
+ define_method "merge_#{directive}" do |a, b|
22
+ a.nil? ? b : a
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -22,8 +22,9 @@ module Dapp
22
22
  end
23
23
 
24
24
  def directives_validate!
25
- passed_directives.each do |v|
26
- next if (value = instance_variable_get(v)).nil?
25
+ passed_directives.each do |directive|
26
+ directive_variable_name = :"@_#{directive}"
27
+ next if (value = instance_variable_get(directive_variable_name)).nil?
27
28
  Array(value).each do |elm|
28
29
  elm.send(:validate!) if elm.methods.include?(:validate!)
29
30
  end
@@ -3,6 +3,7 @@ module Dapp
3
3
  # DimgGroup
4
4
  class DimgGroup < DimgGroupBase
5
5
  include Dimg::InstanceMethods
6
+ include Dimg::Merging
6
7
 
7
8
  def chef(&blk)
8
9
  check_dimg_directive_order(:chef)
@@ -37,11 +38,11 @@ module Dapp
37
38
  protected
38
39
 
39
40
  def before_dimg_eval(dimg)
40
- pass_to_default(dimg)
41
+ pass_to(dimg)
41
42
  end
42
43
 
43
44
  def before_dimg_group_eval(dimg_group)
44
- pass_to_default(dimg_group)
45
+ pass_to(dimg_group)
45
46
  end
46
47
 
47
48
  def check_dimg_directive_order(directive)
@@ -17,16 +17,16 @@ module Dapp
17
17
 
18
18
  def dimg(name = nil, &blk)
19
19
  Config::Dimg.new(name, project: project).tap do |dimg|
20
- before_dimg_eval(dimg)
21
20
  dimg.instance_eval(&blk) if block_given?
21
+ after_dimg_eval(dimg)
22
22
  @_dimg << dimg
23
23
  end
24
24
  end
25
25
 
26
26
  def dimg_group(&blk)
27
27
  Config::DimgGroup.new(project: project).tap do |dimg_group|
28
- before_dimg_group_eval(dimg_group)
29
28
  dimg_group.instance_eval(&blk) if block_given?
29
+ after_dimg_group_eval(dimg_group)
30
30
  @_dimg_group << dimg_group
31
31
  end
32
32
  end
@@ -37,16 +37,16 @@ module Dapp
37
37
 
38
38
  protected
39
39
 
40
- def before_dimg_eval(dimg)
41
- pass_to_default(dimg)
40
+ def after_dimg_eval(dimg)
41
+ pass_to(dimg)
42
42
  end
43
43
 
44
- def before_dimg_group_eval(dimg_group)
45
- pass_to_default(dimg_group)
44
+ def after_dimg_group_eval(dimg_group)
45
+ pass_to(dimg_group)
46
46
  end
47
47
 
48
- def pass_to_default(obj)
49
- obj.instance_variable_set(:@_dev_mode, @_dev_mode)
48
+ def pass_to(obj)
49
+ obj.instance_variable_set(:@_dev_mode, obj.instance_variable_get(:@_dev_mode) || @_dev_mode)
50
50
  end
51
51
  end
52
52
  end
@@ -9,8 +9,26 @@ module Dapp
9
9
  _clone
10
10
  end
11
11
 
12
- def clone_to_artifact
13
- clone
12
+ def merge(obj)
13
+ cloned_obj = obj.clone
14
+
15
+ instance_variables.each do |variable_name|
16
+ next if (obj_value = cloned_obj.instance_variable_get(variable_name)).nil?
17
+ value = instance_variable_get(variable_name)
18
+
19
+ case obj_value
20
+ when Directive::Base
21
+ if value.nil?
22
+ instance_variable_set(variable_name, obj_value)
23
+ else
24
+ value.send(:merge, obj_value)
25
+ end
26
+ when Array then instance_variable_set(variable_name, obj_value.concat(Array(value)))
27
+ when Hash then instance_variable_set(variable_name, obj_value.merge(Hash(value)))
28
+ else
29
+ instance_variable_set(variable_name, value || obj_value)
30
+ end
31
+ end
14
32
  end
15
33
  end
16
34
  end
@@ -66,14 +66,6 @@ module Dapp
66
66
  entrypoint: _entrypoint
67
67
  }
68
68
  end
69
-
70
- protected
71
-
72
- def clone_to_artifact
73
- Artifact.new(project: project).tap do |docker|
74
- docker.instance_variable_set('@_from', @_from)
75
- end
76
- end
77
69
  end
78
70
  end
79
71
  end
@@ -54,10 +54,6 @@ module Dapp
54
54
  def empty?
55
55
  (_before_install_command + _before_setup_command + _install_command + _setup_command).empty?
56
56
  end
57
-
58
- def clone_to_artifact
59
- _clone_to Artifact.new(project: project)
60
- end
61
57
  end
62
58
  end
63
59
  end
data/lib/dapp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Version
2
2
  module Dapp
3
- VERSION = '0.7.19'.freeze
3
+ VERSION = '0.7.20'.freeze
4
4
  BUILD_CACHE_VERSION = 6
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.19
4
+ version: 0.7.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-14 00:00:00.000000000 Z
11
+ date: 2016-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -438,6 +438,7 @@ files:
438
438
  - lib/dapp/config/base.rb
439
439
  - lib/dapp/config/dimg.rb
440
440
  - lib/dapp/config/dimg/instance_methods.rb
441
+ - lib/dapp/config/dimg/merging.rb
441
442
  - lib/dapp/config/dimg/validation.rb
442
443
  - lib/dapp/config/dimg_group.rb
443
444
  - lib/dapp/config/dimg_group_base.rb