dapp 0.6.1 → 0.6.2

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +3 -3
  3. data/config/en/common.yml +19 -4
  4. data/config/en/net_status.yml +13 -4
  5. data/lib/dapp.rb +48 -16
  6. data/lib/dapp/application.rb +75 -40
  7. data/lib/dapp/application/path.rb +3 -2
  8. data/lib/dapp/application/stages.rb +59 -0
  9. data/lib/dapp/artifact.rb +22 -0
  10. data/lib/dapp/build/stage/after_install_artifact.rb +13 -0
  11. data/lib/dapp/build/stage/after_setup_artifact.rb +17 -0
  12. data/lib/dapp/build/stage/artifact_base.rb +80 -0
  13. data/lib/dapp/build/stage/artifact_default.rb +62 -0
  14. data/lib/dapp/build/stage/base.rb +47 -12
  15. data/lib/dapp/build/stage/before_install.rb +6 -5
  16. data/lib/dapp/build/stage/before_install_artifact.rb +13 -0
  17. data/lib/dapp/build/stage/before_setup.rb +7 -8
  18. data/lib/dapp/build/stage/before_setup_artifact.rb +13 -0
  19. data/lib/dapp/build/stage/build_artifact.rb +32 -0
  20. data/lib/dapp/build/stage/docker_instructions.rb +4 -22
  21. data/lib/dapp/build/stage/from.rb +7 -8
  22. data/lib/dapp/build/stage/ga_archive.rb +1 -1
  23. data/lib/dapp/build/stage/ga_archive_dependencies.rb +1 -1
  24. data/lib/dapp/build/stage/ga_artifact_patch.rb +21 -0
  25. data/lib/dapp/build/stage/ga_base.rb +6 -29
  26. data/lib/dapp/build/stage/ga_dependencies_base.rb +4 -13
  27. data/lib/dapp/build/stage/ga_latest_patch.rb +2 -2
  28. data/lib/dapp/build/stage/import_artifact.rb +69 -0
  29. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +1 -1
  30. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +1 -1
  31. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +1 -7
  32. data/lib/dapp/build/stage/install/install.rb +12 -7
  33. data/lib/dapp/build/stage/mod/logging.rb +10 -7
  34. data/lib/dapp/build/stage/setup/chef_cookbooks.rb +3 -4
  35. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +1 -1
  36. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +2 -2
  37. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +2 -8
  38. data/lib/dapp/build/stage/setup/setup.rb +12 -7
  39. data/lib/dapp/builder/base.rb +13 -1
  40. data/lib/dapp/builder/chef.rb +125 -79
  41. data/lib/dapp/builder/chef/cookbook_metadata.rb +1 -1
  42. data/lib/dapp/builder/shell.rb +2 -3
  43. data/lib/dapp/cli.rb +3 -3
  44. data/lib/dapp/cli/base.rb +0 -2
  45. data/lib/dapp/cli/bp.rb +0 -4
  46. data/lib/dapp/cli/build.rb +3 -7
  47. data/lib/dapp/cli/cleanup.rb +0 -2
  48. data/lib/dapp/cli/list.rb +0 -2
  49. data/lib/dapp/cli/mrproper.rb +22 -0
  50. data/lib/dapp/cli/push.rb +4 -3
  51. data/lib/dapp/cli/run.rb +0 -2
  52. data/lib/dapp/cli/spush.rb +0 -2
  53. data/lib/dapp/cli/stage_image.rb +24 -0
  54. data/lib/dapp/cli/stages.rb +7 -5
  55. data/lib/dapp/cli/stages/cleanup_local.rb +28 -0
  56. data/lib/dapp/cli/stages/cleanup_repo.rb +24 -0
  57. data/lib/dapp/cli/stages/{flush.rb → flush_local.rb} +4 -6
  58. data/lib/dapp/cli/stages/{cleanup.rb → flush_repo.rb} +4 -6
  59. data/lib/dapp/cli/stages/pull.rb +28 -0
  60. data/lib/dapp/cli/stages/push.rb +24 -0
  61. data/lib/dapp/config/application.rb +185 -44
  62. data/lib/dapp/config/artifact.rb +10 -50
  63. data/lib/dapp/config/directive/artifact.rb +77 -0
  64. data/lib/dapp/config/directive/build_dir.rb +9 -0
  65. data/lib/dapp/config/directive/chef.rb +95 -0
  66. data/lib/dapp/config/directive/docker/artifact.rb +26 -0
  67. data/lib/dapp/config/directive/docker/base.rb +91 -0
  68. data/lib/dapp/config/directive/git_artifact.rb +59 -0
  69. data/lib/dapp/config/directive/shell/artifact.rb +38 -0
  70. data/lib/dapp/config/directive/shell/base.rb +85 -0
  71. data/lib/dapp/config/directive/tmp_dir.rb +36 -0
  72. data/lib/dapp/config/main.rb +1 -7
  73. data/lib/dapp/core_ext/hash.rb +21 -0
  74. data/lib/dapp/docker_registry/base.rb +60 -5
  75. data/lib/dapp/docker_registry/mod/request.rb +2 -14
  76. data/lib/dapp/git_artifact.rb +32 -23
  77. data/lib/dapp/git_repo/base.rb +1 -1
  78. data/lib/dapp/image/argument.rb +3 -3
  79. data/lib/dapp/image/docker.rb +13 -16
  80. data/lib/dapp/image/scratch.rb +29 -0
  81. data/lib/dapp/image/stage.rb +33 -23
  82. data/lib/dapp/lock/base.rb +18 -11
  83. data/lib/dapp/lock/file.rb +18 -16
  84. data/lib/dapp/prctl.rb +1 -0
  85. data/lib/dapp/project.rb +22 -9
  86. data/lib/dapp/project/command/bp.rb +2 -5
  87. data/lib/dapp/project/command/build.rb +1 -2
  88. data/lib/dapp/project/command/cleanup.rb +9 -7
  89. data/lib/dapp/project/command/common.rb +37 -12
  90. data/lib/dapp/project/command/mrproper.rb +57 -0
  91. data/lib/dapp/project/command/push.rb +8 -2
  92. data/lib/dapp/project/command/run.rb +1 -1
  93. data/lib/dapp/project/command/stage_image.rb +15 -0
  94. data/lib/dapp/project/command/stages/cleanup_local.rb +100 -0
  95. data/lib/dapp/project/command/stages/cleanup_repo.rb +65 -0
  96. data/lib/dapp/project/command/stages/common.rb +48 -0
  97. data/lib/dapp/project/command/stages/flush_local.rb +24 -0
  98. data/lib/dapp/project/command/stages/flush_repo.rb +22 -0
  99. data/lib/dapp/project/command/stages/pull.rb +26 -0
  100. data/lib/dapp/project/command/stages/push.rb +22 -0
  101. data/lib/dapp/project/dappfile.rb +3 -1
  102. data/lib/dapp/project/deps/base.rb +52 -0
  103. data/lib/dapp/project/deps/gitartifact.rb +36 -0
  104. data/lib/dapp/project/lock.rb +20 -13
  105. data/lib/dapp/project/logging/base.rb +20 -3
  106. data/lib/dapp/project/logging/i18n.rb +25 -0
  107. data/lib/dapp/project/logging/paint.rb +47 -0
  108. data/lib/dapp/project/logging/process.rb +17 -10
  109. data/lib/dapp/project/shellout/base.rb +74 -0
  110. data/lib/dapp/project/shellout/streaming.rb +49 -0
  111. data/lib/dapp/project/shellout/system.rb +72 -0
  112. data/lib/dapp/project/ssh_agent.rb +8 -9
  113. data/lib/dapp/version.rb +1 -1
  114. metadata +48 -17
  115. data/lib/dapp/build/stage/artifact.rb +0 -40
  116. data/lib/dapp/build/stage/mod/artifact.rb +0 -79
  117. data/lib/dapp/config/chef.rb +0 -51
  118. data/lib/dapp/config/docker.rb +0 -82
  119. data/lib/dapp/config/git_artifact.rb +0 -51
  120. data/lib/dapp/config/shell.rb +0 -64
  121. data/lib/dapp/helper/i18n.rb +0 -20
  122. data/lib/dapp/helper/paint.rb +0 -27
  123. data/lib/dapp/helper/shellout.rb +0 -63
  124. data/lib/dapp/helper/streaming.rb +0 -47
  125. data/lib/dapp/project/command/stages_cleanup.rb +0 -72
  126. data/lib/dapp/project/command/stages_flush.rb +0 -20
  127. data/lib/dapp/project/paint.rb +0 -16
@@ -0,0 +1,13 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # BeforeSetupArtifact
5
+ class BeforeSetupArtifact < ArtifactDefault
6
+ def initialize(application, next_stage)
7
+ @prev_stage = BeforeSetup.new(application, self)
8
+ super
9
+ end
10
+ end # BeforeSetupArtifact
11
+ end # Stage
12
+ end # Build
13
+ end # Dapp
@@ -0,0 +1,32 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # BuildArtifact
5
+ class BuildArtifact < Base
6
+ def initialize(application)
7
+ @prev_stage = GAArtifactPatch.new(application, self)
8
+ @application = application
9
+ end
10
+
11
+ def empty?
12
+ !application.builder.build_artifact?
13
+ end
14
+
15
+ def context
16
+ [artifact_dependencies_files_checksum, application.builder.build_artifact_checksum]
17
+ end
18
+
19
+ def prepare_image
20
+ super
21
+ application.builder.build_artifact(image)
22
+ end
23
+
24
+ private
25
+
26
+ def artifact_dependencies_files_checksum
27
+ @artifact_files_checksum ||= dependencies_files_checksum(application.config._artifact_dependencies)
28
+ end
29
+ end # BuildArtifact
30
+ end # Stage
31
+ end # Build
32
+ end # Dapp
@@ -12,29 +12,11 @@ module Dapp
12
12
  [change_options]
13
13
  end
14
14
 
15
- def image
16
- super do |image|
17
- change_options.each do |k, v|
18
- image.public_send("add_change_#{k}", v)
19
- end
20
- end
21
- end
22
-
23
- def log_image_details
15
+ def prepare_image
24
16
  super
25
- log_image_instructions
26
- end
27
-
28
- def log_image_instructions
29
- return if (instructions = image.prepare_instructions(image.send(:change_options))).empty?
30
- application.project.log_info application.project.t(code: 'image.instructions')
31
- application.project.with_log_indent { application.project.log_info instructions.join("\n") }
32
- end
33
-
34
- private
35
-
36
- def change_options
37
- @change_options ||= application.config._docker._change_options.delete_if { |_, val| val.nil? || (val.respond_to?(:empty?) && val.empty?) }
17
+ change_options.each do |k, v|
18
+ image.public_send("add_change_#{k}", v)
19
+ end
38
20
  end
39
21
  end # DockerInstructions
40
22
  end # Stage
@@ -11,19 +11,18 @@ module Dapp
11
11
  [from_image_name, application.config._docker._from_cache_version, Dapp::BUILD_CACHE_VERSION]
12
12
  end
13
13
 
14
- def save_in_cache!
15
- from_image.untag! if from_image.pulled?
16
- super
17
- end
18
-
19
14
  protected
20
15
 
21
- def image_build
22
- from_image.pull!(log_time: application.project.log_time?)
23
- raise Error::Build, code: :from_image_not_found, data: { name: from_image_name } if from_image.built_id.nil?
16
+ def prepare_image
17
+ from_image.pull!
18
+ raise Error::Build, code: :from_image_not_found, data: { name: from_image_name } unless from_image.tagged?
24
19
  super
25
20
  end
26
21
 
22
+ def should_not_be_detailed?
23
+ from_image.tagged?
24
+ end
25
+
27
26
  private
28
27
 
29
28
  def from_image_name
@@ -19,7 +19,7 @@ module Dapp
19
19
  protected
20
20
 
21
21
  def apply_command_method
22
- :archive_apply_command
22
+ :apply_archive_command
23
23
  end
24
24
  end # GAArchive
25
25
  end # Stage
@@ -4,7 +4,7 @@ module Dapp
4
4
  # GAArchiveDependencies
5
5
  class GAArchiveDependencies < GADependenciesBase
6
6
  def initialize(application, next_stage)
7
- @prev_stage = BeforeInstall.new(application, self)
7
+ @prev_stage = BeforeInstallArtifact.new(application, self)
8
8
  super
9
9
  end
10
10
 
@@ -0,0 +1,21 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # GAArtifactPatch
5
+ class GAArtifactPatch < GALatestPatch
6
+ def initialize(application, next_stage)
7
+ @prev_stage = SetupGroup::ChefCookbooks.new(application, self)
8
+ super
9
+ end
10
+
11
+ def dependencies
12
+ next_stage.context # BuildArtifact
13
+ end
14
+
15
+ def prev_g_a_stage
16
+ super.prev_stage.prev_stage # GAPreSetupPatch
17
+ end
18
+ end # GAArtifactPatch
19
+ end # Stage
20
+ end # Build
21
+ end # Dapp
@@ -5,8 +5,6 @@ module Dapp
5
5
  class GABase < Base
6
6
  attr_accessor :prev_g_a_stage, :next_g_a_stage
7
7
 
8
- GITARTIFACT_IMAGE = 'dappdeps/gitartifact:0.1.5'.freeze
9
-
10
8
  def prev_g_a_stage
11
9
  dependencies_stage.prev_stage.prev_stage
12
10
  end
@@ -19,16 +17,13 @@ module Dapp
19
17
  prev_stage
20
18
  end
21
19
 
22
- def image
23
- super do |image|
24
- image.add_volumes_from g_a_container
25
- image.add_command 'export PATH=/.dapp/deps/gitartifact/bin:$PATH'
20
+ def prepare_image
21
+ super
22
+ image.add_volumes_from application.project.gitartifact_container
26
23
 
27
- application.git_artifacts.each do |git_artifact|
28
- image.add_volume "#{git_artifact.repo.path}:#{git_artifact.repo.container_path}:ro"
29
- image.add_command git_artifact.send(apply_command_method, self)
30
- end
31
- yield image if block_given?
24
+ application.git_artifacts.each do |git_artifact|
25
+ image.add_volume "#{git_artifact.repo.path}:#{git_artifact.repo.container_path}:ro"
26
+ image.add_command git_artifact.send(apply_command_method, self)
32
27
  end
33
28
  end
34
29
 
@@ -48,24 +43,6 @@ module Dapp
48
43
 
49
44
  protected
50
45
 
51
- def g_a_container_name # FIXME: hashsum(image) or dockersafe()
52
- GITARTIFACT_IMAGE.tr('/', '_').tr(':', '_')
53
- end
54
-
55
- def g_a_container
56
- @gitartifact_container ||= begin
57
- if application.project.shellout("docker inspect #{g_a_container_name}").exitstatus.nonzero?
58
- application.project.log_secondary_process(application.project.t(code: 'process.git_artifact_loading'), short: true) do
59
- application.project.shellout ['docker create',
60
- "--name #{g_a_container_name}",
61
- "--volume /.dapp/deps/gitartifact #{GITARTIFACT_IMAGE}"].join(' ')
62
- end
63
- end
64
-
65
- g_a_container_name
66
- end
67
- end
68
-
69
46
  def should_not_be_detailed?
70
47
  true
71
48
  end
@@ -3,25 +3,16 @@ module Dapp
3
3
  module Stage
4
4
  # GADependenciesBase
5
5
  class GADependenciesBase < Base
6
- def image
7
- super do |image|
8
- application.git_artifacts.each do |git_artifact|
9
- image.add_service_change_label(git_artifact.full_name.to_sym => git_artifact.latest_commit)
10
- end
6
+ def prepare_image
7
+ super
8
+ application.git_artifacts.each do |git_artifact|
9
+ image.add_service_change_label(git_artifact.full_name.to_sym => git_artifact.latest_commit)
11
10
  end
12
11
  end
13
12
 
14
13
  def empty?
15
14
  application.git_artifacts.empty? ? true : false
16
15
  end
17
-
18
- protected
19
-
20
- def dependencies_files_checksum(regs)
21
- unless (files = regs.map { |reg| Dir[File.join(application.home_path, reg)].map { |f| File.read(f) if File.file?(f) } }).empty?
22
- hashsum files
23
- end
24
- end
25
16
  end # GADependenciesBase
26
17
  end # Stage
27
18
  end # Build
@@ -4,12 +4,12 @@ module Dapp
4
4
  # GALatestPatch
5
5
  class GALatestPatch < GABase
6
6
  def initialize(application, next_stage)
7
- @prev_stage = SetupGroup::GAPostSetupPatch.new(application, self)
7
+ @prev_stage = AfterSetupArtifact.new(application, self)
8
8
  super
9
9
  end
10
10
 
11
11
  def prev_g_a_stage
12
- prev_stage
12
+ prev_stage.prev_stage # GAPostSetupPatch
13
13
  end
14
14
 
15
15
  def next_g_a_stage
@@ -0,0 +1,69 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # ImportArtifact
5
+ class ImportArtifact < ArtifactBase
6
+ def initialize(application)
7
+ @application = application
8
+ end
9
+
10
+ def signature
11
+ hashsum [*dependencies.flatten, change_options]
12
+ end
13
+
14
+ def image
15
+ @image ||= Image::Scratch.new(name: image_name, project: application.project)
16
+ end
17
+
18
+ def image_add_tmp_volumes(_type)
19
+ end
20
+
21
+ def prepare_image
22
+ super
23
+ change_options.each do |k, v|
24
+ image.public_send("add_change_#{k}", v)
25
+ end
26
+ end
27
+
28
+ protected
29
+
30
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
31
+ def apply_artifact(artifact, image)
32
+ return if application.project.dry_run?
33
+
34
+ artifact_name = artifact[:name]
35
+ app = artifact[:app]
36
+ cwd = artifact[:options][:cwd]
37
+ paths = artifact[:options][:paths]
38
+ owner = artifact[:options][:owner]
39
+ group = artifact[:options][:group]
40
+ where_to_add = artifact[:options][:where_to_add]
41
+
42
+ sudo = application.project.sudo_command(owner: Process.uid, group: Process.gid)
43
+
44
+ credentials = ''
45
+ credentials += "--owner=#{owner} " if owner
46
+ credentials += "--group=#{group} " if group
47
+ credentials += '--numeric-owner'
48
+
49
+ archive_path = application.tmp_path('artifact', artifact_name, 'archive.tar.gz')
50
+ container_archive_path = File.join(app.container_tmp_path(artifact_name), 'archive.tar.gz')
51
+
52
+ exclude_paths = artifact[:options][:exclude_paths].map { |path| "--exclude=#{path}" }.join(' ')
53
+ paths = if paths.empty?
54
+ [File.join(where_to_add, cwd, '*')]
55
+ else
56
+ paths.map { |path| File.join(where_to_add, cwd, path, '*') }
57
+ end
58
+ paths.map! { |path| path[1..-1] } # relative path
59
+
60
+ command = "#{sudo} #{application.project.tar_path} -czf #{container_archive_path} #{exclude_paths} #{paths.join(' ')} #{credentials}"
61
+ run_artifact_app(app, artifact_name, command)
62
+
63
+ image.add_archive archive_path
64
+ end
65
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
66
+ end # ImportArtifact
67
+ end # Stage
68
+ end # Build
69
+ end # Dapp
@@ -12,7 +12,7 @@ module Dapp
12
12
  end
13
13
 
14
14
  def next_g_a_stage
15
- super.next_stage # GAPreSetupPatch
15
+ super.next_stage.next_stage # GAPreSetupPatch
16
16
  end
17
17
  end # GAPostInstallPatch
18
18
  end
@@ -12,7 +12,7 @@ module Dapp
12
12
  end
13
13
 
14
14
  def dependencies
15
- [application.builder.before_setup_checksum]
15
+ next_stage.next_stage.next_stage.context # BeforeSetup
16
16
  end
17
17
  end # GAPostInstallPatchDependencies
18
18
  end
@@ -12,18 +12,12 @@ module Dapp
12
12
  end
13
13
 
14
14
  def dependencies
15
- [install_dependencies_files_checksum, application.builder.install_checksum]
15
+ next_stage.next_stage.context # Install
16
16
  end
17
17
 
18
18
  def empty?
19
19
  super || dependencies_empty?
20
20
  end
21
-
22
- private
23
-
24
- def install_dependencies_files_checksum
25
- @install_dependencies_files_checksum ||= dependencies_files_checksum(application.config._install_dependencies)
26
- end
27
21
  end # GAPreInstallPatchDependencies
28
22
  end
29
23
  end # Stage
@@ -12,17 +12,22 @@ module Dapp
12
12
  end
13
13
 
14
14
  def empty?
15
- super && !application.builder.install?
15
+ !application.builder.install?
16
16
  end
17
17
 
18
- def dependencies
19
- prev_stage.prev_stage.dependencies # GAPreInstallPatchDependencies
18
+ def context
19
+ [install_dependencies_files_checksum, application.builder.install_checksum]
20
20
  end
21
21
 
22
- def image
23
- super do |image|
24
- application.builder.install(image)
25
- end
22
+ def prepare_image
23
+ super
24
+ application.builder.install(image)
25
+ end
26
+
27
+ private
28
+
29
+ def install_dependencies_files_checksum
30
+ @install_dependencies_files_checksum ||= dependencies_files_checksum(application.config._install_dependencies)
26
31
  end
27
32
  end # Install
28
33
  end
@@ -29,6 +29,13 @@ module Dapp
29
29
  log_image_size
30
30
  end
31
31
  log_image_commands unless ignore_log_commands?
32
+ log_image_instructions
33
+ end
34
+
35
+ def log_image_instructions
36
+ return if (instructions = image.prepare_instructions(image.send(:change_options))).empty?
37
+ application.project.log_info application.project.t(code: 'image.instructions')
38
+ application.project.with_log_indent { application.project.log_info instructions.join("\n") }
32
39
  end
33
40
 
34
41
  def log_image_created_at
@@ -37,7 +44,7 @@ module Dapp
37
44
  end
38
45
 
39
46
  def log_image_size
40
- if from_image.tagged? && !prev_stage.nil?
47
+ if !prev_stage.nil? && from_image.tagged?
41
48
  size = image.size.to_f - from_image.size.to_f
42
49
  code = 'image.info.difference'
43
50
  else
@@ -79,20 +86,16 @@ module Dapp
79
86
  false
80
87
  end
81
88
 
82
- def should_be_skipped?
83
- image.tagged? && !application.project.log_verbose? && application.project.cli_options[:introspect_stage].nil?
84
- end
85
-
86
89
  def should_not_be_detailed?
87
90
  image.send(:bash_commands).empty?
88
91
  end
89
92
 
90
93
  def should_be_introspected?
91
- application.project.cli_options[:introspect_stage] == name && !application.project.dry_run? && !application.is_artifact
94
+ application.project.cli_options[:introspect_stage] == name && !application.project.dry_run? && !application.artifact?
92
95
  end
93
96
 
94
97
  def should_be_quiet?
95
- application.is_artifact && !application.project.log_verbose?
98
+ application.artifact? && !application.project.log_verbose?
96
99
  end
97
100
  end
98
101
  end # Mod
@@ -15,10 +15,9 @@ module Dapp
15
15
  [application.builder.chef_cookbooks_checksum]
16
16
  end
17
17
 
18
- def image
19
- super do |image|
20
- application.builder.chef_cookbooks(image)
21
- end
18
+ def prepare_image
19
+ super
20
+ application.builder.chef_cookbooks(image)
22
21
  end
23
22
 
24
23
  protected