capistrano-multiproject 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "capistrano-multiproject"
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
  s.authors = ["Olek Poplavsky"]
7
7
  s.email = ["olek@woodenbits.com"]
8
8
  s.homepage = "https://github.com/woodenbits/capistrano-multiproject"
@@ -27,6 +27,9 @@ It is not quite enough if you have multiple projects to deploy (SOA would be one
27
27
  Gemfile
28
28
  lib/capistrano/multiproject/configurations.rb
29
29
  lib/capistrano/multiproject/ensure.rb
30
+ lib/capistrano/multiproject/filter_roles.rb
31
+ lib/capistrano/multiproject/any_server_role.rb
32
+ lib/capistrano/multiproject/task_list.rb
30
33
  lib/capistrano/multiproject.rb
31
34
  Rakefile
32
35
  README.md
@@ -0,0 +1,14 @@
1
+ Capistrano::Configuration.instance.load do
2
+ namespace :multiproject do
3
+ desc "[internal] Generate arteficial any_server role that enumerates all known servers"
4
+ task :any_server_role do
5
+ project_roles_sym = project_roles.map(&:to_sym)
6
+ servers = roles.values.map(&:servers).flatten.sort.uniq.map(&:to_s)
7
+ top.role :any_server, *servers, :no_release => true
8
+ end
9
+ end
10
+
11
+ on :start, 'multiproject:any_server_role', :except => (projects + stages + %w(?))
12
+ end
13
+
14
+
@@ -0,0 +1,16 @@
1
+ Capistrano::Configuration.instance.load do
2
+ namespace :multiproject do
3
+ desc "[internal] Filter roles to only those that are used by the current project"
4
+ task :filter_roles do
5
+ project_roles_sym = project_roles.map(&:to_sym)
6
+ roles.select! { |k,v| project_roles_sym.include?(k) }
7
+ logger.info "Filtered roles down to '#{roles.keys.sort.join(', ')}'"
8
+ if roles.empty? && project_roles == [project]
9
+ abort "Define servers of role '#{project}' in stage '#{stage}' configuration, or specify project roles in project recipe (e.g. 'set :project_roles, [:foo, :bar]')"
10
+ end
11
+ end
12
+ end
13
+
14
+ on :start, 'multiproject:filter_roles', :except => (projects + stages + %w(?))
15
+ end
16
+
@@ -0,0 +1,45 @@
1
+ Capistrano::Configuration.instance.load do
2
+ # a capistrano task to list other tasks, filtering them based on context
3
+ desc "Contextual task list"
4
+ task '?' do
5
+ tasks = top.task_list(:all)
6
+
7
+ hidden_tasks = fetch(:hidden_tasks, [])
8
+ hidden_tasks << '?'
9
+
10
+ set(:verbose, false) unless exists?(:verbose)
11
+
12
+ unless verbose
13
+ tasks =
14
+ if exists?(:project) && exists?(:stage)
15
+ tasks.reject do |t|
16
+ t.description.empty? ||
17
+ t.description =~ /^\[internal\]/ ||
18
+ t.options[:multiproject] ||
19
+ hidden_tasks.include?(t.fully_qualified_name)
20
+ end
21
+ elsif exists?(:project) && !exists?(:stage)
22
+ tasks.select { |t| t.options[:multiproject] && t.options[:kind] == :stage }
23
+ elsif exists?(:stage) && !exists?(:project)
24
+ tasks.select { |t| t.options[:multiproject] && t.options[:kind] == :project }
25
+ else
26
+ tasks.select { |t| t.options[:multiproject] && t.options[:kind] == :stage }
27
+ end
28
+ end
29
+
30
+ longest = tasks.map { |task| task.fully_qualified_name.length }.max
31
+ tasks.sort! { |a,b| a.fully_qualified_name <=> b.fully_qualified_name }
32
+
33
+ max_length = 76
34
+ tasks.each do |task|
35
+ description = task.desc
36
+ description ||= ''
37
+ description = description.gsub(/\n/,' ')
38
+ description = description.squeeze(' ')
39
+ description = description.strip
40
+ description = description[0..max_length] + "..." if description.size > max_length
41
+ puts "%-#{longest}s # %s" % [task.fully_qualified_name, description]
42
+ end
43
+ puts "\n"
44
+ end
45
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-multiproject
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Olek Poplavsky
@@ -49,6 +49,9 @@ files:
49
49
  - Gemfile
50
50
  - lib/capistrano/multiproject/configurations.rb
51
51
  - lib/capistrano/multiproject/ensure.rb
52
+ - lib/capistrano/multiproject/filter_roles.rb
53
+ - lib/capistrano/multiproject/any_server_role.rb
54
+ - lib/capistrano/multiproject/task_list.rb
52
55
  - lib/capistrano/multiproject.rb
53
56
  - Rakefile
54
57
  - README.md