capistrano_multiconfig_parallel 2.0.4 → 2.0.5
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 +4 -4
- data/README.md +1 -1
- data/lib/capistrano_multiconfig_parallel/application.rb +21 -29
- data/lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb +4 -4
- data/lib/capistrano_multiconfig_parallel/celluloid/celluloid_manager.rb +8 -1
- data/lib/capistrano_multiconfig_parallel/celluloid/process_runner.rb +1 -1
- data/lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb +1 -1
- data/lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb +1 -1
- data/lib/capistrano_multiconfig_parallel/classes/job_command.rb +3 -0
- data/lib/capistrano_multiconfig_parallel/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6825ac5589167ee4a3ddd9656816c6ca07ba078
|
4
|
+
data.tar.gz: 581c3abbc3e591f7805204182e6143bc51eabb51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba070cc586ddbc2f1aaa1c4c39bd97950c5e0d5732b7457f0bea9ba922ca69a025c3eb7d18c91cc7ccf12dfd2c1e0462cbc0b4eec2c6e70ef4293a313981613e
|
7
|
+
data.tar.gz: 2169b6d170664cf324e46a61f392170d793a51faefe1873e784e3eb97e24224687a653672814344020e786f91510f3657d27129e90bff685802d22e139b2d25f
|
data/README.md
CHANGED
@@ -55,7 +55,7 @@ Requirements
|
|
55
55
|
11. [inquirer >= 0.2](https://github.com/arlimus/inquirer.rb)
|
56
56
|
12. [devnull >= 0.1](https://github.com/arlimus/inquirer.rb)
|
57
57
|
13. [capistrano_sentinel >= 0.0.16](http://github.com/bogdanRada/capistrano_sentinel)
|
58
|
-
14. [
|
58
|
+
14. [powerbar >= 1.0.17](https://github.com/busyloop/powerbar)
|
59
59
|
|
60
60
|
Compatibility
|
61
61
|
-------------
|
@@ -2,7 +2,7 @@ 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::
|
5
|
+
include CapistranoMulticonfigParallel::ApplicationHelper
|
6
6
|
|
7
7
|
attr_reader :stage_apps,
|
8
8
|
:top_level_tasks,
|
@@ -19,7 +19,7 @@ module CapistranoMulticonfigParallel
|
|
19
19
|
:patched_job_paths,
|
20
20
|
:bundler_workers_store,
|
21
21
|
:checked_job_paths
|
22
|
-
|
22
|
+
|
23
23
|
attr_writer :patched_job_paths
|
24
24
|
|
25
25
|
def initialize
|
@@ -108,20 +108,11 @@ module CapistranoMulticonfigParallel
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def check_before_starting
|
111
|
-
@dependency_tracker = CapistranoMulticonfigParallel::DependencyTracker.new(
|
111
|
+
@dependency_tracker = CapistranoMulticonfigParallel::DependencyTracker.new(self)
|
112
112
|
@default_stage = configuration.development_stages.present? ? configuration.development_stages.first : 'development'
|
113
113
|
@condition = Celluloid::Condition.new
|
114
|
-
@manager = CapistranoMulticonfigParallel::CelluloidManager.new(
|
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, {})])
|
114
|
+
@manager = CapistranoMulticonfigParallel::CelluloidManager.new(self)
|
115
|
+
@manager.start_bundler_supervision_if_needed
|
125
116
|
end
|
126
117
|
|
127
118
|
def collect_jobs(options = {}, &_block)
|
@@ -191,7 +182,11 @@ module CapistranoMulticonfigParallel
|
|
191
182
|
collect_jobs(options)
|
192
183
|
end
|
193
184
|
if configuration.check_app_bundler_dependencies.to_s.downcase == 'true'
|
194
|
-
|
185
|
+
loop do
|
186
|
+
log_to_file("Trying to sleep until all budler workes are done (#{@jobs.size} and #{@bundler_workers_store.size})")
|
187
|
+
break if @jobs.size == @bundler_workers_store.size
|
188
|
+
sleep(0.1)
|
189
|
+
end
|
195
190
|
end
|
196
191
|
process_jobs
|
197
192
|
end
|
@@ -235,6 +230,10 @@ module CapistranoMulticonfigParallel
|
|
235
230
|
#terminate
|
236
231
|
end
|
237
232
|
|
233
|
+
def add_job_to_list_of_jobs(job)
|
234
|
+
@jobs << job unless job_can_tag_staging?(job)
|
235
|
+
end
|
236
|
+
|
238
237
|
def prepare_job(options)
|
239
238
|
options = options.stringify_keys
|
240
239
|
return raise_invalid_job_config if !job_stage_valid?(options)
|
@@ -248,31 +247,24 @@ module CapistranoMulticonfigParallel
|
|
248
247
|
env_options = options['env_options']
|
249
248
|
job_env_options = custom_command? ? env_options.except(action_key) : env_options
|
250
249
|
|
251
|
-
job = CapistranoMulticonfigParallel::Job.new(
|
250
|
+
job = CapistranoMulticonfigParallel::Job.new(self, options.merge(
|
252
251
|
action: custom_command? && env_options[action_key].present? ? env_options[action_key] : options['action'],
|
253
252
|
env_options: job_env_options,
|
254
253
|
path: job_path(options)
|
255
254
|
|
256
255
|
))
|
256
|
+
raise "Please make sure you have a Gemfile in the project root directory #{job.job_path}" unless job.job_gemfile.present?
|
257
|
+
if job.find_capfile.blank?
|
258
|
+
raise "Please make sure you have a Capfile in the project root directory #{job.job_path}"
|
259
|
+
end
|
257
260
|
|
258
|
-
bundler_callback = lambda { |job|
|
259
|
-
raise "Please make sure you have a Gemfile in the project root directory #{job.job_path}" unless job.job_gemfile.present?
|
260
|
-
if job.find_capfile.blank?
|
261
|
-
raise "Please make sure you have a Capfile in the project root directory #{job.job_path}"
|
262
|
-
end
|
263
|
-
unless job.capistrano_sentinel_needs_updating?
|
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} "
|
265
|
-
end
|
266
|
-
log_to_file("bundler callback called with #{job.inspect}")
|
267
|
-
job.application.jobs << job unless job.application.job_can_tag_staging?(job)
|
268
|
-
}
|
269
261
|
if configuration.check_app_bundler_dependencies.to_s.downcase == 'true' && job.job_gemfile.present?
|
270
262
|
if !@checked_job_paths.include?(job.job_path)
|
271
263
|
@checked_job_paths << job.job_path
|
272
|
-
@bundler_workers.work(job
|
264
|
+
@manager.bundler_workers.work(job) # make sure we have installed the dependencies first for this application
|
273
265
|
end
|
274
266
|
else
|
275
|
-
|
267
|
+
add_job_to_list_of_jobs(job)
|
276
268
|
end
|
277
269
|
|
278
270
|
end
|
@@ -15,9 +15,8 @@ module CapistranoMulticonfigParallel
|
|
15
15
|
:show_bundler
|
16
16
|
]
|
17
17
|
|
18
|
-
def work(job
|
18
|
+
def work(job)
|
19
19
|
@job = job
|
20
|
-
@callback = callback
|
21
20
|
@job.application.bundler_workers_store[job] = Actor.current
|
22
21
|
@job_id = job.id
|
23
22
|
@runner_status = nil
|
@@ -90,8 +89,9 @@ module CapistranoMulticonfigParallel
|
|
90
89
|
@runner_status = runner_status
|
91
90
|
@exit_status = exit_status
|
92
91
|
progress_bar.close if defined?(@progress_bar)
|
93
|
-
|
94
|
-
|
92
|
+
log_to_file("bundler worker #{@job_id} notifuy finished with #{exit_status.inspect}")
|
93
|
+
if exit_status.to_i == 0
|
94
|
+
@job.application.add_job_to_list_of_jobs(@job)
|
95
95
|
else
|
96
96
|
error_message = "Bundler worker #{@job_id} task failed with exit status #{exit_status.inspect}"
|
97
97
|
raise(CapistranoMulticonfigParallel::TaskFailed.new(error_message), error_message)
|
@@ -8,7 +8,7 @@ module CapistranoMulticonfigParallel
|
|
8
8
|
include CapistranoMulticonfigParallel::BaseActorHelper
|
9
9
|
attr_accessor :jobs, :job_to_worker, :worker_to_job, :job_to_condition, :mutex, :registration_complete, :workers_terminated, :stderr_buffer
|
10
10
|
|
11
|
-
attr_reader :worker_supervisor, :workers
|
11
|
+
attr_reader :worker_supervisor, :workers, :bundler_workers
|
12
12
|
trap_exit :worker_died
|
13
13
|
|
14
14
|
def initialize(job_manager)
|
@@ -38,6 +38,13 @@ module CapistranoMulticonfigParallel
|
|
38
38
|
@job_to_condition = {}
|
39
39
|
end
|
40
40
|
|
41
|
+
def start_bundler_supervision_if_needed
|
42
|
+
return if configuration.check_app_bundler_dependencies.to_s.downcase != 'true'
|
43
|
+
@bundler_workers = setup_pool_of_actor(@worker_supervisor, actor_name: :bundler_workers, type: CapistranoMulticonfigParallel::BundlerWorker, size: 10)
|
44
|
+
Actor.current.link @bundler_workers
|
45
|
+
setup_actor_supervision(@worker_supervisor, actor_name: :bundler_terminal_server, type: CapistranoMulticonfigParallel::BundlerTerminalTable, args: [Actor.current, @job_manager, configuration.fetch(:terminal, {})])
|
46
|
+
end
|
47
|
+
|
41
48
|
# call to send an actor
|
42
49
|
# a job
|
43
50
|
def delegate_job(job, old_job = "")
|
@@ -60,8 +60,8 @@ module CapistranoMulticonfigParallel
|
|
60
60
|
exit_status = @runner_status.exit_status
|
61
61
|
return if exit_status.blank?
|
62
62
|
@timer.cancel
|
63
|
-
log_to_file("worker #{@job_id} startsnotify finished with exit status #{exit_status.inspect}")
|
64
63
|
if @actor.present? && @actor.respond_to?(:notify_finished)
|
64
|
+
log_to_file("#{@actor.class} #{@job_id} startsnotify finished with exit status #{exit_status.inspect}")
|
65
65
|
if @actor.respond_to?(:async) && @synchronicity == :async
|
66
66
|
@actor.async.notify_finished(exit_status, @runner_status)
|
67
67
|
else
|
@@ -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.multi_apps?
|
14
|
+
return [[], {}] unless @job_manager.send(:multi_apps?)
|
15
15
|
if @job_manager.custom_command?
|
16
16
|
show_interactive_menu(action)
|
17
17
|
else
|
@@ -261,6 +261,9 @@ module CapistranoMulticonfigParallel
|
|
261
261
|
end
|
262
262
|
|
263
263
|
def prepare_application_for_deployment
|
264
|
+
unless capistrano_sentinel_needs_updating?
|
265
|
+
raise "Please consider upgrading the gem #{capistrano_sentinel_name} to version #{loaded_capistrano_sentinel_version} from #{job_capistrano_sentinel_version} in #{job_path} "
|
266
|
+
end
|
264
267
|
config = @job.application.patched_job_paths.find{|hash| hash[:path] == job_path}
|
265
268
|
if config.present?
|
266
269
|
@job_final_gemfile = config[:gemfile]
|