capistrano_multiconfig_parallel 0.5.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
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