capistrano_multiconfig_parallel 1.3.1 → 1.4.0

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: 8a2624e7780cba952e2cab12a77757f73a2d902f
4
- data.tar.gz: c37dfc724d1298716cc62cebcf95bd758082a321
3
+ metadata.gz: 91eff916dbb3076e8afd788b6b853dedf839a523
4
+ data.tar.gz: 7056e86b82f6d3021c3e8778e86d5c33cd9a7543
5
5
  SHA512:
6
- metadata.gz: 9549c24533b7558dc8f37e74fb183938d518b86503492ca07298849e844a9b800c1ed0d56e7ea60da2d260d01c622174ce601f527de1b76f54a2ba91e7c4028d
7
- data.tar.gz: a8aadcd64a80ba1392d171310c6802a2c3eacce6abe8086ce38a0e1b616732f2d5eb5443b2f2feedb17b5df756f2dd0ecce72d72f1c876ebf3d099da5cdc04a5
6
+ metadata.gz: 99d5dad8951a1f901a94f49e6f4ac7c6781555e218ccfe4f5f152b71160fa37d7824ab649e56b0d47abfc9588fc264ee5d460186e0571109e77ea8e22fa4a945
7
+ data.tar.gz: f93cc40a17d86fa045e624f06f4fb8716632867cf7df0761c52d313eaed40dae304249c4e989ccf4fda7da29045516a5a1c2ae8aa25803cb1bb00bacbd5991be
@@ -22,6 +22,7 @@ require 'inquirer'
22
22
  require 'rack'
23
23
  require 'rake'
24
24
 
25
+ require 'etc'
25
26
  require 'logger'
26
27
  require 'fileutils'
27
28
  require 'pp'
@@ -29,14 +29,14 @@ module CapistranoMulticonfigParallel
29
29
  set_celluloid_exception_handling
30
30
  end
31
31
 
32
- def original_args_hash
33
- multi_fetch_argv((original_args || ARGV).dup)
34
- end
35
-
36
32
  def job_id
37
33
  original_args_hash.fetch(CapistranoMulticonfigParallel::ENV_KEY_JOB_ID, nil)
38
34
  end
39
35
 
36
+ def original_args_hash
37
+ multi_fetch_argv((original_args || ARGV).dup)
38
+ end
39
+
40
40
  def capistrano_version
41
41
  find_loaded_gem_property('capistrano', 'version')
42
42
  end
@@ -121,14 +121,6 @@ module CapistranoMulticonfigParallel
121
121
  end
122
122
  end
123
123
 
124
- def message_is_for_stdout?(message)
125
- message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['action'] == 'stdout'
126
- end
127
-
128
- def message_is_about_a_task?(message)
129
- message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present?
130
- end
131
-
132
124
  def executed_task?(task)
133
125
  rake_tasks.present? && rake_tasks.index(task.to_s).present?
134
126
  end
@@ -163,7 +155,7 @@ module CapistranoMulticonfigParallel
163
155
 
164
156
  def finish_worker(exit_status)
165
157
  log_to_file("worker #{job_id} tries to terminate with exit_status #{exit_status}")
166
- @manager.mark_completed_remaining_tasks(@job)
158
+ @manager.mark_completed_remaining_tasks(@job) if Actor.current.alive?
167
159
  update_machine_state('FINISHED') if exit_status == 0
168
160
  @manager.workers_terminated.signal('completed') if @manager.present? && @manager.alive? && @manager.all_workers_finished?
169
161
  end
@@ -17,7 +17,7 @@ module CapistranoMulticonfigParallel
17
17
 
18
18
  def custom_attributes
19
19
  @publisher_channel = "worker_#{@job_id}"
20
- @action = 'invoke'
20
+ @action = @options['action'].present? ? @options['action'] : 'invoke'
21
21
  @task = @options['task']
22
22
  end
23
23
 
@@ -72,7 +72,7 @@ module CapistranoMulticonfigParallel
72
72
  log_to_file("Rake worker #{@job_id} received after on message:", message)
73
73
  if @client.succesfull_subscription?(message)
74
74
  publish_subscription_successfull(message)
75
- elsif msg_for_task?(message)
75
+ elsif message_is_about_a_task?(message)
76
76
  task_approval(message)
77
77
  elsif msg_for_stdin?(message)
78
78
  stdin_approval(message)
@@ -105,7 +105,7 @@ module CapistranoMulticonfigParallel
105
105
  end
106
106
 
107
107
  def task_approval(message)
108
- return unless msg_for_task?(message)
108
+ return unless message_is_about_a_task?(message)
109
109
  if @job_id == message['job_id'] && message['task'].to_s == task_name.to_s && message['approved'] == 'yes'
110
110
  @task_approved = true
111
111
  else
@@ -45,6 +45,7 @@ module CapistranoMulticonfigParallel
45
45
  private
46
46
 
47
47
  def actor_notify_state_change(current_state, event, new_state)
48
+ return unless @actor.alive?
48
49
  @actor.send_msg(CapistranoMulticonfigParallel::TerminalTable.topic, type: 'event', new_state: new_state, message: "Going from #{current_state} to #{new_state} due to a #{event} event")
49
50
  end
50
51
  end
@@ -61,7 +61,7 @@ module CapistranoMulticonfigParallel
61
61
  end
62
62
 
63
63
  def dynamic_size_tput
64
- lines `tput lines 2>/dev/null`
64
+ lines = `tput lines 2>/dev/null`
65
65
  cols = `tput cols 2>/dev/null`
66
66
  lines.present? && cols.present? ? "#{lines} #{cols}" : nil
67
67
  end
@@ -12,7 +12,7 @@ module CapistranoMulticonfigParallel
12
12
  :capistrano_action,
13
13
  :execute_standard_deploy,
14
14
  :setup_command_line,
15
- :gitflow,
15
+ :gem_specs,
16
16
  to: :command
17
17
 
18
18
  delegate :stderr_buffer,
@@ -22,6 +22,7 @@ module CapistranoMulticonfigParallel
22
22
  @options = options.stringify_keys
23
23
  @application = application
24
24
  @manager = @application.manager
25
+ @gitflow ||= command.gitflow_enabled?
25
26
  end
26
27
 
27
28
  def save_stderr_error(data)
@@ -7,19 +7,44 @@ module CapistranoMulticonfigParallel
7
7
  include CapistranoMulticonfigParallel::ApplicationHelper
8
8
 
9
9
  attr_reader :job, :job_capistrano_version, :legacy_capistrano
10
- delegate :app, :stage, :action, :task_arguments, :env_options, :path, to: :job
10
+ delegate :id, :app, :stage, :action, :task_arguments, :env_options, :path, to: :job
11
11
 
12
12
  def initialize(job)
13
13
  @job = job
14
14
  @legacy_capistrano = legacy_capistrano? ? true : false
15
15
  end
16
16
 
17
+ def lockfile_parser
18
+ if File.exists?(job_gemfile_lock)
19
+ @lockfile_parser ||= Bundler::LockfileParser.new(Bundler.read_file("#{job_gemfile_lock}"))
20
+ else
21
+ raise RuntimeError, "please install the gems separately for this application #{job_path} and re-try again!"
22
+ end
23
+ end
24
+
25
+ def gem_specs
26
+ @specs = lockfile_parser.specs
27
+ end
28
+
29
+ def job_gemfile
30
+ File.join(job_path, 'Gemfile')
31
+ end
32
+
33
+ def job_gemfile_lock
34
+ File.join(job_path, 'Gemfile.lock')
35
+ end
36
+
37
+ def job_gem_version(gem_name)
38
+ gem_spec = gem_specs.find {|spec| spec.name == gem_name}
39
+ gem_spec.present? ? gem_spec.version.to_s : nil
40
+ end
41
+
17
42
  def filtered_env_keys
18
43
  %w(STAGES ACTION)
19
44
  end
20
45
 
21
46
  def bundle_gemfile_env
22
- "BUNDLE_GEMFILE=#{job_path}/Gemfile"
47
+ "BUNDLE_GEMFILE=#{job_gemfile}"
23
48
  end
24
49
 
25
50
  def gitflow
@@ -27,6 +52,11 @@ module CapistranoMulticonfigParallel
27
52
  @gitflow ||= gitflow.include?('Could not find') ? false : true
28
53
  end
29
54
 
55
+ def gitflow_enabled?
56
+ gitflow_version = job_gem_version("capistrano-gitflow")
57
+ gitflow_version.present? ? true : false
58
+ end
59
+
30
60
  def job_stage
31
61
  multi_apps?(job_path) && app.present? ? "#{app}:#{stage}" : "#{stage}"
32
62
  end
@@ -60,8 +90,7 @@ module CapistranoMulticonfigParallel
60
90
  end
61
91
 
62
92
  def job_capistrano_version
63
- @job_capistrano_version ||= `#{command_prefix} && #{bundle_gemfile_env} bundle show capistrano | grep -Po 'capistrano-([0-9.]+)' | grep -Po '([0-9.]+)'`
64
- @job_capistrano_version = strip_characters_from_string(@job_capistrano_version)
93
+ @job_capistrano_version ||= job_gem_version("capistrano")
65
94
  end
66
95
 
67
96
  def legacy_capistrano?
@@ -8,13 +8,13 @@ module CapistranoMulticonfigParallel
8
8
  include CapistranoMulticonfigParallel::ApplicationHelper
9
9
  attr_accessor :job_id, :task
10
10
  def initialize(task = nil)
11
- @job_id = CapistranoMulticonfigParallel.job_id
11
+ @job_id = CapistranoMulticonfigParallel.job_id
12
12
  @task = task.respond_to?(:fully_qualified_name) ? task.fully_qualified_name : task
13
13
  end
14
14
 
15
15
  def automatic_hooks(&block)
16
16
  if configuration.multi_secvential.to_s.downcase == 'false' && job_id.present? && @task.present?
17
- actor_start_working
17
+ actor_start_working(action: 'invoke')
18
18
  actor.wait_execution until actor.task_approved
19
19
  actor_execute_block(&block)
20
20
  else
@@ -26,7 +26,7 @@ module CapistranoMulticonfigParallel
26
26
  if job_id.present?
27
27
  actor.user_prompt_needed?(question)
28
28
  else
29
- yield if block.given?
29
+ yield if block_given?
30
30
  end
31
31
  end
32
32
 
@@ -62,12 +62,13 @@ module CapistranoMulticonfigParallel
62
62
  after_hooks
63
63
  end
64
64
 
65
- def actor_start_working
65
+ def actor_start_working(additionals = {})
66
+ additionals = additionals.present? ? additionals : {}
66
67
  if actor.blank?
67
68
  supervise_actor
68
- actor.work(actor_id: rake_actor_id, job_id: job_id, task: @task)
69
+ actor.work({actor_id: rake_actor_id, job_id: job_id, task: @task}.merge(additionals))
69
70
  else
70
- actor.publish_new_work(task: @task)
71
+ actor.publish_new_work({task: @task}.merge(additionals))
71
72
  end
72
73
  end
73
74
 
@@ -15,21 +15,29 @@ module CapistranoMulticonfigParallel
15
15
  include CapistranoMulticonfigParallel::CapistranoHelper
16
16
 
17
17
  delegate :logger,
18
- :configuration,
19
- :configuration_valid?,
20
- :capistrano_version_2?,
21
- :capistrano_version,
22
- :original_args,
23
- to: :CapistranoMulticonfigParallel
18
+ :configuration,
19
+ :configuration_valid?,
20
+ :capistrano_version_2?,
21
+ :capistrano_version,
22
+ :original_args,
23
+ to: :CapistranoMulticonfigParallel
24
24
 
25
- module_function
25
+ module_function
26
26
 
27
27
  def msg_for_stdin?(message)
28
28
  message['action'] == 'stdin'
29
29
  end
30
30
 
31
- def msg_for_task?(message)
32
- message['task'].present?
31
+ def message_is_for_stdout?(message)
32
+ message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['action'] == 'stdout'
33
+ end
34
+
35
+ def message_is_about_a_task?(message)
36
+ message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present? && message['action'] == 'invoke'
37
+ end
38
+
39
+ def message_from_bundler?(message)
40
+ message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present? && message['action'] == 'bundle_install'
33
41
  end
34
42
 
35
43
  def get_question_details(data)
@@ -3,19 +3,19 @@ module CapistranoMulticonfigParallel
3
3
  module CapistranoHelper
4
4
  module_function
5
5
 
6
- def filtered_env_keys_format(keys, version = capistrano_version_2?)
6
+ def filtered_env_keys_format(keys, version = false)
7
7
  keys.map { |key| env_key_format(key, version) }
8
8
  end
9
9
 
10
- def env_prefix(key, version = capistrano_version_2?)
10
+ def env_prefix(key, version = false)
11
11
  key != CapistranoMulticonfigParallel::ENV_KEY_JOB_ID && version == true ? '-S' : ''
12
12
  end
13
13
 
14
- def env_key_format(key, version = capistrano_version_2?)
14
+ def env_key_format(key, version = false)
15
15
  version == true ? key.downcase : key
16
16
  end
17
17
 
18
- def trace_flag(version = capistrano_version_2?)
18
+ def trace_flag(version = false)
19
19
  version == true ? '--verbose' : '--trace'
20
20
  end
21
21
 
@@ -38,8 +38,14 @@ module CapistranoMulticonfigParallel
38
38
 
39
39
  def read_config_file
40
40
  return if CapistranoMulticonfigParallel.original_args.present? && CapistranoMulticonfigParallel.original_args.include?('--help')
41
- @fetched_config.config_dir = @fetched_config.config_dir.present? ? File.expand_path(@fetched_config.config_dir) : try_detect_file('multi_cap.yml')
42
- config_file_path = @fetched_config.config_dir.present? ? File.join(@fetched_config.config_dir, 'multi_cap.yml') : nil
41
+ user = Etc.getlogin
42
+ config_file_path = File.join(Dir.home(user), "multi_cap.yml")
43
+ if File.exists?(config_file_path)
44
+ @fetched_config.config_dir = File.dirname(config_file_path)
45
+ else
46
+ @fetched_config.config_dir = @fetched_config.config_dir.present? ? File.expand_path(@fetched_config.config_dir) : try_detect_file('multi_cap.yml')
47
+ config_file_path = @fetched_config.config_dir.present? ? File.join(@fetched_config.config_dir, 'multi_cap.yml') : nil
48
+ end
43
49
  config_file = File.expand_path(config_file_path || File.join(detect_root.to_s, 'config', 'multi_cap.yml'))
44
50
  @fetched_config.log_dir = config_file_path.present? ? File.dirname(config_file) : File.dirname(File.dirname(config_file))
45
51
  @fetched_config.read config_file if File.file?(config_file)
@@ -3,13 +3,29 @@ module CapistranoMulticonfigParallel
3
3
  module InternalHelper
4
4
  module_function
5
5
 
6
+ def get_current_gem_name
7
+ searcher = if Gem::Specification.respond_to? :find
8
+ # ruby 2.0
9
+ Gem::Specification
10
+ elsif Gem.respond_to? :searcher
11
+ # ruby 1.8/1.9
12
+ Gem.searcher.init_gemspecs
13
+ end
14
+ spec = unless searcher.nil?
15
+ searcher.find do |spec|
16
+ File.fnmatch(File.join(spec.full_gem_path,'*'), __FILE__)
17
+ end
18
+ end
19
+ spec.name if spec.present?
20
+ end
21
+
6
22
  def multi_level_prop(config, prop)
7
23
  prop.split('.').each { |new_prop| config = config[new_prop] }
8
24
  config
9
25
  end
10
26
 
11
27
  def internal_config_directory
12
- File.join(root.to_s, 'capistrano_multiconfig_parallel', 'configuration')
28
+ File.join(root.to_s, get_current_gem_name, 'configuration')
13
29
  end
14
30
 
15
31
  def internal_config_file
@@ -7,8 +7,8 @@ module CapistranoMulticonfigParallel
7
7
  # module used for generating the version
8
8
  module VERSION
9
9
  MAJOR = 1
10
- MINOR = 3
11
- TINY = 1
10
+ MINOR = 4
11
+ TINY = 0
12
12
  PRE = nil
13
13
 
14
14
  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: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-01 00:00:00.000000000 Z
11
+ date: 2016-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid