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
@@ -8,11 +8,12 @@ module Dapp
8
8
  end
9
9
 
10
10
  def tmp_path(*path)
11
+ @tmp_path ||= Dir.mktmpdir(project.cli_options[:tmp_dir_prefix] || 'dapp-')
11
12
  make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
12
13
  end
13
14
 
14
- def build_path
15
- project.build_path.join(config._basename)
15
+ def build_path(*path)
16
+ make_path(project.build_path.join(config._basename), *path).expand_path.tap { |p| p.parent.mkpath }
16
17
  end
17
18
 
18
19
  def container_dapp_path(*path)
@@ -0,0 +1,59 @@
1
+ module Dapp
2
+ # Application
3
+ class Application
4
+ # Stages
5
+ module Stages
6
+ def signature
7
+ last_stage.send(:signature)
8
+ end
9
+
10
+ def stage_cache_format
11
+ "#{project.cache_format % { application_name: config._basename }}:%{signature}"
12
+ end
13
+
14
+ def stage_dapp_label
15
+ project.stage_dapp_label_format % { application_name: config._basename }
16
+ end
17
+
18
+ def images
19
+ (@images ||= []).tap do |images|
20
+ stages.map do |stage|
21
+ if stage.respond_to?(:images)
22
+ images.concat(stage.images)
23
+ else
24
+ images << stage.image
25
+ end
26
+ end.uniq(&:name)
27
+ end
28
+ end
29
+
30
+ protected
31
+
32
+ def last_stage
33
+ @last_stage ||= if scratch?
34
+ Build::Stage::ImportArtifact.new(self)
35
+ else
36
+ Build::Stage::DockerInstructions.new(self)
37
+ end
38
+ end
39
+
40
+ def export_images
41
+ images.select(&:tagged?)
42
+ end
43
+
44
+ def import_images
45
+ images.select { |image| !image.tagged? }
46
+ end
47
+
48
+ def stages
49
+ (@stages ||= []).tap do |stages|
50
+ stage = last_stage
51
+ loop do
52
+ stages << stage
53
+ break if (stage = stage.prev_stage).nil?
54
+ end
55
+ end
56
+ end
57
+ end # Stages
58
+ end # Application
59
+ end # Dapp
@@ -0,0 +1,22 @@
1
+ module Dapp
2
+ # Artifact
3
+ class Artifact < Application
4
+ def artifact?
5
+ true
6
+ end
7
+
8
+ def should_be_built?
9
+ false
10
+ end
11
+
12
+ def with_introspection
13
+ yield
14
+ end
15
+
16
+ protected
17
+
18
+ def last_stage
19
+ @last_stage ||= Build::Stage::BuildArtifact.new(self)
20
+ end
21
+ end # Artifact
22
+ end # Dapp
@@ -0,0 +1,13 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # AfterInstallArtifact
5
+ class AfterInstallArtifact < ArtifactDefault
6
+ def initialize(application, next_stage)
7
+ @prev_stage = InstallGroup::GAPostInstallPatch.new(application, self)
8
+ super
9
+ end
10
+ end # AfterInstallArtifact
11
+ end # Stage
12
+ end # Build
13
+ end # Dapp
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # AfterSetupArtifact
5
+ class AfterSetupArtifact < ArtifactDefault
6
+ def initialize(application, next_stage)
7
+ @prev_stage = if application.artifact?
8
+ SetupGroup::ChefCookbooks.new(application, self)
9
+ else
10
+ SetupGroup::GAPostSetupPatch.new(application, self)
11
+ end
12
+ super
13
+ end
14
+ end # AfterSetupArtifact
15
+ end # Stage
16
+ end # Build
17
+ end # Dapp
@@ -0,0 +1,80 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # ArtifactBase
5
+ class ArtifactBase < Base
6
+ def dependencies
7
+ artifacts_signatures
8
+ end
9
+
10
+ def prepare_image
11
+ super
12
+ artifacts_applications_build!
13
+ artifacts_labels = {}
14
+ artifacts.each do |artifact|
15
+ apply_artifact(artifact, image)
16
+ artifacts_labels["dapp-artifact-#{artifact[:name]}".to_sym] = artifact[:app].send(:last_stage).image.built_id
17
+ end
18
+ image.add_service_change_label artifacts_labels
19
+ end
20
+
21
+ def images
22
+ [image].concat(artifacts.map { |artifact| artifact[:app].images }.flatten)
23
+ end
24
+
25
+ protected
26
+
27
+ def should_not_be_detailed?
28
+ true
29
+ end
30
+
31
+ def ignore_log_commands?
32
+ true
33
+ end
34
+
35
+ def artifacts
36
+ @artifacts ||= begin
37
+ application.config.public_send("_#{name}").map do |artifact|
38
+ app = Dapp::Artifact.new(config: artifact._config,
39
+ project: application.project,
40
+ ignore_git_fetch: application.ignore_git_fetch)
41
+ { name: artifact._config._name, options: artifact._artifact_options, app: app }
42
+ end
43
+ end
44
+ end
45
+
46
+ def artifacts_signatures
47
+ artifacts.map { |artifact| hashsum [artifact[:app].signature, artifact[:options]] }
48
+ end
49
+
50
+ def artifacts_applications_build!
51
+ artifacts.each do |artifact|
52
+ process = application.project.t(code: 'process.artifact_building', data: { name: artifact[:name] })
53
+ application.project.log_secondary_process(process,
54
+ short: !application.project.log_verbose?,
55
+ quiet: application.artifact? && !application.project.log_verbose?) do
56
+ application.project.with_log_indent do
57
+ artifact[:app].build!
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ # rubocop:disable Metrics/AbcSize
64
+ def run_artifact_app(app, artifact_name, commands)
65
+ docker_options = ['--rm',
66
+ "--volume #{application.tmp_path('artifact', artifact_name)}:#{app.container_tmp_path(artifact_name)}",
67
+ "--volumes-from #{application.project.base_container}",
68
+ "--entrypoint #{application.project.bash_path}"]
69
+ application.project.log_secondary_process(application.project.t(code: 'process.artifact_copy',
70
+ data: { name: artifact_name }),
71
+ short: true,
72
+ quiet: application.artifact? && !application.project.log_verbose?) do
73
+ app.run(docker_options, [%(-ec '#{application.project.shellout_pack(commands)}')])
74
+ end
75
+ end
76
+ # rubocop:enable Metrics/AbcSize
77
+ end # ArtifactBase
78
+ end # Stage
79
+ end # Build
80
+ end # Dapp
@@ -0,0 +1,62 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # ArtifactDefault
5
+ class ArtifactDefault < ArtifactBase
6
+ protected
7
+
8
+ # rubocop:disable Metrics/AbcSize
9
+ def apply_artifact(artifact, image)
10
+ return if application.project.dry_run?
11
+
12
+ artifact_name = artifact[:name]
13
+ app = artifact[:app]
14
+ cwd = artifact[:options][:cwd]
15
+ paths = artifact[:options][:paths]
16
+ exclude_paths = artifact[:options][:exclude_paths]
17
+ owner = artifact[:options][:owner]
18
+ group = artifact[:options][:group]
19
+ where_to_add = artifact[:options][:where_to_add]
20
+
21
+ command = safe_cp(where_to_add, app.container_tmp_path(artifact_name), Process.uid, Process.gid, cwd, paths, exclude_paths)
22
+ run_artifact_app(app, artifact_name, command)
23
+
24
+ command = safe_cp(application.container_tmp_path('artifact', artifact_name), where_to_add, owner, group, '', paths, exclude_paths)
25
+ image.add_command command
26
+ image.add_volume "#{application.tmp_path('artifact', artifact_name)}:#{application.container_tmp_path('artifact', artifact_name)}:ro"
27
+ end
28
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
29
+
30
+ private
31
+
32
+ # rubocop:disable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
33
+ def safe_cp(from, to, owner, group, cwd = '', paths = [], exclude_paths = [])
34
+ credentials = ''
35
+ credentials += "-o #{owner} " if owner
36
+ credentials += "-g #{group} " if group
37
+ excludes = find_command_excludes(from, cwd, exclude_paths).join(' ')
38
+
39
+ copy_files = proc do |from_, cwd_, path_ = ''|
40
+ cwd_ = File.expand_path(File.join('/', cwd_))
41
+ "#{application.project.find_path} #{File.join(from_, cwd_, path_)} #{excludes} -type f -exec " \
42
+ "#{application.project.bash_path} -ec '#{application.project.install_path} -D #{credentials} {} " \
43
+ "#{File.join(to, "$(#{application.project.echo_path} {} | " \
44
+ "#{application.project.sed_path} -e \"s/#{File.join(from_, cwd_).gsub('/', '\\/')}//g\")")}' \\;"
45
+ end
46
+
47
+ commands = []
48
+ commands << [application.project.install_path, credentials, '-d', to].join(' ')
49
+ commands.concat(paths.empty? ? Array(copy_files.call(from, cwd)) : paths.map { |path| copy_files.call(from, cwd, path) })
50
+ commands << "#{application.project.find_path} #{to} -type d -exec " \
51
+ "#{application.project.bash_path} -ec '#{application.project.install_path} -d #{credentials} {}' \\;"
52
+ commands.join(' && ')
53
+ end
54
+ # rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
55
+
56
+ def find_command_excludes(from, cwd, exclude_paths)
57
+ exclude_paths.map { |path| "-not \\( -path #{File.join(from, cwd, path)} -prune \\)" }
58
+ end
59
+ end # ArtifactDefault
60
+ end # Stage
61
+ end # Build
62
+ end # Dapp
@@ -17,10 +17,11 @@ module Dapp
17
17
  @next_stage.prev_stage = self
18
18
  end
19
19
 
20
+ # rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
20
21
  def build_lock!
21
22
  return yield if application.project.dry_run?
22
23
 
23
- try_lock = lambda do
24
+ try_lock = proc do
24
25
  next yield unless should_be_tagged?
25
26
 
26
27
  no_lock = false
@@ -44,19 +45,22 @@ module Dapp
44
45
  try_lock.call
45
46
  end
46
47
  end
48
+ # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
47
49
 
48
50
  def build!
49
51
  return if should_be_skipped?
50
52
  prev_stage.build! if prev_stage
51
- log_image_build(&method(:image_build)) if image_should_be_build?
53
+ if image_should_be_build?
54
+ prepare_image unless image.tagged?
55
+ log_image_build(&method(:image_build))
56
+ end
52
57
  raise Exception::IntrospectImage, data: { built_id: image.built_id, options: image.send(:prepared_options) } if should_be_introspected?
53
58
  end
54
59
 
55
60
  def save_in_cache!
56
61
  prev_stage.save_in_cache! if prev_stage
57
62
  return unless should_be_tagged?
58
- image.tag!(log_verbose: application.project.log_verbose?,
59
- log_time: application.project.log_time?) unless application.project.dry_run?
63
+ image.tag! unless application.project.dry_run?
60
64
  end
61
65
 
62
66
  def image
@@ -64,14 +68,29 @@ module Dapp
64
68
  if empty?
65
69
  prev_stage.image
66
70
  else
67
- Image::Stage.new(name: image_name, from: from_image, project: application.project).tap do |image|
68
- image.add_service_change_label dapp: application.stage_dapp_label
69
- yield image if block_given?
70
- end
71
+ Image::Stage.new(name: image_name, from: from_image, project: application.project)
71
72
  end
72
73
  end
73
74
  end
74
75
 
76
+ def prepare_image
77
+ return if application.project.dry_run?
78
+ image.add_volumes_from application.project.base_container
79
+ image_add_tmp_volumes(:tmp)
80
+ image_add_tmp_volumes(:build)
81
+ image.add_service_change_label dapp: application.stage_dapp_label
82
+ image.add_service_change_label 'dapp-cache-version'.to_sym => Dapp::BUILD_CACHE_VERSION
83
+ end
84
+
85
+ def image_add_tmp_volumes(type)
86
+ (application.config.public_send("_#{type}_dir")._store +
87
+ from_image.labels.select { |l, _| l == "dapp-#{type}-dir" }.map { |_, value| value.split(';') }.flatten).each do |path|
88
+ absolute_path = File.expand_path(File.join('/', path))
89
+ tmp_path = application.send("#{type}_path", absolute_path[1..-1]).tap(&:mkpath)
90
+ image.add_volume "#{tmp_path}:#{absolute_path}"
91
+ end
92
+ end
93
+
75
94
  def image_should_be_build?
76
95
  !empty? || application.project.log_verbose?
77
96
  end
@@ -99,10 +118,11 @@ module Dapp
99
118
  protected
100
119
 
101
120
  def image_build
102
- image.build!(log_verbose: application.project.log_verbose?,
103
- log_time: application.project.log_time?,
104
- introspect_error: application.project.cli_options[:introspect_error],
105
- introspect_before_error: application.project.cli_options[:introspect_before_error])
121
+ image.build!
122
+ end
123
+
124
+ def should_be_skipped?
125
+ image.tagged? && !application.project.log_verbose? && !should_be_introspected?
106
126
  end
107
127
 
108
128
  def should_be_tagged?
@@ -127,6 +147,21 @@ module Dapp
127
147
  def name
128
148
  class_to_lowercase.to_sym
129
149
  end
150
+
151
+ def dependencies_files_checksum(regs)
152
+ regs.map! { |reg| File.directory?(File.join(application.project.path, reg)) ? File.join(reg, '**', '*') : reg }
153
+ unless (files = regs.map { |reg| Dir[File.join(application.project.path, reg)].map { |f| File.read(f) if File.file?(f) } }).empty?
154
+ hashsum files
155
+ end
156
+ end
157
+
158
+ def change_options
159
+ @change_options ||= begin
160
+ application.config._docker._change_options.to_h.delete_if do |_, val|
161
+ val.nil? || (val.respond_to?(:empty?) && val.empty?)
162
+ end
163
+ end
164
+ end
130
165
  end # Base
131
166
  end # Stage
132
167
  end # Build
@@ -12,15 +12,16 @@ module Dapp
12
12
  super && !application.builder.before_install?
13
13
  end
14
14
 
15
- def dependencies
15
+ def context
16
16
  [application.builder.before_install_checksum]
17
17
  end
18
18
 
19
- def image
20
- super do |image|
21
- application.builder.before_install(image)
22
- end
19
+ def prepare_image
20
+ super
21
+ application.builder.before_install(image)
23
22
  end
23
+
24
+ alias dependencies context
24
25
  end # BeforeInstall
25
26
  end # Stage
26
27
  end # Build
@@ -0,0 +1,13 @@
1
+ module Dapp
2
+ module Build
3
+ module Stage
4
+ # BeforeInstallArtifact
5
+ class BeforeInstallArtifact < ArtifactDefault
6
+ def initialize(application, next_stage)
7
+ @prev_stage = BeforeInstall.new(application, self)
8
+ super
9
+ end
10
+ end # BeforeInstallArtifact
11
+ end # Stage
12
+ end # Build
13
+ end # Dapp
@@ -4,22 +4,21 @@ module Dapp
4
4
  # BeforeSetup
5
5
  class BeforeSetup < Base
6
6
  def initialize(application, next_stage)
7
- @prev_stage = Artifact.new(application, self)
7
+ @prev_stage = AfterInstallArtifact.new(application, self)
8
8
  super
9
9
  end
10
10
 
11
11
  def empty?
12
- super && !application.builder.before_setup?
12
+ !application.builder.before_setup?
13
13
  end
14
14
 
15
- def dependencies
16
- prev_stage.prev_stage.prev_stage.dependencies # GAPostInstallPatchDependencies
15
+ def context
16
+ [application.builder.before_setup_checksum]
17
17
  end
18
18
 
19
- def image
20
- super do |image|
21
- application.builder.before_setup(image)
22
- end
19
+ def prepare_image
20
+ super
21
+ application.builder.before_setup(image)
23
22
  end
24
23
  end # BeforeSetup
25
24
  end # Stage