capistrano-fanfare 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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