chicken_soup 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/chicken_soup.gemspec +1 -0
- data/lib/chicken_soup/capabilities.rb +16 -0
- data/lib/chicken_soup/capabilities/bundler.rb +14 -10
- data/lib/chicken_soup/capabilities/checks.rb +19 -0
- data/lib/chicken_soup/capabilities/defaults.rb +26 -0
- data/lib/chicken_soup/capabilities/git.rb +5 -37
- data/lib/chicken_soup/capabilities/heroku.rb +4 -4
- data/lib/chicken_soup/capabilities/rvm.rb +4 -4
- data/lib/chicken_soup/capabilities/svn.rb +34 -0
- data/lib/chicken_soup/capabilities/unix.rb +7 -9
- data/lib/chicken_soup/deploy.rb +3 -0
- data/lib/chicken_soup/environment.rb +1 -9
- data/lib/chicken_soup/environment/checks.rb +10 -28
- data/lib/chicken_soup/environment/defaults.rb +7 -28
- data/lib/chicken_soup/notifiers.rb +14 -0
- data/lib/chicken_soup/notifiers/checks.rb +19 -0
- data/lib/chicken_soup/notifiers/defaults.rb +24 -0
- data/lib/chicken_soup/notifiers/email.rb +109 -0
- data/lib/chicken_soup/notifiers/git.rb +23 -0
- data/lib/chicken_soup/{capabilities → notifiers}/hoptoad.rb +1 -1
- data/lib/chicken_soup/version.rb +1 -1
- data/lib/chicken_stock.rb +2 -0
- metadata +33 -17
data/chicken_soup.gemspec
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
######################################################################
|
2
|
+
# CAPABILITIES SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/defaults'
|
6
|
+
require "chicken_soup/capabilities/checks"
|
7
|
+
|
8
|
+
desc "[internal] This task is only here because `require` cannot be used within a `namespace`"
|
9
|
+
task :load_capabilities do
|
10
|
+
require "chicken_soup/capabilities/#{deployment_type}"
|
11
|
+
|
12
|
+
fetch(:capabilities).each do |capability|
|
13
|
+
require "chicken_soup/capabilities/#{capability}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -2,9 +2,6 @@
|
|
2
2
|
# BUNDLER TASKS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
_cset :gem_packager_version, `gem list bundler`.match(/\((.*)\)/)[1]
|
6
|
-
set :rake, 'bundle exec rake'
|
7
|
-
|
8
5
|
before 'gems:install', 'bundler:install'
|
9
6
|
|
10
7
|
namespace :gems do
|
@@ -24,19 +21,25 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
24
21
|
namespace :bundler do
|
25
22
|
desc "Install Bundler"
|
26
23
|
task :install do
|
27
|
-
|
24
|
+
bundler_install_command = "gem install bundler --version #{gem_packager_version} --no-ri --no-rdoc && gem cleanup bundler"
|
25
|
+
|
26
|
+
if fetch(:capabilities).include? :rvm
|
27
|
+
run_with_rvm "#{ruby_version}@global", bundler_install_command
|
28
|
+
else
|
29
|
+
run bundler_install_command
|
30
|
+
end
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
31
34
|
|
32
35
|
######################################################################
|
33
|
-
#
|
36
|
+
# BUNDLER CHECKS #
|
34
37
|
######################################################################
|
35
38
|
Capistrano::Configuration.instance(:must_exist).load do
|
36
|
-
namespace :
|
39
|
+
namespace :capabilities do
|
37
40
|
namespace :check do
|
38
41
|
desc <<-DESC
|
39
|
-
[internal] Checks to see if all necessary Bundler
|
42
|
+
[internal] Checks to see if all necessary Bundler capabilities variables have been set up.
|
40
43
|
DESC
|
41
44
|
task :bundler do
|
42
45
|
required_variables = [
|
@@ -50,14 +53,15 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
50
53
|
end
|
51
54
|
|
52
55
|
######################################################################
|
53
|
-
#
|
56
|
+
# BUNDLER DEFAULTS #
|
54
57
|
######################################################################
|
55
58
|
Capistrano::Configuration.instance(:must_exist).load do
|
56
|
-
namespace :
|
59
|
+
namespace :capabilities do
|
57
60
|
namespace :defaults do
|
58
61
|
desc "[internal] Sets intelligent defaults for Bundler deployments."
|
59
62
|
task :bundler do
|
60
|
-
_cset :
|
63
|
+
_cset :gem_packager_version, `gem list bundler`.match(/\((.*)\)/)[1]
|
64
|
+
set :rake, 'bundle exec rake'
|
61
65
|
end
|
62
66
|
end
|
63
67
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
######################################################################
|
2
|
+
# CAPABILITIES CHECK #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
after 'environment:check', 'capabilities:check'
|
6
|
+
|
7
|
+
namespace :capabilities do
|
8
|
+
namespace :check do
|
9
|
+
desc "[internal] Runs checks for all of the capabilities listed."
|
10
|
+
task :default do
|
11
|
+
if exists?(:capabilities)
|
12
|
+
fetch(:capabilities).each do |capability|
|
13
|
+
top.capabilities.check.send(capability.to_s) if top.capabilities.check.respond_to?(capability.to_sym)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DEFAULT CAPABILITIES SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
after 'environment:defaults', 'capabilities:defaults'
|
6
|
+
before 'capabilities:defaults', 'load_capabilities'
|
7
|
+
|
8
|
+
namespace :capabilities do
|
9
|
+
namespace :defaults do
|
10
|
+
desc <<-DESC
|
11
|
+
[internal] Installs the entire capabilities for the given deployment type.
|
12
|
+
|
13
|
+
Most of these values can be overridden in each application's deploy.rb file.
|
14
|
+
DESC
|
15
|
+
task :default do
|
16
|
+
defaults.send(deployment_type.to_s)
|
17
|
+
|
18
|
+
if exists?(:capabilities)
|
19
|
+
fetch(:capabilities).each do |capability|
|
20
|
+
capabilities.defaults.send(capability.to_s) if capabilities.defaults.respond_to?(capability.to_sym)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -2,52 +2,20 @@
|
|
2
2
|
# GIT TASKS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
|
6
|
-
|
7
|
-
namespace :deploy do
|
5
|
+
namespace :vc do
|
8
6
|
desc <<-DESC
|
9
|
-
Tags the deployed Git commit with the timestamp and environment it was deployed to.
|
10
|
-
|
11
|
-
The tag is auto-pushed to whatever `remote` is set to as well as `origin`.
|
12
|
-
Tag push happens in the background so it won't slow down deployment.
|
13
7
|
DESC
|
14
|
-
task :
|
15
|
-
|
16
|
-
tag_name = "deployed_to_#{rails_env}_#{timestamp_string_without_seconds}"
|
17
|
-
|
18
|
-
`git tag -a -m "Tagging deploy to #{rails_env} at #{timestamp_string_without_seconds}" #{tag_name} #{branch}`
|
19
|
-
`git push #{remote} --tags > /dev/null 2>&1 &`
|
20
|
-
`git push origin --tags > /dev/null 2>&1 &`
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
######################################################################
|
26
|
-
# GIT ENVIRONMENT CHECK #
|
27
|
-
######################################################################
|
28
|
-
Capistrano::Configuration.instance(:must_exist).load do
|
29
|
-
namespace :environment do
|
30
|
-
namespace :defaults do
|
31
|
-
desc "[internal] Sets intelligent version control defaults for deployments"
|
32
|
-
task :git do
|
33
|
-
_cset :github_account, ENV["USER"]
|
34
|
-
_cset :deploy_via, :remote_cache
|
35
|
-
|
36
|
-
set :scm, :git
|
37
|
-
set(:repository) {"git@github.com:#{github_account}/#{application}.git"}
|
38
|
-
set(:branch) { `git branch`.match(/\* (\S+)\s/m)[1] || raise("Couldn't determine current branch") }
|
39
|
-
set(:remote) { `git remote`.match(/(\S+)\s/m)[1] || raise("Couldn't determine default remote repository") }
|
40
|
-
ssh_options[:forward_agent] = true
|
41
|
-
end
|
8
|
+
task :log do
|
9
|
+
set :vc_log, `git log #{previous_revision}..#{current_revision} --pretty=format:%ai:::%an:::%s`
|
42
10
|
end
|
43
11
|
end
|
44
12
|
end
|
45
13
|
|
46
14
|
######################################################################
|
47
|
-
#
|
15
|
+
# GIT DEFAULTS #
|
48
16
|
######################################################################
|
49
17
|
Capistrano::Configuration.instance(:must_exist).load do
|
50
|
-
namespace :
|
18
|
+
namespace :capabilities do
|
51
19
|
namespace :defaults do
|
52
20
|
desc "[internal] Sets intelligent version control defaults for deployments"
|
53
21
|
task :git do
|
@@ -246,10 +246,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
246
246
|
end
|
247
247
|
|
248
248
|
######################################################################
|
249
|
-
#
|
249
|
+
# HEROKU CHECKS #
|
250
250
|
######################################################################
|
251
251
|
Capistrano::Configuration.instance(:must_exist).load do
|
252
|
-
namespace :
|
252
|
+
namespace :capabilities do
|
253
253
|
namespace :check do
|
254
254
|
desc <<-DESC
|
255
255
|
[internal] Checks to see if all necessary Heroku environment variables have been set up.
|
@@ -269,10 +269,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
269
269
|
end
|
270
270
|
|
271
271
|
######################################################################
|
272
|
-
#
|
272
|
+
# HEROKU DEFAULTS #
|
273
273
|
######################################################################
|
274
274
|
Capistrano::Configuration.instance(:must_exist).load do
|
275
|
-
namespace :
|
275
|
+
namespace :capabilities do
|
276
276
|
namespace :defaults do
|
277
277
|
desc "[internal] Sets intelligent defaults for Heroku deployments"
|
278
278
|
task :heroku do
|
@@ -6,10 +6,10 @@ def run_with_rvm(ruby_env_string, command)
|
|
6
6
|
end
|
7
7
|
|
8
8
|
######################################################################
|
9
|
-
#
|
9
|
+
# RVM CHECKS #
|
10
10
|
######################################################################
|
11
11
|
Capistrano::Configuration.instance(:must_exist).load do
|
12
|
-
namespace :
|
12
|
+
namespace :capabilities do
|
13
13
|
namespace :check do
|
14
14
|
desc <<-DESC
|
15
15
|
[internal] Checks to see if all necessary RVM variables have been set up.
|
@@ -28,10 +28,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
######################################################################
|
31
|
-
#
|
31
|
+
# RVM DEFAULTS #
|
32
32
|
######################################################################
|
33
33
|
Capistrano::Configuration.instance(:must_exist).load do
|
34
|
-
namespace :
|
34
|
+
namespace :capabilities do
|
35
35
|
namespace :defaults do
|
36
36
|
_cset :ruby_version, ENV["rvm_ruby_string"]
|
37
37
|
_cset :ruby_gemset, ENV["GEM_HOME"].split('@')[1]
|
@@ -0,0 +1,34 @@
|
|
1
|
+
######################################################################
|
2
|
+
# SUBVERSION TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :vc do
|
6
|
+
desc <<-DESC
|
7
|
+
DESC
|
8
|
+
task :log do
|
9
|
+
set :vc_log, `svn log -r #{previous_revision.to_i + 1}:#{current_revision}`
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
######################################################################
|
15
|
+
# SUBVERSION DEFAULTS #
|
16
|
+
######################################################################
|
17
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
18
|
+
namespace :capabilities do
|
19
|
+
namespace :defaults do
|
20
|
+
desc "[internal] Sets intelligent version control defaults for deployments"
|
21
|
+
task :svn do
|
22
|
+
set :scm, :subversion
|
23
|
+
|
24
|
+
# _cset :github_account, ENV["USER"]
|
25
|
+
# _cset :deploy_via, :remote_cache
|
26
|
+
# _cset(:repository) {"git@github.com:#{github_account}/#{application}.git"}
|
27
|
+
# _cset(:branch) { `git branch`.match(/\* (\S+)\s/m)[1] || raise("Couldn't determine current branch") }
|
28
|
+
# _cset(:remote) { `git remote`.match(/(\S+)\s/m)[1] || raise("Couldn't determine default remote repository") }
|
29
|
+
|
30
|
+
# ssh_options[:forward_agent] = true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
######################################################################
|
2
|
-
#
|
2
|
+
# UNIX TASKS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
5
|
before "deploy:config:symlink", "deploy:config:create"
|
@@ -57,8 +57,6 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
57
57
|
[internal] Switches Capistrano to use the root user for all subsequent SSH actions.
|
58
58
|
|
59
59
|
It will prompt for the root user's password the first time it's needed.
|
60
|
-
(If the Kompanee Bash environment has been installed, you will no longer
|
61
|
-
be able to log in as root.)
|
62
60
|
DESC
|
63
61
|
task :use do
|
64
62
|
set_user_to("root")
|
@@ -67,7 +65,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
67
65
|
|
68
66
|
namespace :manager do
|
69
67
|
desc <<-DESC
|
70
|
-
Switches Capistrano to use the manager user for all subsequent SSH actions.
|
68
|
+
[internal] Switches Capistrano to use the manager user for all subsequent SSH actions.
|
71
69
|
|
72
70
|
It will prompt for the manager user's password the first time it's needed.
|
73
71
|
(If public key authentication is already installed, you will not be prompted.)
|
@@ -79,7 +77,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
79
77
|
|
80
78
|
namespace :deploy do
|
81
79
|
desc <<-DESC
|
82
|
-
Switches Capistrano to use the deployment user for all subsequent SSH actions.
|
80
|
+
[internal] Switches Capistrano to use the deployment user for all subsequent SSH actions.
|
83
81
|
|
84
82
|
It will prompt for the deployment user's password the first time it's needed.
|
85
83
|
(If public key authentication is already installed, you will not be prompted.)
|
@@ -93,10 +91,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
93
91
|
end
|
94
92
|
|
95
93
|
######################################################################
|
96
|
-
#
|
94
|
+
# UNIX CHECKS #
|
97
95
|
######################################################################
|
98
96
|
Capistrano::Configuration.instance(:must_exist).load do
|
99
|
-
namespace :
|
97
|
+
namespace :capabilities do
|
100
98
|
namespace :check do
|
101
99
|
desc <<-DESC
|
102
100
|
[internal] Checks to see if all necessary unix environment variables have been set up.
|
@@ -127,10 +125,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
127
125
|
end
|
128
126
|
|
129
127
|
######################################################################
|
130
|
-
#
|
128
|
+
# UNIX SERVER DEFAULTS #
|
131
129
|
######################################################################
|
132
130
|
Capistrano::Configuration.instance(:must_exist).load do
|
133
|
-
namespace :
|
131
|
+
namespace :capabilities do
|
134
132
|
namespace :defaults do
|
135
133
|
desc "[internal] Sets intelligent defaults for unix server deployments."
|
136
134
|
task :unix do
|
data/lib/chicken_soup/deploy.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DEPLOYMENT TASKS #
|
3
|
+
######################################################################
|
1
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
2
5
|
before "deploy", "deploy:web:disable"
|
3
6
|
after "deploy", "deploy:web:enable"
|
@@ -2,14 +2,6 @@
|
|
2
2
|
# ENVIRONMENT SETUP #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
require 'chicken_soup/environment/checks'
|
6
5
|
require 'chicken_soup/environment/defaults'
|
7
|
-
|
8
|
-
desc "[internal] This task is only here because `require` cannot be used within a `namespace`"
|
9
|
-
task :load_capabilities do
|
10
|
-
require "chicken_soup/capabilities/unix"
|
11
|
-
capabilities.each do |capability|
|
12
|
-
require "chicken_soup/capabilities/#{capability}"
|
13
|
-
end
|
14
|
-
end
|
6
|
+
require 'chicken_soup/environment/checks'
|
15
7
|
end
|
@@ -2,38 +2,20 @@
|
|
2
2
|
# ENVIRONMENT CHECKS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
on
|
6
|
-
|
7
|
-
before 'environment:check', 'environment:check:common'
|
5
|
+
on :start, 'environment:check', :except => ['staging', 'production']
|
8
6
|
|
9
7
|
namespace :environment do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
abort "You need to specify a deployment type in your application's 'deploy.rb' file. ie 'set :deployment_type, :heroku'" unless exists?(:deployment_type)
|
15
|
-
|
16
|
-
required_variables = [
|
17
|
-
:application,
|
18
|
-
:application_short
|
19
|
-
]
|
20
|
-
|
21
|
-
verify_variables(required_variables)
|
22
|
-
end
|
8
|
+
desc "[internal] Checks for environment variables shared among all deployment types."
|
9
|
+
task :check do
|
10
|
+
abort "You need to specify staging or production when you deploy. ie 'cap staging db:backup'" unless exists?(:rails_env)
|
11
|
+
abort "You need to specify a deployment type in your application's 'deploy.rb' file. ie 'set :deployment_type, :heroku'" unless exists?(:deployment_type)
|
23
12
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
environment.check.send(capability.to_s) if environment.check.respond_to?(capability.to_sym)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
13
|
+
required_variables = [
|
14
|
+
:application,
|
15
|
+
:application_short
|
16
|
+
]
|
32
17
|
|
33
|
-
|
34
|
-
task :default do
|
35
|
-
environment.check.capabilities
|
36
|
-
end
|
18
|
+
verify_variables(required_variables)
|
37
19
|
end
|
38
20
|
end
|
39
21
|
end
|
@@ -1,53 +1,32 @@
|
|
1
1
|
######################################################################
|
2
|
-
#
|
2
|
+
# ENVIRONMENT DEFAULTS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
-
after 'production',
|
6
|
-
after 'staging',
|
7
|
-
|
8
|
-
before 'environment:defaults', 'load_capabilities'
|
5
|
+
after 'production', 'environment:defaults:production', 'environment:defaults'
|
6
|
+
after 'staging', 'environment:defaults:staging', 'environment:defaults'
|
9
7
|
|
10
8
|
namespace :environment do
|
11
9
|
namespace :defaults do
|
12
10
|
desc "[internal] Used to set up the intelligent staging defaults we like for our projects"
|
13
11
|
task :staging do
|
14
|
-
set :rails_env,
|
12
|
+
set :rails_env, 'staging'
|
15
13
|
end
|
16
14
|
|
17
15
|
desc "[internal] Used to set up the intelligent production defaults we like for our projects"
|
18
16
|
task :production do
|
19
|
-
set :rails_env,
|
17
|
+
set :rails_env, 'production'
|
20
18
|
end
|
21
19
|
|
22
20
|
desc "[internal] Sets intelligent common defaults for deployments"
|
23
|
-
task :
|
21
|
+
task :default do
|
24
22
|
_cset :use_sudo, false
|
25
23
|
_cset :default_shell, false
|
26
24
|
|
27
25
|
_cset :copy_compression, :bz2
|
28
26
|
|
27
|
+
_cset(:application_short) {application}
|
29
28
|
_cset(:application_underscored) {application.gsub(/-/, "_")}
|
30
29
|
end
|
31
|
-
|
32
|
-
desc "[internal] Sets defaults for all of the capabilities listed."
|
33
|
-
task :capabilities do
|
34
|
-
if exists?(:capabilities)
|
35
|
-
fetch(:capabilities).each do |capability|
|
36
|
-
environment.defaults.send(capability.to_s) if environment.defaults.respond_to?(capability.to_sym)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
desc <<-DESC
|
42
|
-
[internal] Installs the entire environment for the given deployment type.
|
43
|
-
|
44
|
-
Most of these values can be overridden in each application's deploy.rb file.
|
45
|
-
DESC
|
46
|
-
task :default do
|
47
|
-
defaults.common
|
48
|
-
defaults.send(deployment_type.to_s)
|
49
|
-
defaults.capabilities
|
50
|
-
end
|
51
30
|
end
|
52
31
|
end
|
53
32
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
######################################################################
|
2
|
+
# NOTIFIERS SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/notifiers/defaults'
|
6
|
+
require "chicken_soup/notifiers/checks"
|
7
|
+
|
8
|
+
desc "[internal] This task is only here because `require` cannot be used within a `namespace`"
|
9
|
+
task :load_notifiers do
|
10
|
+
fetch(:notifiers).each do |notifier|
|
11
|
+
require "chicken_soup/notifiers/#{notifier}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
######################################################################
|
2
|
+
# NOTIFIERS CHECK #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
after 'environment:check', 'notifiers:check'
|
6
|
+
|
7
|
+
namespace :notifiers do
|
8
|
+
namespace :check do
|
9
|
+
desc "[internal] Runs checks for all of the notifiers listed."
|
10
|
+
task :default do
|
11
|
+
if exists?(:notifiers)
|
12
|
+
fetch(:notifiers).each do |notifier|
|
13
|
+
top.notifiers.check.send(notifier.to_s) if top.notifiers.check.respond_to?(notifier.to_sym)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DEFAULT NOTIFIERS SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
after 'environment:defaults', 'notifiers:defaults'
|
6
|
+
before 'notifiers:defaults', 'load_notifiers'
|
7
|
+
|
8
|
+
namespace :notifiers do
|
9
|
+
namespace :defaults do
|
10
|
+
desc <<-DESC
|
11
|
+
[internal] Installs the entire notifiers for the given deployment type.
|
12
|
+
|
13
|
+
Most of these values can be overridden in each application's deploy.rb file.
|
14
|
+
DESC
|
15
|
+
task :default do
|
16
|
+
if exists?(:notifiers)
|
17
|
+
fetch(:notifiers).each do |notifier|
|
18
|
+
notifiers.defaults.send(notifier.to_s) if notifiers.defaults.respond_to?(notifier.to_sym)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
######################################################################
|
2
|
+
# EMAIL NOTIFIER TASKS #
|
3
|
+
######################################################################
|
4
|
+
require 'mail'
|
5
|
+
require 'erb'
|
6
|
+
require 'chicken_soup/notifiers/email_notifier'
|
7
|
+
|
8
|
+
Capistrano::Configuration.instance(:must_exist).load do |cap|
|
9
|
+
before 'notifiers:defaults:email', 'vc:log'
|
10
|
+
after 'deploy:cleanup', 'notify:by_email'
|
11
|
+
|
12
|
+
namespace :notify do
|
13
|
+
desc <<-DESC
|
14
|
+
[internal] Sends a notification via email once a deployment is complete.
|
15
|
+
DESC
|
16
|
+
task :by_email do
|
17
|
+
if !cap[:email_notifier_client_recipients].empty?
|
18
|
+
Mail.deliver do
|
19
|
+
to cap[:email_notifier_client_recipients]
|
20
|
+
from cap[:email_notifier_sender]
|
21
|
+
subject cap[:email_notifier_subject]
|
22
|
+
body cap[:email_notifier_client_body]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
if !cap[:email_notifier_internal_recipients].empty?
|
27
|
+
Mail.deliver do
|
28
|
+
to cap[:email_notifier_internal_recipients]
|
29
|
+
from cap[:email_notifier_sender]
|
30
|
+
subject cap[:email_notifier_subject]
|
31
|
+
body cap[:email_notifier_internal_body]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
######################################################################
|
39
|
+
# EMAIL NOTIFIER CHECKS #
|
40
|
+
######################################################################
|
41
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
42
|
+
namespace :notifiers do
|
43
|
+
namespace :check do
|
44
|
+
desc <<-DESC
|
45
|
+
[internal] Checks to see if all necessary email notification environment variables have been set up.
|
46
|
+
DESC
|
47
|
+
task :email do
|
48
|
+
required_variables = [
|
49
|
+
:email_notifier_client_recipients,
|
50
|
+
:email_notifier_internal_recipients,
|
51
|
+
:email_notifier_domain,
|
52
|
+
:email_notifier_username,
|
53
|
+
:email_notifier_password
|
54
|
+
]
|
55
|
+
|
56
|
+
verify_variables(required_variables)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
######################################################################
|
63
|
+
# EMAIL NOTIFIER DEFAULTS #
|
64
|
+
######################################################################
|
65
|
+
Capistrano::Configuration.instance(:must_exist).load do |cap|
|
66
|
+
namespace :notifiers do
|
67
|
+
namespace :defaults do
|
68
|
+
task :email do
|
69
|
+
_cset :email_notifier_format, 'html'
|
70
|
+
|
71
|
+
_cset :email_notifier_mail_method, :smtp
|
72
|
+
_cset :email_notifier_server, "smtp.gmail.com"
|
73
|
+
_cset :email_notifier_port, 587
|
74
|
+
_cset :email_notifier_authentication, 'plain'
|
75
|
+
|
76
|
+
_cset :email_notifier_mail_options, { :address => email_notifier_server,
|
77
|
+
:port => email_notifier_port,
|
78
|
+
:domain => email_notifier_domain,
|
79
|
+
:user_name => email_notifier_username,
|
80
|
+
:password => email_notifier_password,
|
81
|
+
:authentication => email_notifier_authentication,
|
82
|
+
:enable_starttls_auto => true }
|
83
|
+
|
84
|
+
_cset :email_notifier_client_recipients, []
|
85
|
+
_cset :email_notifier_internal_recipients, []
|
86
|
+
_cset :email_notifier_sender, 'theshadow@theshadowknows.com'
|
87
|
+
_cset :email_notifier_subject, "#{application.titleize} has been deployed to #{rails_env.capitalize}"
|
88
|
+
_cset :email_notifier_client_template, read_template("client_email.#{email_notifier_format}.erb")
|
89
|
+
_cset :email_notifier_internal_template, read_template("internal_email.#{email_notifier_format}.erb")
|
90
|
+
|
91
|
+
email_notifier = ChickenSoup::EmailNotifier.new(cap)
|
92
|
+
_cset :email_notifier_client_body, render_erb(email_notifier_client_template, email_notifier)
|
93
|
+
_cset :email_notifier_internal_body, render_erb(email_notifier_internal_template, email_notifier)
|
94
|
+
|
95
|
+
Mail.defaults do
|
96
|
+
delivery_method cap[:email_notifier_mail_method], cap[:email_notifier_mail_options]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def render_erb(template, email_info)
|
104
|
+
ERB.new(template, 0, "%<>").result(binding)
|
105
|
+
end
|
106
|
+
|
107
|
+
def read_template(template)
|
108
|
+
File.read(File.join(File.dirname(__FILE__), template))
|
109
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
######################################################################
|
2
|
+
# GIT NOTIFIER TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
before 'deploy:cleanup', 'git:tag'
|
6
|
+
|
7
|
+
namespace :git do
|
8
|
+
desc <<-DESC
|
9
|
+
Tags the deployed Git commit with the timestamp and environment it was deployed to.
|
10
|
+
|
11
|
+
The tag is auto-pushed to whatever `remote` is set to as well as `origin`.
|
12
|
+
Tag push happens in the background so it won't slow down deployment.
|
13
|
+
DESC
|
14
|
+
task :tag do
|
15
|
+
timestamp_string_without_seconds = Time.now.strftime("%Y%m%d%H%M")
|
16
|
+
tag_name = "deployed_to_#{rails_env}_#{timestamp_string_without_seconds}"
|
17
|
+
|
18
|
+
`git tag -a -m "Tagging deploy to #{rails_env} at #{timestamp_string_without_seconds}" #{tag_name} #{branch}`
|
19
|
+
`git push #{remote} --tags > /dev/null 2>&1 &`
|
20
|
+
`git push origin --tags > /dev/null 2>&1 &`
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
######################################################################
|
2
|
-
#
|
2
|
+
# HOPTOAD NOTIFIER TASKS #
|
3
3
|
######################################################################
|
4
4
|
Capistrano::Configuration.instance(:must_exist).load do
|
5
5
|
# require 'hoptoad_notifier/capistrano'
|
data/lib/chicken_soup/version.rb
CHANGED
data/lib/chicken_stock.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chicken_soup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.0.5
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- thekompanee
|
@@ -11,31 +10,39 @@ autorequire:
|
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
12
|
|
14
|
-
date: 2011-
|
13
|
+
date: 2011-03-03 00:00:00 -06:00
|
15
14
|
default_executable:
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: capistrano
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
21
|
requirements:
|
23
22
|
- - ~>
|
24
23
|
- !ruby/object:Gem::Version
|
25
24
|
version: 2.5.19
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: mail
|
26
28
|
type: :runtime
|
27
|
-
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.2.15
|
35
|
+
version:
|
28
36
|
- !ruby/object:Gem::Dependency
|
29
37
|
name: bundler
|
30
|
-
|
31
|
-
|
32
|
-
|
38
|
+
type: :development
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
41
|
requirements:
|
34
42
|
- - ~>
|
35
43
|
- !ruby/object:Gem::Version
|
36
44
|
version: 1.0.10
|
37
|
-
|
38
|
-
version_requirements: *id002
|
45
|
+
version:
|
39
46
|
description: ...for the Deployment Soul. Why do you keep typing all that crap into your Capistrano recipes? Are you too cool for standards? Well, ARE YA!?
|
40
47
|
email: support@thekompanee.com
|
41
48
|
executables: []
|
@@ -52,22 +59,31 @@ files:
|
|
52
59
|
- README.md
|
53
60
|
- Rakefile
|
54
61
|
- chicken_soup.gemspec
|
62
|
+
- lib/chicken_soup/capabilities.rb
|
55
63
|
- lib/chicken_soup/capabilities/apache.rb
|
56
64
|
- lib/chicken_soup/capabilities/bundler.rb
|
65
|
+
- lib/chicken_soup/capabilities/checks.rb
|
66
|
+
- lib/chicken_soup/capabilities/defaults.rb
|
57
67
|
- lib/chicken_soup/capabilities/git.rb
|
58
68
|
- lib/chicken_soup/capabilities/heroku.rb
|
59
|
-
- lib/chicken_soup/capabilities/hoptoad.rb
|
60
69
|
- lib/chicken_soup/capabilities/mysql.rb
|
61
70
|
- lib/chicken_soup/capabilities/passenger.rb
|
62
71
|
- lib/chicken_soup/capabilities/postgres.rb
|
63
72
|
- lib/chicken_soup/capabilities/rvm.rb
|
64
73
|
- lib/chicken_soup/capabilities/shared/db.rb
|
74
|
+
- lib/chicken_soup/capabilities/svn.rb
|
65
75
|
- lib/chicken_soup/capabilities/unix.rb
|
66
76
|
- lib/chicken_soup/deploy.rb
|
67
77
|
- lib/chicken_soup/environment.rb
|
68
78
|
- lib/chicken_soup/environment/checks.rb
|
69
79
|
- lib/chicken_soup/environment/defaults.rb
|
70
80
|
- lib/chicken_soup/global.rb
|
81
|
+
- lib/chicken_soup/notifiers.rb
|
82
|
+
- lib/chicken_soup/notifiers/checks.rb
|
83
|
+
- lib/chicken_soup/notifiers/defaults.rb
|
84
|
+
- lib/chicken_soup/notifiers/email.rb
|
85
|
+
- lib/chicken_soup/notifiers/git.rb
|
86
|
+
- lib/chicken_soup/notifiers/hoptoad.rb
|
71
87
|
- lib/chicken_soup/version.rb
|
72
88
|
- lib/chicken_stock.rb
|
73
89
|
has_rdoc: true
|
@@ -80,23 +96,23 @@ rdoc_options:
|
|
80
96
|
require_paths:
|
81
97
|
- lib
|
82
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
99
|
requirements:
|
85
100
|
- - ">="
|
86
101
|
- !ruby/object:Gem::Version
|
87
102
|
version: "0"
|
103
|
+
version:
|
88
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
105
|
requirements:
|
91
106
|
- - ">="
|
92
107
|
- !ruby/object:Gem::Version
|
93
108
|
version: "0"
|
109
|
+
version:
|
94
110
|
requirements: []
|
95
111
|
|
96
112
|
rubyforge_project: chicken_soup
|
97
|
-
rubygems_version: 1.5
|
113
|
+
rubygems_version: 1.3.5
|
98
114
|
signing_key:
|
99
115
|
specification_version: 3
|
100
|
-
summary: chicken_soup-0.0
|
116
|
+
summary: chicken_soup-0.1.0
|
101
117
|
test_files: []
|
102
118
|
|