capistrano-fanfare 0.0.2 → 0.0.3

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.
@@ -0,0 +1,26 @@
1
+ require 'capistrano'
2
+
3
+ module Capistrano::Fanfare::DatabaseYaml
4
+ def self.load_into(configuration)
5
+ configuration.load do
6
+ # =========================================================================
7
+ # These are the tasks that are available to help with deploying web apps.
8
+ # You can have cap give you a summary of them with `cap -T'.
9
+ # =========================================================================
10
+
11
+ namespace :db do
12
+ desc <<-DESC
13
+ [internal] Copies database.yml from shared_path into release_path.
14
+ DESC
15
+ task :cp_database_yml, :roles => :app, :except => { :no_release => true } do
16
+ run [
17
+ "mkdir -p #{release_path}/config &&",
18
+ "cp #{shared_path}/config/database.yml #{release_path}/config/database.yml"
19
+ ].join(' ')
20
+ end
21
+ end
22
+
23
+ after "deploy:update_code", "db:cp_database_yml"
24
+ end
25
+ end
26
+ end
@@ -145,10 +145,13 @@ module Capistrano::Fanfare::Foreman
145
145
  foreman.run_cmd
146
146
  end
147
147
 
148
- after "deploy:update_code", "foreman:cp_env"
149
- after "deploy:start", "foreman:start"
150
- after "deploy:stop", "foreman:stop"
151
- after "deploy:restart", "foreman:restart"
148
+ after "deploy:finalize_update", "foreman:cp_env"
149
+ after "deploy:update_code", "foreman:export"
150
+ before "deploy:start", "foreman:register"
151
+ after "deploy:start", "foreman:start"
152
+ before "deploy:restart", "foreman:register"
153
+ after "deploy:restart", "foreman:restart"
154
+ after "deploy:stop", "foreman:stop"
152
155
  end
153
156
  end
154
157
  end
@@ -10,55 +10,122 @@ module Capistrano
10
10
 
11
11
  class Runit < Base
12
12
  def export
13
+ svp = configuration[:runit_sv_path]
14
+
13
15
  run [
16
+ "set -x &&",
17
+ "svp=#{svp} &&",
14
18
  "cd #{configuration[:current_release]} &&",
15
19
  "if [ -f Procfile ] ; then",
16
- "mkdir -p #{configuration[:runit_sv_path]} &&",
17
- "#{configuration[:foreman_cmd]} export runit",
18
- "#{configuration[:runit_sv_path]}",
19
- "--app=#{configuration[:runit_app_name]}",
20
- "--log=#{configuration[:shared_path]}/log",
21
- "--user=#{configuration[:user]} &&",
22
- "find #{configuration[:runit_sv_path]} -type f -name run",
23
- "-exec chmod 755 {} \\; ; else",
24
- "echo '>>>> A Procfile must exist in this project.' && exit 10 ;",
25
- "fi"
20
+ # create an empty staging directory for services
21
+ "rm -rf ${svp}-pre &&",
22
+ "mkdir -p ${svp}-pre &&",
23
+
24
+ # export services into a *-pre directory
25
+ "#{configuration[:foreman_cmd]} export runit",
26
+ "${svp}-pre",
27
+ "--app=#{configuration[:runit_app_name]}",
28
+ "--log=#{configuration[:shared_path]}/log",
29
+ "--user=#{configuration[:user]} &&",
30
+
31
+ # fix any path references in files back to :runit_sv_path
32
+ # and ensure that a non-zero sed exit doesn't propagate
33
+ "set +x &&",
34
+ "egrep -lr ${svp}-pre ${svp}-pre | (xargs",
35
+ "sed -i \"s|${svp}-pre|${svp}|g\" || true) &&",
36
+
37
+ # calculate checksums of all service files in both
38
+ # service directories
39
+ "(cd ${svp} ; find . -path '*/supervise' -type d",
40
+ "-prune -o -type f | grep -v 'supervise$' | sort |",
41
+ "xargs openssl sha) > /tmp/sv-dir-$$ &&",
42
+ "(cd ${svp}-pre ; find . -path '*/supervise' -type d",
43
+ "-prune -o -type f | grep -v 'supervise$' | sort |",
44
+ "xargs openssl sha) > /tmp/sv-pre-dir-$$ &&",
45
+ "set -x &&",
46
+
47
+ "if diff -q /tmp/sv-dir-$$ /tmp/sv-pre-dir-$$ >/dev/null ; then",
48
+ "echo '\\n===> Foreman export atrifacts are identical\\n' &&",
49
+ "rm -rf ${svp}-pre",
50
+
51
+ "; else", # diff -q
52
+ "echo '\\n===> Updated Foreman export artifacts detected\\n' &&",
53
+ "echo '---> Stoping processes' &&",
54
+ "rm -f #{all_services} &&",
55
+ "echo '---> Installing updated Foreman export artifacts' &&",
56
+ "rm -rf ${svp} && mv ${svp}-pre ${svp} &&",
57
+ "touch ${svp}/.symlink_boot",
58
+ "; fi &&", # diff -q
59
+
60
+ # clean checksum calculations
61
+ "echo '---> Cleaning up' &&",
62
+ "rm -f /tmp/sv-{dir,pre-dir}-$$",
63
+
64
+ "; else", # -f Procfile
65
+ # die with a warning about including a Procfile
66
+ "echo '>>>> A Procfile must exist in this project.' && exit 10",
67
+ "; fi" # -f Procfile
26
68
  ].join(' ')
27
69
  end
28
70
 
29
71
  def register
72
+ symlink_boot = capture([
73
+ "if [ -f #{configuration[:runit_sv_path]}/.symlink_boot ] ; then",
74
+ "echo true",
75
+ "; else",
76
+ "echo false",
77
+ "; fi"
78
+ ].join(' ')).chomp
79
+
80
+ # if the service symlinks are fresh, this will start the
81
+ # service automatically so we won't try to pile on and
82
+ # call foreman:start or foreman:restart
83
+ if symlink_boot == "true" && callbacks[:after]
84
+ callbacks[:after].reject! { |c| c.source == "foreman:start" }
85
+ callbacks[:after].reject! { |c| c.source == "foreman:restart" }
86
+ end
87
+
30
88
  run [
31
89
  "ln -snf #{configuration[:runit_sv_path]}/*",
32
- "#{configuration[:runit_service_path]}/"
90
+ "#{configuration[:runit_service_path]}/ &&",
91
+ "rm -f #{configuration[:runit_sv_path]}/.symlink_boot"
33
92
  ].join(' ')
34
93
  end
35
94
 
36
95
  def start(proc_group = nil)
37
96
  run [
38
- "sv start #{configuration[:runit_service_path]}/",
39
- "#{configuration[:runit_app_name]}-*"
40
- ].join
97
+ "sv start #{all_services}",
98
+ "(s=$? && echo \"Start exited with $s\" && exit $s)"
99
+ ].join(' || ')
41
100
  end
42
101
 
43
102
  def stop(proc_group = nil)
44
103
  run [
45
- "sv stop #{configuration[:runit_service_path]}/",
46
- "#{configuration[:runit_app_name]}-*"
47
- ].join
104
+ "sv stop #{all_services}",
105
+ "(s=$? && echo \"Stop exited with $s\" && exit $s)"
106
+ ].join(' || ')
48
107
  end
49
108
 
50
109
  def restart(proc_group = nil)
51
110
  run [
52
- "sv restart #{configuration[:runit_service_path]}/",
53
- "#{configuration[:runit_app_name]}-*"
54
- ].join
111
+ "sv restart #{all_services}",
112
+ "(s=$? && echo \"Restart exited with $s\" && exit $s)"
113
+ ].join(' || ')
55
114
  end
56
115
 
57
116
  def ps
58
117
  run [
59
- "sv status #{configuration[:runit_service_path]}/",
118
+ "sv status #{all_services}",
119
+ "(s=$? && echo \"Status exited with $s\" && exit $s)"
120
+ ].join(' || ')
121
+ end
122
+
123
+ private
124
+
125
+ def all_services
126
+ [ configuration[:runit_service_path],
60
127
  "#{configuration[:runit_app_name]}-*"
61
- ].join
128
+ ].join('/')
62
129
  end
63
130
  end
64
131
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Fanfare
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
data/spec/bundler_spec.rb CHANGED
@@ -71,7 +71,7 @@ load Gem.bin_path('bundler', 'bundle')
71
71
 
72
72
  describe ":bundle_flags" do
73
73
  after do
74
- ENV.delete('VERBOSE')
74
+ ENV.delete('QUIET')
75
75
  end
76
76
 
77
77
  it "contains --deployment" do
@@ -0,0 +1,32 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/capistrano'
3
+ require 'capistrano/fanfare'
4
+ require 'capistrano/fanfare/database_yaml'
5
+
6
+ describe Capistrano::Fanfare::DatabaseYaml do
7
+ before do
8
+ @config = Capistrano::Configuration.new
9
+ Capistrano::Fanfare::DatabaseYaml.load_into(@config)
10
+ @config.extend(MiniTest::Capistrano::ConfigurationExtension)
11
+ end
12
+
13
+ describe "for namespace :db" do
14
+ describe "task :cp_database_yml" do
15
+ it "copies config/database.yml into :release_path" do
16
+ @config.set :shared_path, "/a/appattack/shared"
17
+ @config.set :release_path, "/a/appattack/releases/thisone"
18
+ @config.find_and_execute_task("db:cp_database_yml")
19
+
20
+ @config.must_have_run [
21
+ "mkdir -p /a/appattack/releases/thisone/config &&",
22
+ "cp /a/appattack/shared/config/database.yml",
23
+ "/a/appattack/releases/thisone/config/database.yml"
24
+ ].join(' ')
25
+ end
26
+
27
+ it "gets called after deploy:update_code task" do
28
+ @config.must_have_callback_after "deploy:update_code", "db:cp_database_yml"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -17,28 +17,97 @@ describe Capistrano::Fanfare::Foreman::Strategy::Runit do
17
17
  @config.set :shared_path, "/srv/fooapp/shared"
18
18
  @config.set :runit_sv_path, "/srv/fooapp/shared/sv"
19
19
  @config.set :runit_app_name, "fooapp_production"
20
+ @config.set :runit_service_path, "/home/foouser/service"
20
21
  @config.set :user, "deploy"
21
22
  strategy.export
22
23
 
23
24
  @config.must_have_run [
25
+ "set -x &&",
26
+ "svp=/srv/fooapp/shared/sv &&",
24
27
  "cd /srv/fooapp/releases/thisone &&",
25
28
  "if [ -f Procfile ] ; then",
26
- "mkdir -p /srv/fooapp/shared/sv &&",
27
- "bin/foreman export runit /srv/fooapp/shared/sv",
28
- "--app=fooapp_production --log=/srv/fooapp/shared/log",
29
- "--user=deploy &&",
30
- "find /srv/fooapp/shared/sv -type f -name run",
31
- "-exec chmod 755 {} \\; ; else",
32
- "echo '>>>> A Procfile must exist in this project.' && exit 10 ; fi"
29
+ "rm -rf ${svp}-pre &&",
30
+ "mkdir -p ${svp}-pre &&",
31
+ "bin/foreman export runit ${svp}-pre",
32
+ "--app=fooapp_production --log=/srv/fooapp/shared/log",
33
+ "--user=deploy &&",
34
+ "set +x &&",
35
+ "egrep -lr ${svp}-pre ${svp}-pre | (xargs",
36
+ "sed -i \"s|${svp}-pre|${svp}|g\" || true) &&",
37
+ "(cd ${svp} ; find . -path '*/supervise' -type d -prune -o -type f | grep -v 'supervise$' | sort | xargs openssl sha) > /tmp/sv-dir-$$ &&",
38
+ "(cd ${svp}-pre ; find . -path '*/supervise' -type d -prune -o -type f | grep -v 'supervise$' | sort | xargs openssl sha) > /tmp/sv-pre-dir-$$ &&",
39
+ "set -x &&",
40
+ "if diff -q /tmp/sv-dir-$$ /tmp/sv-pre-dir-$$ >/dev/null ; then",
41
+ "echo '\\n===> Foreman export atrifacts are identical\\n' &&",
42
+ "rm -rf ${svp}-pre",
43
+ "; else",
44
+ "echo '\\n===> Updated Foreman export artifacts detected\\n' &&",
45
+ "echo '---> Stoping processes' &&",
46
+ "rm -f /home/foouser/service/fooapp_production-* &&",
47
+ "echo '---> Installing updated Foreman export artifacts' &&",
48
+ "rm -rf ${svp} && mv ${svp}-pre ${svp} &&",
49
+ "touch ${svp}/.symlink_boot",
50
+ "; fi &&",
51
+ "echo '---> Cleaning up' &&",
52
+ "rm -f /tmp/sv-{dir,pre-dir}-$$",
53
+ "; else",
54
+ "echo '>>>> A Procfile must exist in this project.' && exit 10",
55
+ "; fi"
33
56
  ].join(' ')
34
57
  end
35
58
 
36
- it "#register symlinks services in :runit_sv_path to :runit_service_path" do
37
- @config.set :runit_sv_path, "/apps/foo/shared/sv"
38
- @config.set :runit_service_path, "/home/foouser/service"
39
- strategy.register
59
+ describe "#register" do
60
+ it "symlinks services in :runit_sv_path to :runit_service_path" do
61
+ @config.set :runit_sv_path, "/apps/foo/shared/sv"
62
+ @config.set :runit_service_path, "/home/foouser/service"
63
+ @config.captures_responses["if [ -f /apps/foo/shared/sv/.symlink_boot ] ; then echo true ; else echo false ; fi"] = "true\n"
64
+ strategy.register
65
+
66
+ @config.must_have_run [
67
+ "ln -snf /apps/foo/shared/sv/* /home/foouser/service/",
68
+ "rm -f /apps/foo/shared/sv/.symlink_boot"
69
+ ].join(' && ')
70
+ end
71
+
72
+ describe "with a symlink_boot" do
73
+ before do
74
+ @config.set :runit_sv_path, "/apps/foo/shared/sv"
75
+ @config.set :runit_service_path, "/home/foouser/service"
76
+ @config.after "deploy:start", "foreman:start"
77
+ @config.after "deploy:restart", "foreman:restart"
78
+ @config.captures_responses["if [ -f /apps/foo/shared/sv/.symlink_boot ] ; then echo true ; else echo false ; fi"] = "true\n"
79
+ end
40
80
 
41
- @config.must_have_run "ln -snf /apps/foo/shared/sv/* /home/foouser/service/"
81
+ it "removes the start callback" do
82
+ strategy.register
83
+ @config.wont_have_callback_after "foreman:start", "deploy:start"
84
+ end
85
+
86
+ it "removes the restart callback" do
87
+ strategy.register
88
+ @config.wont_have_callback_after "foreman:restart", "deploy:restart"
89
+ end
90
+ end
91
+
92
+ describe "without a symlink_boot" do
93
+ before do
94
+ @config.set :runit_sv_path, "/apps/foo/shared/sv"
95
+ @config.set :runit_service_path, "/home/foouser/service"
96
+ @config.after "deploy:start", "foreman:start"
97
+ @config.after "deploy:restart", "foreman:restart"
98
+ @config.captures_responses["if [ -f /apps/foo/shared/sv/.symlink_boot ] ; then echo true ; else echo false ; fi"] = "false\n"
99
+ end
100
+
101
+ it "preserves the start callback" do
102
+ strategy.register
103
+ @config.must_have_callback_after "deploy:start", "foreman:start"
104
+ end
105
+
106
+ it "preserves the restart callback" do
107
+ strategy.register
108
+ @config.must_have_callback_after "deploy:restart", "foreman:restart"
109
+ end
110
+ end
42
111
  end
43
112
 
44
113
  describe "#start" do
@@ -47,7 +116,10 @@ describe Capistrano::Fanfare::Foreman::Strategy::Runit do
47
116
  @config.set :runit_app_name, "wuzzle_production"
48
117
  strategy.start
49
118
 
50
- @config.must_have_run "sv start /home/foouser/service/wuzzle_production-*"
119
+ @config.must_have_run [
120
+ "sv start /home/foouser/service/wuzzle_production-*",
121
+ "(s=$? && echo \"Start exited with $s\" && exit $s)"
122
+ ].join(' || ')
51
123
  end
52
124
  end
53
125
 
@@ -57,7 +129,10 @@ describe Capistrano::Fanfare::Foreman::Strategy::Runit do
57
129
  @config.set :runit_app_name, "wuzzle_production"
58
130
  strategy.stop
59
131
 
60
- @config.must_have_run "sv stop /home/foouser/service/wuzzle_production-*"
132
+ @config.must_have_run [
133
+ "sv stop /home/foouser/service/wuzzle_production-*",
134
+ "(s=$? && echo \"Stop exited with $s\" && exit $s)"
135
+ ].join(' || ')
61
136
  end
62
137
  end
63
138
 
@@ -67,7 +142,10 @@ describe Capistrano::Fanfare::Foreman::Strategy::Runit do
67
142
  @config.set :runit_app_name, "wuzzle_production"
68
143
  strategy.restart
69
144
 
70
- @config.must_have_run "sv restart /home/foouser/service/wuzzle_production-*"
145
+ @config.must_have_run [
146
+ "sv restart /home/foouser/service/wuzzle_production-*",
147
+ "(s=$? && echo \"Restart exited with $s\" && exit $s)"
148
+ ].join(' || ')
71
149
  end
72
150
  end
73
151
 
@@ -77,7 +155,10 @@ describe Capistrano::Fanfare::Foreman::Strategy::Runit do
77
155
  @config.set :runit_app_name, "wuzzle_production"
78
156
  strategy.ps
79
157
 
80
- @config.must_have_run "sv status /home/foouser/service/wuzzle_production-*"
158
+ @config.must_have_run [
159
+ "sv status /home/foouser/service/wuzzle_production-*",
160
+ "(s=$? && echo \"Status exited with $s\" && exit $s)"
161
+ ].join(' || ')
81
162
  end
82
163
  end
83
164
  end
data/spec/foreman_spec.rb CHANGED
@@ -71,8 +71,8 @@ describe Capistrano::Fanfare::Foreman do
71
71
  @config.must_have_run "cp /tmp/app/shared/env /tmp/app/releases/blah/.env"
72
72
  end
73
73
 
74
- it "gets called after deploy:updated_code task" do
75
- @config.must_have_callback_after "deploy:update_code", "foreman:cp_env"
74
+ it "gets called after deploy:finalize_update task" do
75
+ @config.must_have_callback_after "deploy:finalize_update", "foreman:cp_env"
76
76
  end
77
77
  end
78
78
 
@@ -111,6 +111,10 @@ describe Capistrano::Fanfare::Foreman do
111
111
 
112
112
  strategy.verify
113
113
  end
114
+
115
+ it "gets called after deploy:update_code task" do
116
+ @config.must_have_callback_after "deploy:update_code", "foreman:export"
117
+ end
114
118
  end
115
119
 
116
120
  describe "task :register" do
@@ -120,6 +124,14 @@ describe Capistrano::Fanfare::Foreman do
120
124
 
121
125
  strategy.verify
122
126
  end
127
+
128
+ it "gets called before deploy:start task" do
129
+ @config.must_have_callback_before "deploy:start", "foreman:register"
130
+ end
131
+
132
+ it "gets called before deploy:restart task" do
133
+ @config.must_have_callback_before "deploy:restart", "foreman:register"
134
+ end
123
135
  end
124
136
 
125
137
  describe "task :start" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-fanfare
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-18 00:00:00.000000000 Z
12
+ date: 2012-01-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
16
- requirement: &70360322152180 !ruby/object:Gem::Requirement
16
+ requirement: &70250305558200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.10.0.pre
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70360322152180
24
+ version_requirements: *70250305558200
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capistrano_colors
27
- requirement: &70360322151440 !ruby/object:Gem::Requirement
27
+ requirement: &70250305557440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.5'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70360322151440
35
+ version_requirements: *70250305557440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &70360322150660 !ruby/object:Gem::Requirement
38
+ requirement: &70250305556660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.10.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70360322150660
46
+ version_requirements: *70250305556660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: minitest-capistrano
49
- requirement: &70360322149900 !ruby/object:Gem::Requirement
49
+ requirement: &70250305555900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0.0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70360322149900
57
+ version_requirements: *70250305555900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: timecop
60
- requirement: &70360322149340 !ruby/object:Gem::Requirement
60
+ requirement: &70250305555360 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0.3'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70360322149340
68
+ version_requirements: *70250305555360
69
69
  description: Capistrano recipes (with full test suite) for fanfare application deployment
70
70
  framework
71
71
  email:
@@ -83,6 +83,7 @@ files:
83
83
  - capistrano-fanfare.gemspec
84
84
  - lib/capistrano/fanfare.rb
85
85
  - lib/capistrano/fanfare/bundler.rb
86
+ - lib/capistrano/fanfare/database_yaml.rb
86
87
  - lib/capistrano/fanfare/defaults.rb
87
88
  - lib/capistrano/fanfare/foreman.rb
88
89
  - lib/capistrano/fanfare/foreman/strategy.rb
@@ -93,6 +94,7 @@ files:
93
94
  - lib/capistrano/fanfare/version.rb
94
95
  - lib/capistrano/recipes/deploy/strategy/git_style.rb
95
96
  - spec/bundler_spec.rb
97
+ - spec/database_yaml_spec.rb
96
98
  - spec/defaults_spec.rb
97
99
  - spec/fixtures/Procfile
98
100
  - spec/fixtures/fanfare/bark.rb
@@ -117,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
119
  version: '0'
118
120
  segments:
119
121
  - 0
120
- hash: 805475541908766951
122
+ hash: -3823857243740536617
121
123
  required_rubygems_version: !ruby/object:Gem::Requirement
122
124
  none: false
123
125
  requirements:
@@ -126,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
128
  version: '0'
127
129
  segments:
128
130
  - 0
129
- hash: 805475541908766951
131
+ hash: -3823857243740536617
130
132
  requirements: []
131
133
  rubyforge_project:
132
134
  rubygems_version: 1.8.10
@@ -136,6 +138,7 @@ summary: Capistrano recipes (with full test suite) for fanfare application deplo
136
138
  framework
137
139
  test_files:
138
140
  - spec/bundler_spec.rb
141
+ - spec/database_yaml_spec.rb
139
142
  - spec/defaults_spec.rb
140
143
  - spec/fixtures/Procfile
141
144
  - spec/fixtures/fanfare/bark.rb