capistrano_multiconfig_parallel 0.14.0 → 0.15.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: af426cfa70110d128cbe87845419726e79c208a1
4
- data.tar.gz: 8fc920d2c30a6dba86a4454072f8545178b5e0cf
3
+ metadata.gz: bd23b511de842a842e488d77a14f485c25ea0038
4
+ data.tar.gz: 4ebc2e9f2a2f11d0546ba60930e70f2b641a8a85
5
5
  SHA512:
6
- metadata.gz: d7d415e6280a296e2245caa1d969ee18e7875a31c52fb7a7dccf2c299647cc3a7dc3378ca2bacd9a3fc28ef52086004bae92b0d9a336b9e9aa5fba790860f0c9
7
- data.tar.gz: 8c6d73cd137cc0b2ab546ffd2d76aa9a26ff866d90a0a7d746ed38ffd237d78ca574074885cb9f4983030656c0c661acea359a645c19112df5e0b1f8cc482e05
6
+ metadata.gz: 408a10f55c1fc2bb2232109abe5fb8ef345f58de0bcd3fda293e3c7c8979a9579a908aaff6bd946798badb61fd6762fece5e69e85dcc4df9fef18830718ebca0
7
+ data.tar.gz: 854662dee0a090edd903638ae6dd8ab69273cd6fd3b724a61daf0431d3202adde3cfca49843e8a72640126ca352dd00c678fca275f010329de843ca9ec2ca014
data/README.md CHANGED
@@ -112,7 +112,7 @@ Available command line options when executing a command
112
112
 
113
113
  - --application_dependencies
114
114
 
115
- - This should be used only for Caphub-like applications , in order to deploy dependencies of an application in parallel and is described at section **[2.) Multiple applications](#multiple_apps)**
115
+ - This should be used only for Caphub-like applications , in order to deploy dependencies of an application in parallel and is described at section **[2.) Multiple applications](#2-multiple-apps--like-caphub-)**
116
116
 
117
117
  Usage Instructions
118
118
  ==================
@@ -10,17 +10,12 @@ module CapistranoMulticonfigParallel
10
10
  end
11
11
 
12
12
  def top_level
13
- job_manager = CapistranoMulticonfigParallel::BaseManager.new(self, top_level_tasks, stages)
13
+ job_manager = CapistranoMulticonfigParallel::BaseManager.new
14
14
  if job_manager.can_start? && !options.show_prereqs && !options.show_tasks
15
15
  job_manager.start
16
16
  else
17
17
  super
18
18
  end
19
19
  end
20
-
21
- def multi_apps?
22
- stages.find { |stage| stage.include?(':') }.present?
23
- end
24
-
25
20
  end
26
21
  end
@@ -121,7 +121,7 @@ module CapistranoMulticonfigParallel
121
121
  end
122
122
 
123
123
  def syncronized_confirmation?
124
- !@job_manager.can_tag_staging?
124
+ !@job_manager.can_tag_staging?
125
125
  end
126
126
 
127
127
  def apply_confirmation_for_worker(worker)
@@ -129,7 +129,7 @@ module CapistranoMulticonfigParallel
129
129
  end
130
130
 
131
131
  def setup_worker_conditions(worker)
132
- return if !apply_confirmation_for_worker(worker)
132
+ return unless apply_confirmation_for_worker(worker)
133
133
  hash_conditions = {}
134
134
  CapistranoMulticonfigParallel.configuration.task_confirmations.each do |task|
135
135
  hash_conditions[task] = { condition: Celluloid::Condition.new, status: 'unconfirmed' }
@@ -138,7 +138,7 @@ module CapistranoMulticonfigParallel
138
138
  end
139
139
 
140
140
  def mark_completed_remaining_tasks(worker)
141
- return if !apply_confirmation_for_worker(worker)
141
+ return unless apply_confirmation_for_worker(worker)
142
142
  CapistranoMulticonfigParallel.configuration.task_confirmations.each_with_index do |task, _index|
143
143
  fake_result = proc { |sum| sum }
144
144
  task_confirmation = @job_to_condition[worker.job_id][task]
@@ -150,7 +150,7 @@ module CapistranoMulticonfigParallel
150
150
  end
151
151
 
152
152
  def wait_task_confirmations_worker(worker)
153
- return if !apply_confirmation_for_worker(worker) || !syncronized_confirmation?
153
+ return if !apply_confirmation_for_worker(worker) || !syncronized_confirmation?
154
154
  CapistranoMulticonfigParallel.configuration.task_confirmations.each_with_index do |task, _index|
155
155
  result = wait_condition_for_task(worker.job_id, task)
156
156
  confirm_task_approval(result, task, worker) if result.present?
@@ -149,7 +149,7 @@ module CapistranoMulticonfigParallel
149
149
  end
150
150
 
151
151
  def task_approval(message)
152
- job_conditions = @manager.job_to_condition[@job_id]
152
+ job_conditions = @manager.job_to_condition[@job_id]
153
153
  if job_conditions.present? && CapistranoMulticonfigParallel.configuration.task_confirmations.include?(message['task']) && message['action'] == 'invoke'
154
154
  task_confirmation = job_conditions[message['task']]
155
155
  task_confirmation[:status] = 'confirmed'
@@ -59,9 +59,8 @@ module CapistranoMulticonfigParallel
59
59
  end
60
60
  end
61
61
 
62
- def verify_array_of_strings(c, prop)
63
- value = c[prop]
64
- return unless value.present?
62
+ def verify_array_of_strings(value)
63
+ return true if value.blank?
65
64
  value.reject(&:blank?)
66
65
  raise ArgumentError, 'the array must contain only task names' if value.find { |row| !row.is_a?(String) }
67
66
  end
@@ -87,8 +86,7 @@ module CapistranoMulticonfigParallel
87
86
  end
88
87
 
89
88
  def check_boolean(c, prop)
90
- # return unless c[prop].present?
91
- raise ArgumentError, "the property `#{prop}` must be boolean" unless [true, false, 'true', 'false'].include?(c[prop].to_s.downcase)
89
+ raise ArgumentError, "the property `#{prop}` must be boolean" unless %w(true false).include?(c[prop].to_s.downcase)
92
90
  end
93
91
 
94
92
  def configuration_valid?(stages)
@@ -101,13 +99,9 @@ module CapistranoMulticonfigParallel
101
99
  c.send("#{prop}=", c[prop.to_sym]) if check_boolean(c, prop.to_sym)
102
100
  end
103
101
  %w(task_confirmations development_stages apply_stage_confirmation).each do |prop|
104
- c.send("#{prop}=", c[prop.to_sym]) if verify_array_of_strings(c, prop.to_sym)
102
+ c.send("#{prop}=", c[prop.to_sym]) if c[prop.to_sym].is_a?(Array) && verify_array_of_strings(c[prop.to_sym])
105
103
  end
106
- c.application_dependencies = c[:application_dependencies] if verify_application_dependencies(c[:application_dependencies])
107
- check_additional_config(c)
108
- end
109
-
110
- def check_additional_config(c)
104
+ c.application_dependencies = c[:application_dependencies] if c[:application_dependencies].is_a?(Array) && verify_application_dependencies(c[:application_dependencies])
111
105
  CapistranoMulticonfigParallel::CelluloidManager.debug_enabled = true if c[:multi_debug].to_s.downcase == 'true'
112
106
  end
113
107
  end
@@ -8,15 +8,25 @@ module CapistranoMulticonfigParallel
8
8
  include Celluloid
9
9
  include Celluloid::Logger
10
10
 
11
- attr_accessor :condition, :manager, :deps, :application, :stage, :name, :args, :argv, :jobs, :job_registered_condition, :default_stage, :original_argv
11
+ attr_accessor :stages, :top_level_tasks, :jobs, :branch_backup, :condition, :manager, :dependency_tracker, :application, :stage, :name, :args, :argv, :default_stage
12
12
 
13
- def initialize(cap_app, top_level_tasks, stages)
14
- @cap_app = cap_app
15
- @top_level_tasks = top_level_tasks
16
- @stages = stages
13
+ def initialize
14
+ @stages = fetch_stages
15
+ collect_command_line_tasks(CapistranoMulticonfigParallel.original_args)
17
16
  @jobs = []
18
17
  end
19
18
 
19
+ def fetch_stages
20
+ stages_root = 'config/deploy'
21
+ Dir["#{stages_root}/**/*.rb"].map do |file|
22
+ file.slice(stages_root.size + 1..-4).tr('/', ':')
23
+ end.tap do |paths|
24
+ paths.reject! do |path|
25
+ paths.any? { |another| another != path && another.start_with?(path + ':') }
26
+ end
27
+ end.sort
28
+ end
29
+
20
30
  def run
21
31
  options = {}
22
32
  if custom_command?
@@ -28,13 +38,12 @@ module CapistranoMulticonfigParallel
28
38
  process_jobs
29
39
  end
30
40
 
31
-
32
41
  def run_custom_command(options)
33
- stages = fetch_multi_stages
34
- return if stages.blank?
35
- stages = check_multi_stages(stages)
36
- stages.each do |stage|
37
- collect_jobs(options.merge('stage' => stage))
42
+ custom_stages = fetch_multi_stages
43
+ return if custom_stages.blank?
44
+ custom_stages = check_multi_stages(custom_stages)
45
+ custom_stages.each do |_stage|
46
+ collect_jobs(options.merge('stage' => custom_stages))
38
47
  end
39
48
  end
40
49
 
@@ -46,18 +55,18 @@ module CapistranoMulticonfigParallel
46
55
  end
47
56
  end
48
57
 
49
-
50
58
  def backup_the_branch
51
59
  return if custom_command? || @argv['BRANCH'].blank?
52
60
  @branch_backup = @argv['BRANCH'].to_s
53
61
  @argv['BRANCH'] = nil
54
62
  end
63
+
55
64
  def can_start?
56
- @top_level_tasks.size > 1 && (stages.include?(@top_level_tasks.first) || custom_command?) && ENV[CapistranoMulticonfigParallel::ENV_KEY_JOB_ID].blank?
65
+ @top_level_tasks.size > 1 && (@stages.include?(@top_level_tasks.first) || custom_command?) && ENV[CapistranoMulticonfigParallel::ENV_KEY_JOB_ID].blank?
57
66
  end
58
67
 
59
68
  def custom_command?
60
- @top_level_tasks.first == 'ensure_stage' && !stages.include?(@top_level_tasks.second) && !stages.include?(@top_level_tasks.first) && custom_commands.values.include?(@top_level_tasks.second)
69
+ @top_level_tasks.first == 'ensure_stage' && !@stages.include?(@top_level_tasks.second) && !@stages.include?(@top_level_tasks.first) && custom_commands.values.include?(@top_level_tasks.second)
61
70
  end
62
71
 
63
72
  def custom_commands
@@ -65,12 +74,8 @@ module CapistranoMulticonfigParallel
65
74
  CapistranoMulticonfigParallel::CUSTOM_COMMANDS[key]
66
75
  end
67
76
 
68
- def executes_deploy_stages?
69
- @name == custom_commands[:stages]
70
- end
71
-
72
77
  def multi_apps?
73
- @cap_app.multi_apps?
78
+ @stages.find { |stage| stage.include?(':') }.present?
74
79
  end
75
80
 
76
81
  def configuration
@@ -89,9 +94,19 @@ module CapistranoMulticonfigParallel
89
94
  @stage = custom_command? ? nil : @top_level_tasks.first.split(':').reverse[0]
90
95
  @stage = @stage.present? ? @stage : @default_stage
91
96
  @name, @args = parse_task_string(@top_level_tasks.second)
92
- @argv = @cap_app.handle_options.delete_if { |arg| arg == @stage || arg == @name || arg == @top_level_tasks.first }
93
- @argv = multi_fetch_argv(@argv)
94
- @original_argv = @argv.clone
97
+ end
98
+
99
+ def collect_command_line_tasks(args) # :nodoc:
100
+ @argv = {}
101
+ @top_level_tasks = []
102
+ args.each do |arg|
103
+ if arg =~ /^(\w+)=(.*)$/m
104
+ @argv[Regexp.last_match(1)] = Regexp.last_match(2)
105
+ else
106
+ @top_level_tasks << arg unless arg =~ /^-/
107
+ end
108
+ end
109
+ @top_level_tasks.push(Rake.application.default_task_name) if @top_level_tasks.blank?
95
110
  end
96
111
 
97
112
  def parse_task_string(string) # :nodoc:
@@ -130,7 +145,7 @@ module CapistranoMulticonfigParallel
130
145
  @manager = CapistranoMulticonfigParallel::CelluloidManager.new(Actor.current)
131
146
  end
132
147
 
133
- def collect_jobs(options = {}, &block)
148
+ def collect_jobs(options = {}, &_block)
134
149
  options = prepare_options(options)
135
150
  options = options.stringify_keys
136
151
  apps = @dependency_tracker.fetch_apps_needed_for_deployment(options['app'], options['action'])
@@ -138,7 +153,7 @@ module CapistranoMulticonfigParallel
138
153
  deploy_multiple_apps(apps, options)
139
154
  deploy_app(options)
140
155
  rescue => e
141
- raise [e, e.backtrace].inspect
156
+ CapistranoMulticonfigParallel::Base.log_message(e)
142
157
  end
143
158
 
144
159
  def process_jobs
@@ -152,9 +167,9 @@ module CapistranoMulticonfigParallel
152
167
 
153
168
  def tag_staging_exists? # check exists task from capistrano-gitflow
154
169
  check_giflow_tasks(
155
- CapistranoMulticonfigParallel::GITFLOW_TAG_STAGING_TASK,
156
- CapistranoMulticonfigParallel::GITFLOW_CALCULATE_TAG_TASK,
157
- CapistranoMulticonfigParallel::GITFLOW_VERIFY_UPTODATE_TASK
170
+ CapistranoMulticonfigParallel::GITFLOW_TAG_STAGING_TASK,
171
+ CapistranoMulticonfigParallel::GITFLOW_CALCULATE_TAG_TASK,
172
+ CapistranoMulticonfigParallel::GITFLOW_VERIFY_UPTODATE_TASK
158
173
  )
159
174
  rescue
160
175
  return false
@@ -165,10 +180,10 @@ module CapistranoMulticonfigParallel
165
180
  end
166
181
 
167
182
  def fetch_multi_stages
168
- stages = @argv['STAGES'].blank? ? '' : @argv['STAGES']
169
- stages = parse_inputted_value('value' => stages).split(',').compact if stages.present?
170
- stages = stages.present? ? stages : [@default_stage]
171
- stages
183
+ custom_stages = @argv['STAGES'].blank? ? '' : @argv['STAGES']
184
+ custom_stages = parse_inputted_value('value' => custom_stages).split(',').compact if custom_stages.present?
185
+ custom_stages = custom_stages.present? ? custom_stages : [@default_stage]
186
+ custom_stages
172
187
  end
173
188
 
174
189
  def wants_deploy_production?
@@ -176,11 +191,11 @@ module CapistranoMulticonfigParallel
176
191
  end
177
192
 
178
193
  def can_tag_staging?
179
- using_git? && wants_deploy_production? && tag_staging_exists? && fetch_multi_stages.include?('staging')
194
+ wants_deploy_production? && tag_staging_exists? && fetch_multi_stages.include?('staging')
180
195
  end
181
196
 
182
- def check_multi_stages(stages)
183
- can_tag_staging? ? stages.reject { |u| u == 'production' } : stages
197
+ def check_multi_stages(custom_stages)
198
+ can_tag_staging? ? custom_stages.reject { |u| u == 'production' } : custom_stages
184
199
  end
185
200
 
186
201
  def deploy_app(options = {})
@@ -206,8 +221,7 @@ module CapistranoMulticonfigParallel
206
221
  @jobs.map { |job| job['env'] }
207
222
  end
208
223
 
209
-
210
- private
224
+ private
211
225
 
212
226
  def call_task_deploy_app(options = {})
213
227
  options = options.stringify_keys
@@ -290,10 +304,6 @@ module CapistranoMulticonfigParallel
290
304
  end
291
305
  end
292
306
 
293
- def using_git?
294
- fetch(:scm, :git).to_sym == :git
295
- end
296
-
297
307
  def fetch_app_additional_env_options
298
308
  options = {}
299
309
  return options if fetch(:app_additional_env_options).blank?
@@ -28,7 +28,7 @@ module CapistranoMulticonfigParallel
28
28
  applications
29
29
  end
30
30
 
31
- private
31
+ private
32
32
 
33
33
  def application_dependencies
34
34
  deps = CapistranoMulticonfigParallel.configuration.application_dependencies
@@ -7,7 +7,7 @@ module CapistranoMulticonfigParallel
7
7
  # module used for generating the version
8
8
  module VERSION
9
9
  MAJOR = 0
10
- MINOR = 14
10
+ MINOR = 15
11
11
  TINY = 0
12
12
  PRE = nil
13
13
 
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: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-24 00:00:00.000000000 Z
11
+ date: 2015-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid-pmap