dapp 0.7.19 → 0.7.20

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