capistrano-multiproject 0.0.1

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.
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ source "http://rubygems.org"
data/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # capistrano-multiproject
2
+
3
+ ## Description
4
+
5
+ Capistrano extension that allows to deploy multiple projects from one location.
6
+
7
+ Everybody knows/uses original multistage extension written by Jamis Buck. It works great while you have only one project/app to deploy.
8
+ It is not quite enough if you have multiple projects to deploy (SOA would be one big use case here). Capistrano-multiproject solves this problem by allowing splitting up deploy.rb into multiple project-specific recipe files.
9
+
10
+ ## Usage
11
+
12
+ Install gem
13
+
14
+ $ gem install capistrano-multiproject
15
+
16
+
17
+ Add to `Capfile`
18
+
19
+ require 'capistrano/multiproject'
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "capistrano-multiproject"
5
+ s.version = "0.0.1"
6
+ s.authors = ["Olek Poplavsky"]
7
+ s.email = ["olek@woodenbits.com"]
8
+ s.homepage = "https://github.com/woodenbits/capistrano-multiproject"
9
+ s.date = '2012-01-26'
10
+
11
+ s.summary = 'Capistrano extension that allows to deploy multiple projects from one location'
12
+ s.description = %q{
13
+ Everybody knows/uses original multistage extension written by Jamis Buck. It works great while you have only one project/app to deploy.
14
+ It is not quite enough if you have multiple projects to deploy (SOA would be one big use case here). Capistrano-multiproject solves this problem by allowing splitting up deploy.rb into multiple project-specific recipe files.
15
+ }
16
+ s.require_paths = %w[lib]
17
+
18
+ s.rdoc_options = ["--charset=UTF-8"]
19
+ s.extra_rdoc_files = %w[README.md]
20
+
21
+ ## List your runtime dependencies here. Runtime dependencies are those
22
+ ## that are needed for an end user to actually USE your code.
23
+ s.add_dependency('capistrano', "~> 2.9.0")
24
+
25
+ s.files = %w[
26
+ capistrano-multiproject.gemspec
27
+ Gemfile
28
+ lib/capistrano/multiproject/configurations.rb
29
+ lib/capistrano/multiproject/ensure.rb
30
+ lib/capistrano/multiproject.rb
31
+ Rakefile
32
+ README.md
33
+ ]
34
+ end
35
+
@@ -0,0 +1,5 @@
1
+ require 'capistrano/multiproject/configurations'
2
+ require 'capistrano/multiproject/ensure'
3
+ require 'capistrano/multiproject/any_server_role'
4
+ require 'capistrano/multiproject/filter_roles'
5
+ require 'capistrano/multiproject/task_list'
@@ -0,0 +1,55 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ def _cset(name, *args, &block)
4
+ unless exists?(name)
5
+ set(name, *args, &block)
6
+ end
7
+ end
8
+
9
+ set(:application) { project }
10
+
11
+ _cset(:project_roles) { [project] }
12
+
13
+ # configurations root directory
14
+ config_root = File.expand_path(fetch(:config_root, "config/deploy"))
15
+
16
+ projects_dir = File.join(config_root, 'projects')
17
+ stages_dir = File.join(config_root, 'stages')
18
+
19
+ project_files = Dir["#{projects_dir}/*.rb"]
20
+ stage_files = Dir["#{stages_dir}/*.rb"]
21
+
22
+ hash_creating_block = lambda do |paths|
23
+ paths.inject({}) do |memo, path|
24
+ memo.merge path.sub(/^.*\/(.+)\.rb$/, '\1') => path
25
+ end
26
+ end
27
+
28
+ projects_hash = hash_creating_block.call(project_files)
29
+ stages_hash = hash_creating_block.call(stage_files)
30
+
31
+ # ensure that configuration segments don't override any method, task or namespace
32
+ overriding_tasks = (projects_hash.keys + stages_hash.keys) & all_methods
33
+ unless overriding_tasks.empty?
34
+ abort "Config task(s) #{overriding_tasks.inspect} override existing method/task/namespace"
35
+ end
36
+
37
+ task_creating_block = lambda do |kind, task_name, task_file|
38
+ desc "Load #{kind} #{task_name} configuration"
39
+ task(task_name, :multiproject => true, :kind => kind) do
40
+ top.set(kind, task_name)
41
+ top.load(:file => task_file)
42
+ end
43
+ end
44
+
45
+ projects_hash.each do |task_name, task_file|
46
+ task_creating_block.call(:project, task_name, task_file)
47
+ end
48
+
49
+ stages_hash.each do |task_name, task_file|
50
+ task_creating_block.call(:stage, task_name, task_file)
51
+ end
52
+
53
+ set(:projects, projects_hash.keys)
54
+ set(:stages, stages_hash.keys)
55
+ end
@@ -0,0 +1,22 @@
1
+ Capistrano::Configuration.instance.load do
2
+ namespace :multiproject do
3
+ desc "[internal] Ensure that project/stage has been selected"
4
+ task :ensure do
5
+ unless exists?(:stage)
6
+ warn "No stage configuration specified. Please specify one of:"
7
+ stages.each { |name| puts " * #{name}" }
8
+ warn "(e.g. 'cap #{stages.first} #{ARGV.last}')"
9
+ abort
10
+ end
11
+
12
+ unless exists?(:project)
13
+ warn "No project configuration specified. Please specify one of:"
14
+ projects.each { |name| puts " * #{name}" }
15
+ warn "(e.g. 'cap #{stage} #{projects.first} #{ARGV.last}')"
16
+ abort
17
+ end
18
+ end
19
+ end
20
+
21
+ on :start, 'multiproject:ensure', :except => (projects + stages + %w(?))
22
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-multiproject
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Olek Poplavsky
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-01-26 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: capistrano
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 43
29
+ segments:
30
+ - 2
31
+ - 9
32
+ - 0
33
+ version: 2.9.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: "\n\
37
+ Everybody knows/uses original multistage extension written by Jamis Buck. It works great while you have only one project/app to deploy.\n\
38
+ It is not quite enough if you have multiple projects to deploy (SOA would be one big use case here). Capistrano-multiproject solves this problem by allowing splitting up deploy.rb into multiple project-specific recipe files.\n "
39
+ email:
40
+ - olek@woodenbits.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files:
46
+ - README.md
47
+ files:
48
+ - capistrano-multiproject.gemspec
49
+ - Gemfile
50
+ - lib/capistrano/multiproject/configurations.rb
51
+ - lib/capistrano/multiproject/ensure.rb
52
+ - lib/capistrano/multiproject.rb
53
+ - Rakefile
54
+ - README.md
55
+ homepage: https://github.com/woodenbits/capistrano-multiproject
56
+ licenses: []
57
+
58
+ post_install_message:
59
+ rdoc_options:
60
+ - --charset=UTF-8
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ hash: 3
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.13
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Capistrano extension that allows to deploy multiple projects from one location
88
+ test_files: []
89
+