Class: CapistranoMulticonfigParallel::BundlerWorker
- Inherits:
-
Object
- Object
- CapistranoMulticonfigParallel::BundlerWorker
- Includes:
- BaseActorHelper
- Defined in:
- lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb
Instance Method Summary collapse
- #bundler_dependencies ⇒ Object
- #check_missing_deps ⇒ Object
- #do_bundle_sync_command(command) ⇒ Object
- #notify_finished(exit_status, runner_status) ⇒ Object
- #progress_bar ⇒ Object
- #send_msg(channel, message = nil) ⇒ Object
- #show_bundler_progress(data) ⇒ Object
- #work(job, &callback) ⇒ Object
Methods included from BaseActorHelper
Instance Method Details
#bundler_dependencies ⇒ Object
55 56 57 58 59 60 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 55 def bundler_dependencies builder = Bundler::Dsl.new builder.eval_gemfile(@job.job_gemfile) definition = builder.to_definition(@job.job_gemfile_lock, {}) @bundler_dependencies ||= definition.dependencies end |
#check_missing_deps ⇒ Object
78 79 80 81 82 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 78 def check_missing_deps command = @job.fetch_bundler_worker_command log_to_file("bundler worker #{@job_id} executes: #{command}", job_id: @job_id, prefix: @log_prefix) do_bundle_sync_command(command) end |
#do_bundle_sync_command(command) ⇒ Object
84 85 86 87 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 84 def do_bundle_sync_command(command) process_runner = CapistranoMulticonfigParallel::ProcessRunner.new process_runner.work(@job, command, process_sync: :async, actor: Actor.current, log_prefix: @log_prefix, runner_status_klass: CapistranoMulticonfigParallel::BundlerStatus) end |
#notify_finished(exit_status, runner_status) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 89 def notify_finished(exit_status, runner_status) @runner_status = runner_status @exit_status = exit_status .close if defined?(@progress_bar) if exit_status == 0 @callback.call(@job) else = "Bundler worker #{@job_id} task failed with exit status #{exit_status.inspect}" raise(CapistranoMulticonfigParallel::TaskFailed.new(), ) end end |
#progress_bar ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 31 def if defined?(@progress_bar) @progress_bar else @progress_bar ||= PowerBar.new @progress_bar.define_singleton_method :terminal_width do 40 end @progress_bar.settings.tty.finite.template.main = \ "${<msg>} ${<bar> } ${<percent>%}" # + "${<rate>/s} ${<elapsed>}${ ETA: <eta>}" @progress_bar.settings.tty.finite.template.padchar = "#{@progress_bar.settings.tty.finite.template.padchar}" @progress_bar.settings.tty.finite.template. = "#{@progress_bar.settings.tty.finite.template.}" @progress_bar.settings.tty.finite.template.exit = "\e[?25h\e[0mFINISHED" # clean up after us @progress_bar.settings.tty.finite.template.close = "\e[?25h\e[0mFINISHED \n" # clean up after us @progress_bar.settings.tty.finite.output = Proc.new{ |data| if data.present? && data.include?("Error") || data.include?("Installing") @job.bundler_check_status = data.include?("Error") ? data.to_s.red : data.to_s.green send_msg(CapistranoMulticonfigParallel::BundlerTerminalTable.topic, type: 'event', data: data.to_s.uncolorize ) end } @progress_bar end end |
#send_msg(channel, message = nil) ⇒ Object
101 102 103 104 105 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 101 def send_msg(channel, = nil) = .present? && .is_a?(Hash) ? { job_id: @job_id }.merge() : { job_id: @job_id, message: } log_to_file("worker #{@job_id} triest to send to #{channel} #{}") publish channel, end |
#show_bundler_progress(data) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 62 def show_bundler_progress(data) @show_bundler = false if data.to_s.include?("The Gemfile's dependencies are satisfied") || data.to_s.include?("Bundle complete") gem_spec = bundler_dependencies.find{|spec| data.include?(spec.name) } if data.include?("Error") && @show_bundler == true && gem_spec.present? @checked_bundler_deps << [gem_spec.name] .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) = "Bundler worker #{@job_id} task failed for #{gem_spec.inspect}" raise(CapistranoMulticonfigParallel::TaskFailed.new(), ) elsif @show_bundler == true && gem_spec.present? @checked_bundler_deps << [gem_spec.name] .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) elsif @show_bundler == false .close if defined?(@progress_bar) end end |
#work(job, &callback) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/capistrano_multiconfig_parallel/celluloid/bundler_worker.rb', line 18 def work(job, &callback) @job = job @callback = callback @job.application.bundler_workers_store[job] = Actor.current @job_id = job.id @runner_status = nil @log_prefix = 'bundler' @checked_bundler_deps = [] @total_dependencies = bundler_dependencies.size @show_bundler = true async.check_missing_deps end |