capistrano_multiconfig_parallel 0.5.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 576d2d4c017df766b649b56f90a3410f58beaf9a
4
- data.tar.gz: e4952851b1bab357329ece299ee8de1346256956
3
+ metadata.gz: 0362dba10934410958b8d42d03252ee5b8126c22
4
+ data.tar.gz: e407a9d74a97ea09c2a80e5222334204dc106b86
5
5
  SHA512:
6
- metadata.gz: fe9d160ac7cf3658b94f70627b6a0a498097074185ebe1465de2baa638c278a80ba5d5cae140876d6ae02dc3b4e5e588b0070467ee680ef8e74d5cd7a561bc11
7
- data.tar.gz: baa62229473d2fda8046a4aed016834327b9c659d088f98c876a5bdd91c7553b737a50b488b09893f844fe5d5823dbcd61620392035afd215a24035093ee54b5
6
+ metadata.gz: 87a31611fb4dc5f10e115e7acb8bd1d580c9afbedb62c0c908d3a2b6be55cedbf3e936a6cffa44ecf5f4925c3a7f903b8536ff0ec3d6765c1cfd131a870d988b
7
+ data.tar.gz: fea6af3d812cf4ebdbfefee6084d50a640d3dc9d45a713a689e46d8f25bef422c50961c68b12ed4680a6c46ec5445cee67efac1cab15ecdcdb72bc961bb5e94c
data/README.md CHANGED
@@ -75,7 +75,7 @@ Add the following to your Gemfile:
75
75
  ```
76
76
 
77
77
 
78
- Add the following to your Capfile:
78
+ Add the following to your Capfile after requiring **capistrano** and **capistrano-multiconfig**
79
79
 
80
80
  ```ruby
81
81
  require 'capistrano_multiconfig_parallel'
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_runtime_dependency 'activesupport', '~> 4.0','>= 4.0'
31
31
  s.add_runtime_dependency 'configliere', '~> 0.4', '>=0.4'
32
32
  s.add_runtime_dependency 'inquirer', '~> 0.2', '>= 0.2'
33
+ s.add_runtime_dependency 'devnull','~> 0.1', '>= 0.1'
33
34
 
34
35
  s.add_development_dependency 'rspec-rails', '~> 2.0', '>= 2.0'
35
36
  s.add_development_dependency 'guard', '~> 2.6', '>= 2.6.1'
@@ -1 +1 @@
1
- require 'capistrano_multiconfig_parallel/base'
1
+ require 'capistrano_multiconfig_parallel/all'
@@ -20,6 +20,8 @@ require 'capistrano/all'
20
20
  require 'fileutils'
21
21
  require 'logger'
22
22
  require 'pp'
23
+ require 'devnull'
24
+ require 'inquirer'
23
25
  # fix error with not files that can not be found
24
26
  Gem.find_files('composable_state_machine/**/*.rb').each { |path| require path }
25
27
 
@@ -27,5 +29,7 @@ Gem.find_files('capistrano_multiconfig_parallel/initializers/**/*.rb').each { |p
27
29
  Gem.find_files('capistrano_multiconfig_parallel/helpers/**/*.rb').each { |path| require path }
28
30
  Gem.find_files('capistrano_multiconfig_parallel/celluloid/**/*.rb').each { |path| require path }
29
31
 
32
+ require_relative './version'
33
+ require_relative './configuration'
30
34
  require_relative './base'
31
- require_relative 'application'
35
+ require_relative './application'
@@ -1,3 +1,4 @@
1
+ Gem.find_files('capistrano_multiconfig_parallel/extensions/**/*.rb').each { |path| require path }
1
2
  module CapistranoMulticonfigParallel
2
3
  # class used as a wrapper around capistrano
3
4
  class Application < Capistrano::Application
@@ -1,9 +1,3 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- require 'bundler/setup'
4
- require 'inquirer'
5
- require_relative './version'
6
- require_relative './configuration'
7
1
  # base module that has the statis methods that this gem is using
8
2
  module CapistranoMulticonfigParallel
9
3
  include CapistranoMulticonfigParallel::Configuration
@@ -11,7 +5,8 @@ module CapistranoMulticonfigParallel
11
5
  ENV_KEY_JOB_ID = 'multi_cap_job_id'
12
6
  MULTI_KEY = 'multi'
13
7
  SINGLE_KEY = 'single'
14
-
8
+ GITFLOW_TAG_STAGING_TASK = "gitflow:tag_staging"
9
+
15
10
  CUSTOM_COMMANDS = {
16
11
  CapistranoMulticonfigParallel::MULTI_KEY => {
17
12
  stages: 'deploy_multi_stages'
@@ -29,7 +24,11 @@ module CapistranoMulticonfigParallel
29
24
  end
30
25
 
31
26
  def ask_confirm(message, default)
27
+ begin
32
28
  Ask.input message, default: default
29
+ rescue
30
+ return nil
31
+ end
33
32
  end
34
33
 
35
34
  def log_directory
@@ -46,14 +45,19 @@ module CapistranoMulticonfigParallel
46
45
 
47
46
  def enable_logging
48
47
  CapistranoMulticonfigParallel.configuration_valid?
49
- return unless CapistranoMulticonfigParallel::CelluloidManager.debug_enabled
50
48
  FileUtils.mkdir_p(log_directory) unless File.directory?(log_directory)
51
- FileUtils.touch(main_log_file) unless File.file?(main_log_file)
52
- if ENV[CapistranoMulticonfigParallel::ENV_KEY_JOB_ID].blank?
53
- log_file = File.open(main_log_file, 'w')
54
- log_file.sync = true
49
+ if CapistranoMulticonfigParallel::CelluloidManager.debug_enabled.to_s.downcase == 'true'
50
+ FileUtils.touch(main_log_file) unless File.file?(main_log_file)
51
+ if ENV[CapistranoMulticonfigParallel::ENV_KEY_JOB_ID].blank?
52
+ log_file = File.open(main_log_file, 'w')
53
+ log_file.sync = true
54
+ end
55
+ self.logger = ::Logger.new(main_log_file)
56
+ else
57
+ self.logger = ::Logger.new(DevNull.new)
55
58
  end
56
- self.logger = ::Logger.new(main_log_file)
59
+ Celluloid.logger = CapistranoMulticonfigParallel.logger
60
+ Celluloid.task_class = Celluloid::TaskThread
57
61
  end
58
62
 
59
63
  def log_message(message)
@@ -63,7 +63,7 @@ module CapistranoMulticonfigParallel
63
63
  # a job
64
64
  def delegate(job)
65
65
  job = job.stringify_keys
66
- job['id'] = generate_job_id(job) if job['worker_action'] != 'worker_died'
66
+ job['id'] = generate_job_id(job) unless job_failed?(job)
67
67
  @jobs[job['id']] = job
68
68
  job['env_options'][CapistranoMulticonfigParallel::ENV_KEY_JOB_ID] = job['id']
69
69
  # debug(@jobs)
@@ -198,6 +198,18 @@ module CapistranoMulticonfigParallel
198
198
  end
199
199
  end
200
200
 
201
+ def can_tag_staging?
202
+ @job_manager.is_able_to_tag_staging? &&
203
+ @jobs.detect{|job_id, job| job['env'] == 'production'}.blank?
204
+ end
205
+
206
+ def dispatch_new_job(job)
207
+ original_env = job['env_options']
208
+ env_opts = @job_manager.get_app_additional_env_options(job['app_name'], job['stage'])
209
+ job['env_options'] = original_env.merge(env_opts)
210
+ async.delegate(job)
211
+ end
212
+
201
213
  def process_job(job)
202
214
  env_options = {}
203
215
  job['env_options'].each do |key, value|
@@ -228,14 +240,18 @@ module CapistranoMulticonfigParallel
228
240
  end
229
241
  status
230
242
  end
243
+
244
+ def job_failed?(job)
245
+ job['worker_action'].present? && job['worker_action'] == 'worker_died'
246
+ end
231
247
 
232
248
  def worker_died(worker, reason)
233
249
  debug("worker with mailbox #{worker.mailbox.inspect} died for reason: #{reason}") if self.class.debug_enabled?
234
250
  job = @worker_to_job[worker.mailbox.address]
235
251
  @worker_to_job.delete(worker.mailbox.address)
236
252
  debug "restarting #{job} on new worker" if self.class.debug_enabled?
237
- return if job.blank? || job['worker_action'] == 'worker_died'
238
- return unless job['worker_action'] == 'deploy'
253
+ return if job.blank? || job_failed?(job)
254
+ return unless job['action_name'] == 'deploy'
239
255
  job = job.merge(:action => 'deploy:rollback', 'worker_action' => 'worker_died')
240
256
  delegate(job)
241
257
  end
@@ -88,10 +88,37 @@ module CapistranoMulticonfigParallel
88
88
  def rake_tasks
89
89
  @rake_tasks ||= []
90
90
  end
91
-
91
+
92
+ def last_staging_tag
93
+ last_tag_matching('staging-*')
94
+ end
95
+
96
+ def last_tag_matching(pattern)
97
+ # search for most recent (chronologically) tag matching the passed pattern, then get the name of that tag.
98
+ last_tag = `#{cd_working_directory} && git describe --exact-match --tags --match='#{pattern}' $(git log --tags='#{pattern}*' -n1 --pretty='%h')`.chomp
99
+ debug("LAST TAG is #{last_tag}") if debug_enabled?
100
+ last_tag == '' ? nil : last_tag
101
+ end
102
+
103
+ def staging_was_tagged?
104
+ begin
105
+ current_sha = `#{cd_working_directory} && git log --pretty=format:%H HEAD -1`
106
+ debug("curent SHA is #{current_sha}") if debug_enabled?
107
+ last_staging_tag_sha = last_staging_tag ? `#{cd_working_directory} && git log --pretty=format:%H #{last_staging_tag} -1` : nil
108
+ debug("LAST TAGGING SHA is #{last_staging_tag_sha}") if debug_enabled?
109
+ last_staging_tag_sha == current_sha
110
+ rescue
111
+ return false
112
+ end
113
+ end
114
+
115
+ def cd_working_directory
116
+ "cd #{CapistranoMulticonfigParallel.detect_root.to_s}"
117
+ end
118
+
92
119
  def generate_command
93
120
  <<-CMD
94
- bundle exec ruby -e "require 'bundler' ; Bundler.with_clean_env { %x[cd #{CapistranoMulticonfigParallel.detect_root.to_s} && bundle install && RAILS_ENV=#{@env_name} bundle exec multi_cap #{@task_argv.join(' ')} ] } "
121
+ #{cd_working_directory} && RAILS_ENV=#{@env_name} bundle exec multi_cap #{@task_argv.join(' ')}
95
122
  CMD
96
123
  end
97
124
 
@@ -121,6 +148,9 @@ module CapistranoMulticonfigParallel
121
148
 
122
149
  def handle_subscription(message)
123
150
  if message_is_about_a_task?(message)
151
+ if @env_name == 'staging' && @manager.can_tag_staging? && staging_was_tagged? && has_executed_task?(CapistranoMulticonfigParallel::GITFLOW_TAG_STAGING_TASK)
152
+ @manager.dispatch_new_job(@job.merge('env' => 'production'))
153
+ end
124
154
  save_tasks_to_be_executed(message)
125
155
  update_machine_state(message['task']) # if message['action'] == 'invoke'
126
156
  debug("worker #{@job_id} state is #{@machine.state}") if debug_enabled?
@@ -133,6 +163,10 @@ module CapistranoMulticonfigParallel
133
163
  def message_is_about_a_task?(message)
134
164
  message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present?
135
165
  end
166
+
167
+ def has_executed_task?(task)
168
+ @rake_tasks.present? && @rake_tasks[task].present?
169
+ end
136
170
 
137
171
  def task_approval(message)
138
172
  if @manager.apply_confirmations? && CapistranoMulticonfigParallel.configuration.task_confirmations.include?(message['task']) && message['action'] == 'invoke'
@@ -193,14 +227,14 @@ module CapistranoMulticonfigParallel
193
227
  end
194
228
 
195
229
  def crashed?
196
- @action_name == 'deploy:rollback' || @action_name == 'deploy:failed'
230
+ @action_name == 'deploy:rollback' || @action_name == 'deploy:failed' || @manager.job_failed?(@job)
197
231
  end
198
232
 
199
233
  def finish_worker
200
234
  @manager.mark_completed_remaining_tasks(Actor.current)
201
235
  @worker_state = 'finished'
202
236
  @manager.job_to_worker.each do|_job_id, worker|
203
- debug("worker #{worker.job_id}has state #{worker.worker_state}") if worker.alive? && ebug_enabled?
237
+ debug("worker #{worker.job_id}has state #{worker.worker_state}") if worker.alive? && debug_enabled?
204
238
  end
205
239
  end
206
240
 
@@ -26,9 +26,9 @@ module CapistranoMulticonfigParallel
26
26
  end
27
27
 
28
28
  def set_worker_log
29
- FileUtils.mkdir_p(CapistranoMulticonfigParallel.log_directory)
29
+ FileUtils.mkdir_p(CapistranoMulticonfigParallel.log_directory) unless File.directory?(CapistranoMulticonfigParallel.log_directory)
30
30
  @filename = File.join(CapistranoMulticonfigParallel.log_directory, "worker_#{@actor.job_id}.log")
31
- FileUtils.rm_rf(@filename) if @options[:dry_run] || @actor.executed_dry_run != true
31
+ FileUtils.rm_rf(@filename) if File.file?(@filename) && !@actor.crashed? && (@options[:dry_run] || @actor.executed_dry_run != true)
32
32
  @worker_log = ::Logger.new(@filename)
33
33
  @worker_log.level = ::Logger::Severity::DEBUG
34
34
  @worker_log.formatter = proc do |severity, datetime, progname, msg|
@@ -57,7 +57,7 @@ module CapistranoMulticonfigParallel
57
57
  worker = @manager.get_worker_for_job(job_id)
58
58
  if worker.alive?
59
59
  state = worker.machine.state.to_s
60
- state = worker_crashed?(worker) ? state.red : state.green
60
+ state = worker.crashed? ? state.red : state.green
61
61
  else
62
62
  state = "dead".upcase.red
63
63
  end
@@ -98,26 +98,6 @@ module CapistranoMulticonfigParallel
98
98
  system('cls') || system('clear') || puts("\e[H\e[2J")
99
99
  end
100
100
 
101
- def worker_crashed?(worker)
102
- worker.crashed?
103
- end
104
- # rubocop:disable Lint/Eval
105
- def capture(stream)
106
- stream = stream.to_s
107
- captured_stream = Tempfile.new(stream)
108
- stream_io = eval("$#{stream}")
109
- origin_stream = stream_io.dup
110
- stream_io.reopen(captured_stream)
111
-
112
- yield
113
-
114
- stream_io.rewind
115
- return captured_stream.read
116
- ensure
117
- captured_stream.close
118
- captured_stream.unlink
119
- stream_io.reopen(origin_stream)
120
- end
121
101
 
122
102
  def worker_progress(worker)
123
103
  tasks = worker.rake_tasks
@@ -125,14 +105,14 @@ module CapistranoMulticonfigParallel
125
105
  total_tasks = tasks.size
126
106
  task_index = tasks.index(current_task)
127
107
  progress = Formatador::ProgressBar.new(total_tasks, color: 'green', start: task_index.to_i)
128
- result = capture(:stdout) do
108
+ result = CapistranoMulticonfigParallel::Helper.capture(:stdout) do
129
109
  progress.increment
130
110
  end
131
111
  result = result.gsub("\r\n", '')
132
112
  result = result.gsub("\n", '')
133
113
  result = result.gsub('|', '#')
134
114
  result = result.gsub(/\s+/, ' ')
135
- if worker_crashed?(worker)
115
+ if worker.crashed?
136
116
  return result.red
137
117
  else
138
118
  return result.green
@@ -1,5 +1,4 @@
1
1
  require_relative './all'
2
-
3
2
  module CapistranoMulticonfigParallel
4
3
  # this is the class that will be invoked from terminal , and willl use the invoke task as the primary function.
5
4
  class CLI
@@ -1,4 +1,3 @@
1
- require_relative './initializers/conf'
2
1
  module CapistranoMulticonfigParallel
3
2
  # class that holds the options that are configurable for this gem
4
3
  module Configuration
@@ -5,7 +5,7 @@ module CapistranoMulticonfigParallel
5
5
  class BaseManager
6
6
  include Celluloid
7
7
  include Celluloid::Logger
8
-
8
+
9
9
  attr_accessor :condition, :manager, :deps, :application, :stage, :name, :args, :argv, :jobs, :job_registered_condition, :default_stage
10
10
 
11
11
  def initialize(cap_app, top_level_tasks, stages)
@@ -58,10 +58,6 @@ module CapistranoMulticonfigParallel
58
58
  def check_before_starting
59
59
  @condition = Celluloid::Condition.new
60
60
  @manager = CapistranoMulticonfigParallel::CelluloidManager.new(Actor.current)
61
- if CapistranoMulticonfigParallel::CelluloidManager.debug_enabled == true
62
- Celluloid.logger = CapistranoMulticonfigParallel.logger
63
- Celluloid.task_class = Celluloid::TaskThread
64
- end
65
61
  end
66
62
 
67
63
  def collect_jobs(options = {}, &block)
@@ -79,22 +75,50 @@ module CapistranoMulticonfigParallel
79
75
  run_async_jobs
80
76
  end
81
77
  end
78
+
79
+ def tag_staging_exists? # check exists task from capistrano-gitflow
80
+ begin
81
+ Rake::Task[CapistranoMulticonfigParallel::GITFLOW_TAG_STAGING_TASK].present?
82
+ rescue
83
+ return false
84
+ end
85
+ end
82
86
 
83
87
  def fetch_multi_stages
84
88
  stages = @argv['STAGES'].blank? ? '' : @argv['STAGES']
85
89
  stages = parse_inputted_value(value: stages).split(',').compact if stages.present?
86
- stages
90
+ stages.present? ? stages : [@default_stage]
87
91
  end
88
92
 
93
+ def wants_deploy_production?
94
+ (!custom_command? && @stage == 'production') || (custom_command? && fetch_multi_stages.include?("production"))
95
+ end
96
+
97
+ def is_able_to_tag_staging?
98
+ using_git? && wants_deploy_production? && tag_staging_exists?
99
+ end
100
+
101
+ def check_multi_stages(stages)
102
+ is_able_to_tag_staging? ? stages.reject{|u| u == 'production'} : stages
103
+ end
104
+
89
105
  def deploy_app(options = {})
90
106
  options = options.stringify_keys
91
107
  app = options['app'].is_a?(Hash) ? options['app'] : { 'app' => options['app'] }
92
108
  branch = @branch_backup.present? ? @branch_backup : @argv['BRANCH'].to_s
93
- call_task_deploy_app({
94
- branch: branch,
95
- app: app,
96
- action: options['action']
97
- }.reverse_merge(options))
109
+ call_task_deploy_app({
110
+ branch: branch,
111
+ app: app,
112
+ action: options['action']
113
+ }.reverse_merge(options))
114
+ end
115
+
116
+ def get_app_additional_env_options(app, app_message)
117
+ app_name = (app.is_a?(Hash) && app[:app].present?) ? app[:app].camelcase : app
118
+ app_name = app_name.present? ? app_name : 'current application'
119
+ message = "Please write additional ENV options for #{app_name} for #{app_message}"
120
+ set :app_additional_env_options, CapistranoMulticonfigParallel.ask_confirm(message, nil)
121
+ fetch_app_additional_env_options
98
122
  end
99
123
 
100
124
  private
@@ -178,15 +202,13 @@ module CapistranoMulticonfigParallel
178
202
  return ''
179
203
  end
180
204
  end
181
-
182
- def get_app_additional_env_options(app, app_message)
183
- app_name = (app.is_a?(Hash) && app[:app].present?) ? app[:app].camelcase : app
184
- app_name = app_name.present? ? app_name : 'current application'
185
- message = "Please write additional ENV options for #{app_name} for #{app_message}"
186
- set :app_additional_env_options, CapistranoMulticonfigParallel.ask_confirm(message, nil)
187
- fetch_app_additional_env_options
205
+
206
+ def using_git?
207
+ fetch(:scm, :git).to_sym == :git
188
208
  end
189
209
 
210
+
211
+
190
212
  def fetch_app_additional_env_options
191
213
  options = {}
192
214
  return options if fetch(:app_additional_env_options).blank?
@@ -49,6 +49,7 @@ module CapistranoMulticonfigParallel
49
49
  def multi_stage_deploy(options)
50
50
  stages = fetch_multi_stages
51
51
  return if stages.blank?
52
+ stages = check_multi_stages(stages)
52
53
  multi_collect_and_run_jobs(options) do |apps, new_options|
53
54
  apps.each do |app|
54
55
  stages.each do |stage|
@@ -29,6 +29,7 @@ module CapistranoMulticonfigParallel
29
29
  return unless custom_command?
30
30
  stages = fetch_multi_stages
31
31
  return if stages.blank?
32
+ stages = check_multi_stages(stages)
32
33
  collect_jobs(options) do |new_options|
33
34
  stages.each do |stage|
34
35
  deploy_app(new_options.merge('stage' => stage, 'action' => 'deploy'))
@@ -0,0 +1,23 @@
1
+ module CapistranoMulticonfigParallel
2
+ # class used to find application dependencies
3
+ class Helper
4
+ # rubocop:disable Lint/Eval
5
+ def self.capture(stream)
6
+ stream = stream.to_s
7
+ captured_stream = Tempfile.new(stream)
8
+ stream_io = eval("$#{stream}")
9
+ origin_stream = stream_io.dup
10
+ stream_io.reopen(captured_stream)
11
+
12
+ yield
13
+
14
+ stream_io.rewind
15
+ return captured_stream.read
16
+ ensure
17
+ captured_stream.close
18
+ captured_stream.unlink
19
+ stream_io.reopen(origin_stream)
20
+ end
21
+ end
22
+
23
+ end
@@ -7,8 +7,8 @@ module CapistranoMulticonfigParallel
7
7
  # module used for generating the version
8
8
  module VERSION
9
9
  MAJOR = 0
10
- MINOR = 5
11
- TINY = 0
10
+ MINOR = 6
11
+ TINY = 1
12
12
  PRE = nil
13
13
 
14
14
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano_multiconfig_parallel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
@@ -270,6 +270,26 @@ dependencies:
270
270
  - - ">="
271
271
  - !ruby/object:Gem::Version
272
272
  version: '0.2'
273
+ - !ruby/object:Gem::Dependency
274
+ name: devnull
275
+ requirement: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - "~>"
278
+ - !ruby/object:Gem::Version
279
+ version: '0.1'
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ version: '0.1'
283
+ type: :runtime
284
+ prerelease: false
285
+ version_requirements: !ruby/object:Gem::Requirement
286
+ requirements:
287
+ - - "~>"
288
+ - !ruby/object:Gem::Version
289
+ version: '0.1'
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0.1'
273
293
  - !ruby/object:Gem::Dependency
274
294
  name: rspec-rails
275
295
  requirement: !ruby/object:Gem::Requirement
@@ -626,13 +646,14 @@ files:
626
646
  - lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb
627
647
  - lib/capistrano_multiconfig_parallel/cli.rb
628
648
  - lib/capistrano_multiconfig_parallel/configuration.rb
649
+ - lib/capistrano_multiconfig_parallel/extensions/rake.rb
629
650
  - lib/capistrano_multiconfig_parallel/helpers/base_manager.rb
630
651
  - lib/capistrano_multiconfig_parallel/helpers/multi_app_manager.rb
631
652
  - lib/capistrano_multiconfig_parallel/helpers/single_app_manager.rb
632
653
  - lib/capistrano_multiconfig_parallel/helpers/standard_deploy.rb
633
654
  - lib/capistrano_multiconfig_parallel/initializers/conf.rb
634
655
  - lib/capistrano_multiconfig_parallel/initializers/default.yml
635
- - lib/capistrano_multiconfig_parallel/initializers/rake.rb
656
+ - lib/capistrano_multiconfig_parallel/initializers/helper.rb
636
657
  - lib/capistrano_multiconfig_parallel/multi_app_helpers/dependency_tracker.rb
637
658
  - lib/capistrano_multiconfig_parallel/multi_app_helpers/interactive_menu.rb
638
659
  - lib/capistrano_multiconfig_parallel/version.rb