capistrano_multiconfig_parallel 1.3.1 → 1.4.0

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 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