capistrano_multiconfig_parallel 2.0.1 → 2.0.3

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: 2699a6ed6f5e38540aa4bbbfc86c17842febbc9c
4
- data.tar.gz: cd6b4acefa3ac596d711b6dab2c450f47f93a8f9
3
+ metadata.gz: 4d23166b1840bdc3b08aba70bc46a988b93fa9d3
4
+ data.tar.gz: 1810d6abd23e17df7aae1519894651152ba950e5
5
5
  SHA512:
6
- metadata.gz: 9210b7536d87f6d17ba7f0f99a120947728dfd239074d99eb0e46f9a61f8b7c8cd99ae4a2f16f207e138f40a190697d55d2ead9ae595f3050b18398e59524ce4
7
- data.tar.gz: ba98002b12565a804aff218cc24cc958a4af662eb86dbe684a1c416bf8032c78bb3544eeaa867a6653310b3604d0b64caea539daf52e8b2a398bdec05fe30948
6
+ metadata.gz: a74d2fed08ad4a5bfa2d7bbaa8b86be79d9c184feacd927538529087aebca29f2de1ff4773ab860c94b6dd204a4d91da2cd3592672124e8007f0c151aded3eb0
7
+ data.tar.gz: f4be5d8432d06f49bc9dfaab76e9e0fb67ecabcfea3ffd12bfc44e7e8cd0de6f77bd1e63a4f94e14dc54693292414d4e4388bc915b7d7c67cb31025b4ba4bcc9
data/.codeclimate.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  engines:
3
3
  bundler-audit:
4
- enabled: true
4
+ enabled: false
5
5
  csslint:
6
6
  enabled: true
7
7
  eslint:
data/README.md CHANGED
@@ -21,13 +21,19 @@ NEW Improvements started in version 2.0.0.alpha ( currently gem is in stable ver
21
21
  -------------------------------------------------------------------------------------
22
22
 
23
23
  - Code for handling websocket events when a task is invoked was moved to a new gem [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel)
24
- - You can now deploy applications from anywhere on your computer without having to add this gem to the Gemfile, however you need to add the [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) gem to your Gemfile, if you want to use this .
25
- - And only create anywhere on your computer a YAML file as described in section **[2.2) Deploying multiple applications from a central location](#22-deploying-multiple-applications-from-a-central-location)**
26
- - If you don't add the **capistrano_sentinel** to each of your applications, the executable of this gem will automatically create a new file "Gemfile.multi_cap" in the root of each of the applications that you are deploying, where the [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) gem will be included and will use that Gemfile when doing deploys.
27
- - The Capfile file of each of the applications that you are deploying will also be automatically changed to require [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) if you haven't done so yet if the gem is part of the Gemfile, but was not required.
28
- - If the **capistrano_sentinel** gem is not part of the Gemfile, a new file will be created "Capfile.multi_cap" in order to require the gem upon execution of jobs.
29
- - When the command will finish , the files created will be removed.
30
- - If you are using RVM and there is a .rvmrc file in your project root directory and bash is available , the script will use bash emulator in order to properly load RVM gemsets because .rvmrc files need trusting
24
+
25
+ - You can now deploy applications from anywhere on your computer **without having to add THIS gem to the Gemfiles of those applications**, however we recommend you to add the [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) gem to those Gemfiles for better stability. **The applications though must contain proper configuration for capistrano as you would normally do!!!**
26
+
27
+ - If [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) is included in one of the applications you are deploying, but you forget to require it, this gem will automatically patch the Capfile to require the gem. Otherwise the Capfile is not changed.
28
+
29
+ - However this will work even if you don't add the [capistrano_sentinel](https://github.com/bogdanRada/capistrano_sentinel) to your Gemfile, because the new version will automatically create three files "Gemfile.multi_cap", "Gemfile.multi_cap.lock" and "Capfile.multi_cap" where the dependency to **capistrano_sentinel** will be added and those new files will be used when deploying. This new Gemfile and the new Capfile will be clones of the original files, but will only add as dependency the **capistrano_sentinel** gem which is used to produce websocket events before a capistrano task is executed. And this gem will consume them and act depending on configuration.
30
+
31
+ - After installing this gem locally on your system, you can just create anywhere on your computer a YAML file as described in section **[2.2) Deploying multiple applications from a central location](#22-deploying-multiple-applications-from-a-central-location)** ( we suggest using the home directory) and then you can start deploying applications without adding new dependencies to those applications.
32
+
33
+ - When the command will finish , the files created will be removed. ("Gemfile.multi_cap", "Gemfile.multi_cap.lock" and "Capfile.multi_cap") if they exist in the application root directory.
34
+
35
+ - If you are using RVM and there is a .rvmrc file in your project root directory and bash is available , the script will use bash emulator in order to properly load RVM gemsets because .rvmrc files need trusting. **If you use .rvmrc files please make sure you have the `bash` executable available in your PATH**
36
+
31
37
  - **Dont use BUNDLE EXEC command when running the executable for this gem unless you are using version 1 or this gem is part of the Gemfile of the application you are using. Otherwise just use the `multi_cap` executable without any prefix ( Unless this gem is part of your gemfile, in which case the BUNDLE EXEC prefix is needed )**
32
38
 
33
39
  If you are using a older version than 2.0 please refer to this [README for version 1.7.2 or lower](https://github.com/bogdanRada/capistrano_multiconfig_parallel/blob/master/V1_README.md)
@@ -48,7 +54,8 @@ Requirements
48
54
  10. [configliere >= 0.4](https://github.com/infochimps-platform/configliere)
49
55
  11. [inquirer >= 0.2](https://github.com/arlimus/inquirer.rb)
50
56
  12. [devnull >= 0.1](https://github.com/arlimus/inquirer.rb)
51
- 13. [capistrano_sentinel >= 1.6](http://github.com/bogdanRada/capistrano_sentinel)
57
+ 13. [capistrano_sentinel >= 0.0.16](http://github.com/bogdanRada/capistrano_sentinel)
58
+ 14. [ruby-progressbar >= 1.8.1](https://github.com/jfelchner/ruby-progressbar)
52
59
 
53
60
  Compatibility
54
61
  -------------
@@ -76,8 +83,10 @@ Add the following to your Capfile after requiring **capistrano** and **capistran
76
83
 
77
84
  Install locally on your system the capistrano_multiconfig_parallel gem using this command :
78
85
 
86
+ **Please check first what is the last release here: [Release Details](https://github.com/bogdanRada/capistrano_multiconfig_parallel/releases) and use that version instead of the one below**
87
+
79
88
  ```ruby
80
- gem install capistrano_multiconfig_parallel -v 2.0.0
89
+ gem install capistrano_multiconfig_parallel -v 2.0.1
81
90
  ```
82
91
 
83
92
  Please read [Release Details](https://github.com/bogdanRada/capistrano_multiconfig_parallel/releases) if you are upgrading. We break backward compatibility between large ticks but you can expect it to be specified at release notes.
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_runtime_dependency 'inquirer', '~> 0.2', '>= 0.2'
31
31
  s.add_runtime_dependency 'devnull','~> 0.1', '>= 0.1'
32
32
  s.add_runtime_dependency 'capistrano_sentinel', '>= 0.0', '>= 0.0.16'
33
- s.add_runtime_dependency 'ruby-progressbar', '~> 1.8', '>= 1.8.1'
33
+ s.add_runtime_dependency 'powerbar', '~> 1.0', '>= 1.0.17'
34
34
 
35
35
  s.add_development_dependency 'rake', '>= 10.4', '>= 10.4'
36
36
  s.add_development_dependency 'rspec', '~> 3.4', '>= 3.4'
@@ -20,7 +20,7 @@ require 'configliere'
20
20
  require 'devnull'
21
21
  require 'inquirer'
22
22
  require "capistrano_sentinel"
23
- require 'ruby-progressbar'
23
+ require 'powerbar'
24
24
 
25
25
  require 'etc'
26
26
  require 'logger'
@@ -2,9 +2,24 @@ require_relative './helpers/base_actor_helper'
2
2
  module CapistranoMulticonfigParallel
3
3
  # finds app dependencies, shows menu and delegates jobs to celluloid manager
4
4
  class Application
5
- include CapistranoMulticonfigParallel::ApplicationHelper
6
-
7
- attr_reader :stage_apps, :top_level_tasks, :jobs, :condition, :manager, :dependency_tracker, :application, :stage, :name, :args, :argv, :default_stage,:patched_job_paths
5
+ include CapistranoMulticonfigParallel::BaseActorHelper
6
+
7
+ attr_reader :stage_apps,
8
+ :top_level_tasks,
9
+ :jobs,
10
+ :condition,
11
+ :manager,
12
+ :dependency_tracker,
13
+ :application,
14
+ :stage,
15
+ :name,
16
+ :args,
17
+ :argv,
18
+ :default_stage,
19
+ :patched_job_paths,
20
+ :bundler_workers_store,
21
+ :checked_job_paths
22
+
8
23
  attr_writer :patched_job_paths
9
24
 
10
25
  def initialize
@@ -12,7 +27,7 @@ module CapistranoMulticonfigParallel
12
27
  CapistranoMulticonfigParallel.enable_logging
13
28
  @stage_apps = multi_apps? ? app_names_from_stages : []
14
29
  collect_command_line_tasks(CapistranoMulticonfigParallel.original_args)
15
- @bundler_workers = []
30
+ @bundler_workers_store = {}
16
31
  @jobs = []
17
32
  @checked_job_paths = []
18
33
  @patched_job_paths = [] # for deploy
@@ -93,10 +108,20 @@ module CapistranoMulticonfigParallel
93
108
  end
94
109
 
95
110
  def check_before_starting
96
- @dependency_tracker = CapistranoMulticonfigParallel::DependencyTracker.new(self)
111
+ @dependency_tracker = CapistranoMulticonfigParallel::DependencyTracker.new(Actor.current)
97
112
  @default_stage = configuration.development_stages.present? ? configuration.development_stages.first : 'development'
98
113
  @condition = Celluloid::Condition.new
99
- @manager = CapistranoMulticonfigParallel::CelluloidManager.new(self)
114
+ @manager = CapistranoMulticonfigParallel::CelluloidManager.new(Actor.current)
115
+ start_bundler_supervision_if_needed
116
+ end
117
+
118
+ def start_bundler_supervision_if_needed
119
+ return if configuration.check_app_bundler_dependencies.to_s.downcase != 'true'
120
+ @bundler_worker_supervisor = setup_supervision_group
121
+ @mutex = Mutex.new
122
+ @bundler_workers = setup_pool_of_actor(@bundler_worker_supervisor, actor_name: :bundler_workers, type: CapistranoMulticonfigParallel::BundlerWorker, size: 10)
123
+ Actor.current.link @bundler_workers
124
+ setup_actor_supervision(@bundler_worker_supervisor, actor_name: :bundler_terminal_server, type: CapistranoMulticonfigParallel::BundlerTerminalTable, args: [@manager, Actor.current, configuration.fetch(:terminal, {})])
100
125
  end
101
126
 
102
127
  def collect_jobs(options = {}, &_block)
@@ -166,7 +191,7 @@ module CapistranoMulticonfigParallel
166
191
  collect_jobs(options)
167
192
  end
168
193
  if configuration.check_app_bundler_dependencies.to_s.downcase == 'true'
169
- sleep(0.1) until @jobs.size == @bundler_workers.size
194
+ sleep(0.1) until @jobs.size == @bundler_workers_store.size
170
195
  end
171
196
  process_jobs
172
197
  end
@@ -223,7 +248,7 @@ module CapistranoMulticonfigParallel
223
248
  env_options = options['env_options']
224
249
  job_env_options = custom_command? ? env_options.except(action_key) : env_options
225
250
 
226
- job = CapistranoMulticonfigParallel::Job.new(self, options.merge(
251
+ job = CapistranoMulticonfigParallel::Job.new(Actor.current, options.merge(
227
252
  action: custom_command? && env_options[action_key].present? ? env_options[action_key] : options['action'],
228
253
  env_options: job_env_options,
229
254
  path: job_path(options)
@@ -238,14 +263,13 @@ module CapistranoMulticonfigParallel
238
263
  unless job.capistrano_sentinel_needs_updating?
239
264
  raise "Please consider upgrading the gem #{job.capistrano_sentinel_name} to version #{job.loaded_capistrano_sentinel_version} from #{job.job_capistrano_sentinel_version} in #{job.job_path} "
240
265
  end
266
+ log_to_file("bundler callback called with #{job.inspect}")
241
267
  job.application.jobs << job unless job.application.job_can_tag_staging?(job)
242
268
  }
243
269
  if configuration.check_app_bundler_dependencies.to_s.downcase == 'true' && job.job_gemfile.present?
244
270
  if !@checked_job_paths.include?(job.job_path)
245
271
  @checked_job_paths << job.job_path
246
- bundler_worker = CapistranoMulticonfigParallel::BundlerWorker.new
247
- @bundler_workers << {job: job, worker: bundler_worker }
248
- bundler_worker.work(job, &bundler_callback) # make sure we have installed the dependencies first for this application
272
+ @bundler_workers.work(job, &bundler_callback) # make sure we have installed the dependencies first for this application
249
273
  end
250
274
  else
251
275
  bundler_callback.call(job)
@@ -0,0 +1,42 @@
1
+ module CapistranoMulticonfigParallel
2
+ class BundlerTerminalTable < CapistranoMulticonfigParallel::TerminalTable
3
+
4
+ def self.topic
5
+ 'bundler_terminal'
6
+ end
7
+
8
+ def default_heaadings
9
+ ['Job UUID', 'App', 'Action', 'Current Status']
10
+ end
11
+
12
+ def run
13
+ subscribe(CapistranoMulticonfigParallel::BundlerTerminalTable.topic, :notify_bundler_install_status)
14
+ end
15
+
16
+ def notify_bundler_install_status(_channel, _message)
17
+ table = Terminal::Table.new(title: 'Bundler Check Status Table', headings: default_heaadings)
18
+ jobs = setup_table_jobs(table)
19
+ display_table_on_terminal(table, jobs)
20
+ end
21
+
22
+ def fetch_table_size(jobs)
23
+ job_rows = jobs.sum { |job, _bundler_worker| job.row_size }
24
+ (job_rows + 2)**2
25
+ end
26
+
27
+
28
+ def setup_table_jobs(table)
29
+ jobs = managers_alive? ? @job_manager.bundler_workers_store.dup : []
30
+ jobs.each do |job, bundler_worker|
31
+ table.add_row(job.bundler_check_terminal_row)
32
+ table.add_separator if jobs.keys.last != job
33
+ end
34
+ jobs
35
+ end
36
+
37
+ def managers_alive?
38
+ @job_manager.alive?
39
+ end
40
+
41
+ end
42
+ end
@@ -17,18 +17,39 @@ module CapistranoMulticonfigParallel
17
17
 
18
18
  def work(job, &callback)
19
19
  @job = job
20
+ @callback = callback
21
+ @job.application.bundler_workers_store[job] = Actor.current
20
22
  @job_id = job.id
21
23
  @runner_status = nil
22
24
  @log_prefix = 'bundler'
23
25
  @checked_bundler_deps = []
24
26
  @total_dependencies = bundler_dependencies.size
25
27
  @show_bundler = true
26
- progress_bar
27
28
  async.check_missing_deps
28
29
  end
29
30
 
30
31
  def progress_bar
31
- @progress_bar ||= ProgressBar.create(:title => "Checking app #{File.basename(@job.job_path)} bundler dependencies ", :starting_at => 0, :total => @total_dependencies.to_i, length: 160, :format => '%a |%b>>%i| %p%% %t | Processed: %c from %C gem dependencies')
32
+ if defined?(@progress_bar)
33
+ @progress_bar
34
+ else
35
+ @progress_bar ||= PowerBar.new
36
+ @progress_bar.define_singleton_method :terminal_width do
37
+ 40
38
+ end
39
+ @progress_bar.settings.tty.finite.template.main = \
40
+ "${<msg>} ${<bar> } ${<percent>%}" # + "${<rate>/s} ${<elapsed>}${ ETA: <eta>}"
41
+ @progress_bar.settings.tty.finite.template.padchar = "#{@progress_bar.settings.tty.finite.template.padchar}"
42
+ @progress_bar.settings.tty.finite.template.barchar = "#{@progress_bar.settings.tty.finite.template.barchar}"
43
+ @progress_bar.settings.tty.finite.template.exit = "\e[?25h\e[0mFINISHED" # clean up after us
44
+ @progress_bar.settings.tty.finite.template.close = "\e[?25h\e[0mFINISHED \n" # clean up after us
45
+ @progress_bar.settings.tty.finite.output = Proc.new{ |data|
46
+ if data.present? && data.include?("Error") || data.include?("Installing")
47
+ @job.bundler_check_status = data.include?("Error") ? data.to_s.red : data.to_s.green
48
+ send_msg(CapistranoMulticonfigParallel::BundlerTerminalTable.topic, type: 'event', data: data.to_s.uncolorize )
49
+ end
50
+ }
51
+ @progress_bar
52
+ end
32
53
  end
33
54
 
34
55
  def bundler_dependencies
@@ -42,13 +63,15 @@ module CapistranoMulticonfigParallel
42
63
  @show_bundler = false if data.to_s.include?("The Gemfile's dependencies are satisfied") || data.to_s.include?("Bundle complete")
43
64
  gem_spec = bundler_dependencies.find{|spec| data.include?(spec.name) }
44
65
  if data.include?("Error") && @show_bundler == true && gem_spec.present?
66
+ @checked_bundler_deps << [gem_spec.name]
67
+ progress_bar.show(:msg => "Error installing #{gem_spec.name} (#{@checked_bundler_deps.size} from #{@total_dependencies.to_i} deps)", :done => @checked_bundler_deps.size, :total => @total_dependencies.to_i)
45
68
  error_message = "Bundler worker #{@job_id} task failed for #{gem_spec.inspect}"
46
69
  raise(CapistranoMulticonfigParallel::TaskFailed.new(error_message), error_message)
47
70
  elsif @show_bundler == true && gem_spec.present?
48
- @checked_bundler_deps = [gem_spec.name]
49
- progress_bar.increment
71
+ @checked_bundler_deps << [gem_spec.name]
72
+ progress_bar.show(:msg => "Installing #{gem_spec.name} (#{@checked_bundler_deps.size} from #{@total_dependencies.to_i} deps)", :done => @checked_bundler_deps.size, :total => @total_dependencies.to_i)
50
73
  elsif @show_bundler == false
51
- progress_bar.finish
74
+ progress_bar.close if defined?(@progress_bar)
52
75
  end
53
76
  end
54
77
 
@@ -66,14 +89,20 @@ module CapistranoMulticonfigParallel
66
89
  def notify_finished(exit_status, runner_status)
67
90
  @runner_status = runner_status
68
91
  @exit_status = exit_status
69
- progress_bar.finish
92
+ progress_bar.close if defined?(@progress_bar)
70
93
  if exit_status == 0
71
- callback.call(@job)
94
+ @callback.call(@job)
72
95
  else
73
96
  error_message = "Bundler worker #{@job_id} task failed with exit status #{exit_status.inspect}"
74
97
  raise(CapistranoMulticonfigParallel::TaskFailed.new(error_message), error_message)
75
98
  end
76
99
  end
77
100
 
101
+ def send_msg(channel, message = nil)
102
+ message = message.present? && message.is_a?(Hash) ? { job_id: @job_id }.merge(message) : { job_id: @job_id, message: message }
103
+ log_to_file("worker #{@job_id} triest to send to #{channel} #{message}")
104
+ publish channel, message
105
+ end
106
+
78
107
  end
79
108
  end
@@ -23,6 +23,7 @@ module CapistranoMulticonfigParallel
23
23
  @terminal_rows = nil
24
24
  @cursor = CapistranoMulticonfigParallel::Cursor.new
25
25
  @errors = []
26
+ @notifications = 0
26
27
  @options = options.is_a?(Hash) ? options.stringify_keys : options
27
28
  @job_manager = job_manager
28
29
  @screen_erased = false
@@ -43,7 +44,10 @@ module CapistranoMulticonfigParallel
43
44
  def notify_time_change(_channel, message)
44
45
  table = Terminal::Table.new(title: 'Deployment Status Table', headings: default_heaadings)
45
46
  jobs = setup_table_jobs(table)
47
+ @cursor.erase_screen if @notifications.to_i.zero? && @job_manager.checked_job_paths.size > 0 && jobs.find{|job_id, job| job.bundler_check_status.present? }.present?
48
+ @notifications=@notifications+1
46
49
  display_table_on_terminal(table, jobs)
50
+ signal_complete
47
51
  end
48
52
 
49
53
  def rescue_exception(ex)
@@ -68,7 +72,6 @@ module CapistranoMulticonfigParallel
68
72
  )
69
73
  )
70
74
  print_errors
71
- signal_complete
72
75
  end
73
76
 
74
77
  def print_errors
@@ -91,7 +94,7 @@ module CapistranoMulticonfigParallel
91
94
  end
92
95
 
93
96
  def managers_alive?
94
- @manager.alive?
97
+ @job_manager.alive? && @manager.alive?
95
98
  end
96
99
 
97
100
  def signal_complete
@@ -14,8 +14,6 @@ module CapistranoMulticonfigParallel
14
14
  end
15
15
  end
16
16
 
17
- private
18
-
19
17
  def move_to_home!(row = 0, column = 1)
20
18
  erase_screen
21
19
  position_cursor(row, column)
@@ -11,7 +11,7 @@ module CapistranoMulticonfigParallel
11
11
  end
12
12
 
13
13
  def fetch_apps_needed_for_deployment(application, action)
14
- return [[], {}] unless @job_manager.send(:multi_apps?)
14
+ return [[], {}] unless @job_manager.multi_apps?
15
15
  if @job_manager.custom_command?
16
16
  show_interactive_menu(action)
17
17
  else
@@ -5,8 +5,8 @@ module CapistranoMulticonfigParallel
5
5
  class Job
6
6
  include CapistranoMulticonfigParallel::ApplicationHelper
7
7
 
8
- attr_reader :options, :application, :manager, :bundler_status
9
- attr_writer :status, :exit_status, :bundler_status, :new_jobs_dispatched, :will_dispatch_new_job
8
+ attr_reader :options, :application, :manager, :bundler_status, :bundler_check_status
9
+ attr_writer :status, :exit_status, :bundler_status, :new_jobs_dispatched, :will_dispatch_new_job, :bundler_check_status
10
10
 
11
11
  delegate :stderr_buffer,
12
12
  to: :manager
@@ -43,7 +43,9 @@ module CapistranoMulticonfigParallel
43
43
  end
44
44
 
45
45
  def terminal_row
46
- if bundler_status
46
+ if bundler_check_status
47
+ bundler_check_terminal_row
48
+ elsif bundler_status
47
49
  bundler_terminal_row
48
50
  else
49
51
  [
@@ -56,6 +58,14 @@ module CapistranoMulticonfigParallel
56
58
  end
57
59
  end
58
60
 
61
+ def bundler_check_terminal_row
62
+ [
63
+ { value: id.to_s },
64
+ { value: wrap_string(File.basename(job.job_path)) },
65
+ { value: "bundle check || bundle install" },
66
+ { value: bundler_check_status.to_s }
67
+ ]
68
+ end
59
69
 
60
70
  def bundler_terminal_row
61
71
  [
@@ -99,6 +109,7 @@ module CapistranoMulticonfigParallel
99
109
  { name: 'status', default: :unstarted },
100
110
  { name: 'exit_status', default: nil },
101
111
  { name: 'bundler_status', default: nil },
112
+ { name: 'bundler_check_status', default: nil },
102
113
  { name: 'new_jobs_dispatched', default: [] },
103
114
  { name: 'will_dispatch_new_job', default: nil },
104
115
  ].each do |hash|
@@ -9,7 +9,7 @@ module CapistranoMulticonfigParallel
9
9
 
10
10
  MAJOR = 2
11
11
  MINOR = 0
12
- TINY = 1
12
+ TINY = 3
13
13
  PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano_multiconfig_parallel
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-18 00:00:00.000000000 Z
11
+ date: 2016-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -259,25 +259,25 @@ dependencies:
259
259
  - !ruby/object:Gem::Version
260
260
  version: 0.0.16
261
261
  - !ruby/object:Gem::Dependency
262
- name: ruby-progressbar
262
+ name: powerbar
263
263
  requirement: !ruby/object:Gem::Requirement
264
264
  requirements:
265
265
  - - "~>"
266
266
  - !ruby/object:Gem::Version
267
- version: '1.8'
267
+ version: '1.0'
268
268
  - - ">="
269
269
  - !ruby/object:Gem::Version
270
- version: 1.8.1
270
+ version: 1.0.17
271
271
  type: :runtime
272
272
  prerelease: false
273
273
  version_requirements: !ruby/object:Gem::Requirement
274
274
  requirements:
275
275
  - - "~>"
276
276
  - !ruby/object:Gem::Version
277
- version: '1.8'
277
+ version: '1.0'
278
278
  - - ">="
279
279
  - !ruby/object:Gem::Version
280
- version: 1.8.1
280
+ version: 1.0.17
281
281
  - !ruby/object:Gem::Dependency
282
282
  name: rake
283
283
  requirement: !ruby/object:Gem::Requirement
@@ -504,6 +504,7 @@ files:
504
504
  - lib/capistrano_multiconfig_parallel/all.rb
505
505
  - lib/capistrano_multiconfig_parallel/application.rb
506
506
  - lib/capistrano_multiconfig_parallel/base.rb
507
+ - lib/capistrano_multiconfig_parallel/celluloid/bundler_terminal_table.rb
507
508
  - lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb
508
509
  - lib/capistrano_multiconfig_parallel/celluloid/celluloid_manager.rb
509
510
  - lib/capistrano_multiconfig_parallel/celluloid/celluloid_worker.rb