dapp 0.6.17 → 0.7.1

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.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/config/en/common.yml +2 -2
  3. data/config/en/net_status.yml +25 -23
  4. data/lib/dapp.rb +24 -16
  5. data/lib/dapp/artifact.rb +1 -1
  6. data/lib/dapp/build/stage/after_install_artifact.rb +2 -2
  7. data/lib/dapp/build/stage/after_setup_artifact.rb +4 -4
  8. data/lib/dapp/build/stage/artifact_base.rb +25 -25
  9. data/lib/dapp/build/stage/artifact_default.rb +16 -16
  10. data/lib/dapp/build/stage/base.rb +36 -31
  11. data/lib/dapp/build/stage/before_install.rb +8 -8
  12. data/lib/dapp/build/stage/before_install_artifact.rb +2 -2
  13. data/lib/dapp/build/stage/before_setup.rb +8 -8
  14. data/lib/dapp/build/stage/before_setup_artifact.rb +2 -2
  15. data/lib/dapp/build/stage/build_artifact.rb +10 -10
  16. data/lib/dapp/build/stage/docker_instructions.rb +3 -3
  17. data/lib/dapp/build/stage/from.rb +7 -3
  18. data/lib/dapp/build/stage/ga_archive.rb +2 -2
  19. data/lib/dapp/build/stage/ga_archive_dependencies.rb +3 -3
  20. data/lib/dapp/build/stage/ga_artifact_patch.rb +2 -2
  21. data/lib/dapp/build/stage/ga_base.rb +2 -2
  22. data/lib/dapp/build/stage/ga_dependencies_base.rb +2 -2
  23. data/lib/dapp/build/stage/ga_latest_patch.rb +3 -3
  24. data/lib/dapp/build/stage/import_artifact.rb +19 -19
  25. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +2 -2
  26. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +2 -2
  27. data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +2 -2
  28. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +2 -2
  29. data/lib/dapp/build/stage/install/install.rb +9 -9
  30. data/lib/dapp/build/stage/mod/group.rb +2 -2
  31. data/lib/dapp/build/stage/mod/logging.rb +19 -19
  32. data/lib/dapp/build/stage/setup/chef_cookbooks.rb +4 -4
  33. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +2 -2
  34. data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +3 -3
  35. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +2 -2
  36. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +2 -2
  37. data/lib/dapp/build/stage/setup/setup.rb +9 -9
  38. data/lib/dapp/builder/base.rb +4 -4
  39. data/lib/dapp/builder/chef.rb +65 -64
  40. data/lib/dapp/builder/none.rb +45 -0
  41. data/lib/dapp/builder/shell.rb +3 -3
  42. data/lib/dapp/cli.rb +9 -10
  43. data/lib/dapp/cli/base.rb +6 -1
  44. data/lib/dapp/cli/bp.rb +2 -2
  45. data/lib/dapp/cli/build.rb +2 -2
  46. data/lib/dapp/cli/cleanup.rb +2 -2
  47. data/lib/dapp/cli/list.rb +2 -2
  48. data/lib/dapp/cli/mrproper.rb +0 -4
  49. data/lib/dapp/cli/push.rb +3 -3
  50. data/lib/dapp/cli/run.rb +3 -3
  51. data/lib/dapp/cli/spush.rb +2 -2
  52. data/lib/dapp/cli/stage_image.rb +2 -2
  53. data/lib/dapp/cli/stages/cleanup_local.rb +3 -3
  54. data/lib/dapp/cli/stages/cleanup_repo.rb +3 -3
  55. data/lib/dapp/cli/stages/flush_local.rb +3 -3
  56. data/lib/dapp/cli/stages/flush_repo.rb +3 -3
  57. data/lib/dapp/cli/stages/pull.rb +3 -3
  58. data/lib/dapp/cli/stages/push.rb +3 -3
  59. data/lib/dapp/config/artifact_dimg.rb +18 -0
  60. data/lib/dapp/config/artifact_group.rb +54 -0
  61. data/lib/dapp/config/base.rb +19 -0
  62. data/lib/dapp/config/dimg.rb +23 -0
  63. data/lib/dapp/config/dimg/instance_methods.rb +179 -0
  64. data/lib/dapp/config/dimg/validation.rb +124 -0
  65. data/lib/dapp/config/dimg_group.rb +56 -0
  66. data/lib/dapp/config/dimg_group_base.rb +36 -0
  67. data/lib/dapp/config/dimg_group_main.rb +21 -0
  68. data/lib/dapp/config/directive/artifact.rb +29 -54
  69. data/lib/dapp/config/directive/artifact_base.rb +92 -0
  70. data/lib/dapp/config/directive/base.rb +22 -0
  71. data/lib/dapp/config/directive/chef.rb +23 -61
  72. data/lib/dapp/config/directive/docker/artifact.rb +3 -14
  73. data/lib/dapp/config/directive/docker/base.rb +3 -78
  74. data/lib/dapp/config/directive/docker/dimg.rb +81 -0
  75. data/lib/dapp/config/directive/git_artifact_local.rb +13 -0
  76. data/lib/dapp/config/directive/git_artifact_remote.rb +55 -0
  77. data/lib/dapp/config/directive/mount.rb +25 -0
  78. data/lib/dapp/config/directive/shell/artifact.rb +3 -24
  79. data/lib/dapp/config/directive/shell/dimg.rb +68 -0
  80. data/lib/dapp/{application.rb → dimg.rb} +12 -33
  81. data/lib/dapp/{application → dimg}/git_artifact.rb +3 -3
  82. data/lib/dapp/{application → dimg}/path.rb +9 -5
  83. data/lib/dapp/{application → dimg}/stages.rb +8 -8
  84. data/lib/dapp/{application → dimg}/tags.rb +6 -6
  85. data/lib/dapp/docker_registry.rb +11 -15
  86. data/lib/dapp/error/dimg.rb +6 -0
  87. data/lib/dapp/git_artifact.rb +19 -20
  88. data/lib/dapp/git_repo/base.rb +6 -6
  89. data/lib/dapp/git_repo/own.rb +4 -4
  90. data/lib/dapp/git_repo/remote.rb +5 -5
  91. data/lib/dapp/image/docker.rb +0 -15
  92. data/lib/dapp/image/stage.rb +12 -22
  93. data/lib/dapp/project.rb +14 -18
  94. data/lib/dapp/project/command/build.rb +2 -2
  95. data/lib/dapp/project/command/cleanup.rb +9 -11
  96. data/lib/dapp/project/command/common.rb +8 -20
  97. data/lib/dapp/project/command/list.rb +7 -1
  98. data/lib/dapp/project/command/mrproper.rb +12 -22
  99. data/lib/dapp/project/command/push.rb +3 -4
  100. data/lib/dapp/project/command/run.rb +2 -2
  101. data/lib/dapp/project/command/spush.rb +3 -4
  102. data/lib/dapp/project/command/stage_image.rb +2 -2
  103. data/lib/dapp/project/command/stages/cleanup_local.rb +20 -24
  104. data/lib/dapp/project/command/stages/cleanup_repo.rb +3 -3
  105. data/lib/dapp/project/command/stages/common.rb +2 -3
  106. data/lib/dapp/project/command/stages/flush_local.rb +5 -7
  107. data/lib/dapp/project/command/stages/flush_repo.rb +2 -2
  108. data/lib/dapp/project/command/stages/pull.rb +3 -4
  109. data/lib/dapp/project/command/stages/push.rb +3 -4
  110. data/lib/dapp/project/dappfile.rb +9 -26
  111. data/lib/dapp/project/logging/base.rb +14 -0
  112. data/lib/dapp/project/logging/process.rb +1 -1
  113. data/lib/dapp/project/shellout/system.rb +2 -4
  114. data/lib/dapp/version.rb +1 -1
  115. metadata +25 -17
  116. data/lib/dapp/cli/tag.rb +0 -24
  117. data/lib/dapp/config/application.rb +0 -288
  118. data/lib/dapp/config/artifact.rb +0 -20
  119. data/lib/dapp/config/directive/build_dir.rb +0 -9
  120. data/lib/dapp/config/directive/git_artifact.rb +0 -59
  121. data/lib/dapp/config/directive/shell/base.rb +0 -85
  122. data/lib/dapp/config/directive/tmp_dir.rb +0 -36
  123. data/lib/dapp/config/main.rb +0 -20
  124. data/lib/dapp/error/application.rb +0 -6
  125. data/lib/dapp/project/command/tag.rb +0 -18
@@ -0,0 +1,19 @@
1
+ module Dapp
2
+ module Config
3
+ # Base
4
+ class Base
5
+ def initialize(project:, &blk)
6
+ @project = project
7
+ instance_eval(&blk) if block_given?
8
+ end
9
+
10
+ protected
11
+
12
+ attr_reader :project
13
+
14
+ def marshal_dup(obj)
15
+ Marshal.load(Marshal.dump(obj))
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Dapp
2
+ module Config
3
+ # Dimg
4
+ class Dimg < Base
5
+ include Validation
6
+ include InstanceMethods
7
+
8
+ attr_reader :_name
9
+
10
+ def initialize(name, project:)
11
+ self._name = name
12
+ super(project: project)
13
+ end
14
+
15
+ def _name=(name)
16
+ return if name.nil?
17
+ reg = '^[[[:alnum:]]_.-]*$'
18
+ raise Error::Config, code: :dimg_name_incorrect, data: { name: name, reg: reg } unless name =~ /#{reg}/
19
+ @_name = name
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,179 @@
1
+ module Dapp
2
+ module Config
3
+ class Dimg < Base
4
+ # InstanceMethods
5
+ module InstanceMethods
6
+ attr_reader :_builder
7
+ attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact
8
+ attr_reader :_install_dependencies, :_setup_dependencies
9
+
10
+ def install_depends_on(*args)
11
+ @_install_dependencies.concat(args)
12
+ end
13
+
14
+ def setup_depends_on(*args)
15
+ @_setup_dependencies.concat(args)
16
+ end
17
+
18
+ def chef(&blk)
19
+ builder_validation(:chef)
20
+ directive_eval(_chef, &blk)
21
+ end
22
+
23
+ def shell(&blk)
24
+ builder_validation(:shell)
25
+ directive_eval(_shell, &blk)
26
+ end
27
+
28
+ def docker(&blk)
29
+ directive_eval(_docker, &blk)
30
+ end
31
+
32
+ def artifact(&blk)
33
+ _artifact.concat begin
34
+ pass_to_custom(ArtifactGroup.new(project: project), :clone_to_artifact).tap do |artifact_group|
35
+ artifact_group.instance_eval(&blk) if block_given?
36
+ end._export
37
+ end
38
+ end
39
+
40
+ def git(type_or_repo_url, &blk)
41
+ type = type_or_repo_url.to_sym == :local ? :local : :remote
42
+ _git_artifact.send(type, type_or_repo_url, &blk)
43
+ end
44
+
45
+ def mount(to, &blk)
46
+ _mount << Directive::Mount.new(to, &blk)
47
+ end
48
+
49
+ def _builder
50
+ @_builder || :none
51
+ end
52
+
53
+ def _chef
54
+ @_chef ||= Directive::Chef.new
55
+ end
56
+
57
+ def _shell
58
+ @_shell ||= Directive::Shell::Dimg.new
59
+ end
60
+
61
+ def _docker
62
+ @_docker ||= Directive::Docker::Dimg.new
63
+ end
64
+
65
+ def _mount
66
+ @_mount ||= []
67
+ end
68
+
69
+ def _git_artifact
70
+ @_git_artifact ||= GitArtifact.new
71
+ end
72
+
73
+ [:build_dir, :tmp_dir].each do |mount_type|
74
+ define_method "_#{mount_type}_mount" do
75
+ _mount.select { |m| m._type == mount_type }
76
+ end
77
+ end
78
+
79
+ def _install_dependencies
80
+ @_install_dependencies ||= []
81
+ end
82
+
83
+ def _setup_dependencies
84
+ @_setup_dependencies ||= []
85
+ end
86
+
87
+ def _artifact
88
+ @_artifact ||= []
89
+ end
90
+
91
+ [:before, :after].each do |order|
92
+ [:setup, :install].each do |stage|
93
+ define_method "_#{order}_#{stage}_artifact" do
94
+ _artifact.select do |art|
95
+ art.public_send("_#{order}") == stage
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ def _import_artifact
102
+ _artifact.select(&:not_associated?)
103
+ end
104
+
105
+ # GitArtifact
106
+ class GitArtifact
107
+ attr_reader :_local, :_remote
108
+
109
+ def initialize
110
+ @_local = []
111
+ @_remote = []
112
+ end
113
+
114
+ def local(_, &blk)
115
+ @_local << Directive::GitArtifactLocal.new(&blk)
116
+ end
117
+
118
+ def remote(repo_url, &blk)
119
+ @_remote << Directive::GitArtifactRemote.new(repo_url, &blk)
120
+ end
121
+
122
+ def _local
123
+ @_local.map(&:_export).flatten
124
+ end
125
+
126
+ def _remote
127
+ @_remote.map(&:_export).flatten
128
+ end
129
+
130
+ protected
131
+
132
+ def empty?
133
+ (_local + _remote).empty?
134
+ end
135
+
136
+ def validate!
137
+ (_local + _remote).each { |exp| exp.send(:validate!) }
138
+ end
139
+ end
140
+
141
+ protected
142
+
143
+ def builder_validation(type)
144
+ @_builder = type if _builder == :none
145
+ raise Error::Config, code: :builder_type_conflict unless @_builder == type
146
+ end
147
+
148
+ def directive_eval(directive, &blk)
149
+ directive.instance_eval(&blk) if block_given?
150
+ end
151
+
152
+ def pass_to_default(dimg)
153
+ pass_to_custom(dimg, :clone)
154
+ end
155
+
156
+ def pass_to_custom(obj, clone_method)
157
+ passed_directives.each do |directive|
158
+ next if (variable = instance_variable_get(directive)).nil?
159
+
160
+ obj.instance_variable_set(directive, begin
161
+ case variable
162
+ when Directive::Base, GitArtifact then variable.send(clone_method)
163
+ when Symbol then variable
164
+ when Array then variable.dup
165
+ else
166
+ raise
167
+ end
168
+ end)
169
+ end
170
+ obj
171
+ end
172
+
173
+ def passed_directives
174
+ [:@_chef, :@_shell, :@_docker, :@_git_artifact, :@_mount, :@_artifact, :@_builder]
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,124 @@
1
+ module Dapp
2
+ module Config
3
+ class Dimg < Base
4
+ # Validation
5
+ module Validation
6
+ protected
7
+
8
+ def validate!
9
+ directives_validate!
10
+ validate_scratch!
11
+ validate_artifacts!
12
+ validate_artifacts_artifacts!
13
+ end
14
+
15
+ def validate_scratch!
16
+ if _docker._from.nil?
17
+ validate_scratch_directives!
18
+ validate_scratch_artifacts!
19
+ else
20
+ raise Error::Config, code: :stage_artifact_not_associated unless _import_artifact.empty?
21
+ end
22
+ end
23
+
24
+ def directives_validate!
25
+ passed_directives.each do |v|
26
+ next if (value = instance_variable_get(v)).nil?
27
+ Array(value).each do |elm|
28
+ elm.send(:validate!) if elm.methods.include?(:validate!)
29
+ end
30
+ end
31
+ end
32
+
33
+ def validate_scratch_directives!
34
+ directives = [:_shell, :_chef, :_git_artifact, :_install_dependencies, :_setup_dependencies,
35
+ :_tmp_dir_mount, :_build_dir_mount]
36
+ directives.each do |directive|
37
+ raise Error::Config,
38
+ code: :scratch_unsupported_directive,
39
+ data: { directive: directive[1..-1] } unless public_send(directive).send(:empty?)
40
+ end
41
+
42
+ docker_directives = [:_expose, :_env, :_cmd, :_onbuild, :_workdir, :_user, :_entrypoint]
43
+ docker_directives.each do |directive|
44
+ value = _docker.public_send(directive)
45
+ raise Error::Config,
46
+ code: :scratch_unsupported_directive,
47
+ data: { directive: "docker.#{directive}" } unless value.nil? || value.send(:empty?)
48
+ end
49
+ end
50
+
51
+ def validate_scratch_artifacts!
52
+ raise Error::Config, code: :scratch_artifact_associated unless _associated_artifacts.empty?
53
+ raise Error::Config, code: :scratch_artifact_required if _import_artifact.empty?
54
+ _import_artifact.each do |artifact|
55
+ raise Error::Config, code: :scratch_artifact_docker_from if artifact._config._docker._from.nil?
56
+ end
57
+ end
58
+
59
+ def validate_artifacts_artifacts!
60
+ _artifact.each { |artifact_dimg| artifact_dimg._config.validate! }
61
+ end
62
+
63
+ def validate_artifacts!
64
+ artifacts = validate_artifact_format(validated_artifacts)
65
+ loop do
66
+ break if artifacts.empty?
67
+ verifiable_artifact = artifacts.shift
68
+ artifacts.select { |a| a[:to] == verifiable_artifact[:to] }.each do |artifact|
69
+ next if verifiable_artifact[:index] == artifact[:index]
70
+ validate_artifact!(verifiable_artifact, artifact)
71
+ validate_artifact!(artifact, verifiable_artifact)
72
+ end
73
+ end
74
+ end
75
+
76
+ def validate_artifact_format(artifacts)
77
+ artifacts.map do |a|
78
+ path_format = proc { |path| File.expand_path(File.join('/', path, '/'))[1..-1] }
79
+
80
+ path_format.call(a._to) =~ %r{^([^\/]*)\/?(.*)$}
81
+ to = Regexp.last_match(1)
82
+ include_paths = a._include_paths.dup
83
+ include_paths << Regexp.last_match(2) unless Regexp.last_match(2).empty?
84
+ exclude_paths = a._exclude_paths.dup
85
+
86
+ {
87
+ index: artifacts.index(a),
88
+ to: to,
89
+ include_paths: include_paths.map(&path_format),
90
+ exclude_paths: exclude_paths.map(&path_format)
91
+ }
92
+ end
93
+ end
94
+
95
+ def validate_artifact!(verifiable_artifact, artifact)
96
+ verifiable_artifact[:include_paths].each do |verifiable_path|
97
+ potential_conflicts = artifact[:include_paths].select { |path| path.start_with?(verifiable_path) }
98
+ validate_artifact_path!(verifiable_artifact, potential_conflicts)
99
+ end.empty? && verifiable_artifact[:exclude_paths].empty? && raise(Error::Config, code: :artifact_conflict)
100
+ validate_artifact_path!(verifiable_artifact, artifact[:include_paths]) if verifiable_artifact[:include_paths].empty?
101
+ end
102
+
103
+ def validate_artifact_path!(verifiable_artifact, potential_conflicts)
104
+ potential_conflicts.all? do |path|
105
+ loop do
106
+ break if verifiable_artifact[:exclude_paths].include?(path) || ((path = File.dirname(path)) == '.')
107
+ end
108
+ verifiable_artifact[:exclude_paths].include?(path)
109
+ end.tap { |res| res || raise(Error::Config, code: :artifact_conflict) }
110
+ end
111
+
112
+ def _associated_artifacts
113
+ _artifact.select do |art|
114
+ !(art._before.nil? && art._after.nil?)
115
+ end
116
+ end
117
+
118
+ def validated_artifacts
119
+ _artifact + _git_artifact._local + _git_artifact._remote
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,56 @@
1
+ module Dapp
2
+ module Config
3
+ # DimgGroup
4
+ class DimgGroup < DimgGroupBase
5
+ include Dimg::InstanceMethods
6
+
7
+ def chef(&blk)
8
+ check_dimg_directive_order(:chef)
9
+ super
10
+ end
11
+
12
+ def shell(&blk)
13
+ check_dimg_directive_order(:shell)
14
+ super
15
+ end
16
+
17
+ def docker(&blk)
18
+ check_dimg_directive_order(:docker)
19
+ super
20
+ end
21
+
22
+ def artifact(&blk)
23
+ check_dimg_group_directive_order(:artifact)
24
+ super
25
+ end
26
+
27
+ def git(type_or_git_repo, &blk)
28
+ check_dimg_directive_order(:git)
29
+ super
30
+ end
31
+
32
+ def mount(to, &blk)
33
+ check_dimg_directive_order(:mount)
34
+ super
35
+ end
36
+
37
+ protected
38
+
39
+ def before_dimg_eval(dimg)
40
+ pass_to_default(dimg)
41
+ end
42
+
43
+ def check_dimg_directive_order(directive)
44
+ project.log_config_warning(desc: { code: 'wrong_using_base_directive',
45
+ data: { directive: directive },
46
+ context: 'warning' }) if _dimg.any? || _dimg_group.any? || _artifact.any?
47
+ end
48
+
49
+ def check_dimg_group_directive_order(directive)
50
+ project.log_config_warning(desc: { code: 'wrong_using_directive',
51
+ data: { directive: directive },
52
+ context: 'warning' }) if _dimg.any? || _dimg_group.any?
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,36 @@
1
+ module Dapp
2
+ module Config
3
+ # DimgGroupBase
4
+ class DimgGroupBase < Base
5
+ attr_reader :_dimg_group
6
+
7
+ def initialize(project:)
8
+ @_dimg = []
9
+ @_dimg_group = []
10
+
11
+ super(project: project)
12
+ end
13
+
14
+ def dimg(name = nil, &blk)
15
+ Config::Dimg.new(name, project: project).tap do |dimg|
16
+ before_dimg_eval(dimg)
17
+ dimg.instance_eval(&blk) if block_given?
18
+ @_dimg << dimg
19
+ end
20
+ end
21
+
22
+ def dimg_group(&blk)
23
+ Config::DimgGroup.new(project: project, &blk).tap { |dimg_group| @_dimg_group << dimg_group }
24
+ end
25
+
26
+ def _dimg
27
+ (@_dimg + @_dimg_group.map(&:_dimg)).flatten
28
+ end
29
+
30
+ protected
31
+
32
+ def before_dimg_eval(_dimg)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Config
3
+ # DimgGroupMain
4
+ class DimgGroupMain < DimgGroupBase
5
+ def dimg(name = nil)
6
+ with_dimg_validation { super }
7
+ end
8
+
9
+ def dimg_group
10
+ with_dimg_validation { super }
11
+ end
12
+
13
+ protected
14
+
15
+ def with_dimg_validation
16
+ yield
17
+ raise Error::Config, code: :dimg_name_required if _dimg.any? { |dimg| dimg._name.nil? } && _dimg.size > 1
18
+ end
19
+ end
20
+ end
21
+ end