ruby_yacht 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile.lock +1 -1
- data/doc/TODO.md +16 -6
- data/doc/configuration_sample.rb +8 -9
- data/lib/ruby_yacht/dsl/app.rb +29 -1
- data/lib/ruby_yacht/dsl/app_type.rb +112 -0
- data/lib/ruby_yacht/dsl/configuration.rb +163 -2
- data/lib/ruby_yacht/dsl/dsl.rb +51 -9
- data/lib/ruby_yacht/dsl/hook.rb +105 -0
- data/lib/ruby_yacht/dsl/project.rb +17 -21
- data/lib/ruby_yacht/dsl.rb +2 -0
- data/lib/ruby_yacht/images/app/Dockerfile.erb +20 -13
- data/lib/ruby_yacht/images/app/before_startup.bash.erb +8 -0
- data/lib/ruby_yacht/images/app/checkout.bash +6 -0
- data/lib/ruby_yacht/images/app/startup.bash.erb +5 -0
- data/lib/ruby_yacht/images/app-dependencies/Dockerfile.erb +23 -5
- data/lib/ruby_yacht/images/database/Dockerfile.erb +25 -11
- data/lib/ruby_yacht/images/database/checkout.bash +10 -0
- data/lib/ruby_yacht/images/database/setup.bash +15 -0
- data/lib/ruby_yacht/images/web/Dockerfile.erb +4 -3
- data/lib/ruby_yacht/plugins/rails/scripts/install_gems.rb +3 -0
- data/lib/ruby_yacht/plugins/rails/scripts/load_seeds.rb +34 -0
- data/lib/ruby_yacht/{images/app/startup.rb → plugins/rails/scripts/prepare_rails_for_launch.rb} +2 -8
- data/lib/ruby_yacht/{images/app/update_database_config.rb → plugins/rails/scripts/update_rails_config.rb} +0 -1
- data/lib/ruby_yacht/plugins/rails.rb +40 -0
- data/lib/ruby_yacht/plugins.rb +6 -0
- data/lib/ruby_yacht/runner/build_images.rb +72 -5
- data/lib/ruby_yacht/runner/checkout.rb +1 -1
- data/lib/ruby_yacht.rb +2 -1
- data/ruby_yacht.gemspec +2 -1
- data/spec/docker/Dockerfile +1 -1
- data/spec/dsl/app_spec.rb +34 -0
- data/spec/dsl/app_type_spec.rb +176 -0
- data/spec/dsl/configuration_spec.rb +161 -2
- data/spec/dsl/dsl_spec.rb +3 -3
- data/spec/dsl/hook_spec.rb +111 -0
- data/spec/dsl/project_spec.rb +19 -83
- data/spec/fixtures/app-dependencies-dockerfile-generic +21 -0
- data/spec/fixtures/app-dependencies-dockerfile-generic-with-library-install +28 -0
- data/spec/fixtures/app-dependencies-dockerfile-rails +32 -0
- data/spec/fixtures/database-dockerfile +16 -15
- data/spec/fixtures/database-dockerfile-rails +35 -0
- data/spec/fixtures/database-dockerfile-with-seed-hooks +34 -0
- data/spec/fixtures/hooks/hook1.rb +0 -0
- data/spec/fixtures/hooks/hook2.rb +0 -0
- data/spec/fixtures/mars-before-startup +4 -0
- data/spec/fixtures/mars-before-startup-rails +7 -0
- data/spec/fixtures/mars-before-startup-with-before-startup-hooks +7 -0
- data/spec/fixtures/mars-dockerfile +9 -14
- data/spec/fixtures/mars-dockerfile-rails +33 -0
- data/spec/fixtures/mars-dockerfile-with-after-checkout-hooks +30 -0
- data/spec/fixtures/mars-dockerfile-with-before-startup-hooks +29 -0
- data/spec/fixtures/mars-startup +3 -0
- data/spec/fixtures/mars-startup-rails +3 -0
- data/spec/fixtures/multi-project-web-dockerfile +0 -10
- data/spec/fixtures/web-dockerfile +0 -6
- data/spec/plugins/rails_spec.rb +198 -0
- data/spec/runner/build_images_spec.rb +181 -15
- data/spec/runner/checkout_spec.rb +2 -2
- data/spec/support/test_project.rb +16 -8
- metadata +62 -30
- data/lib/ruby_yacht/images/app/checkout.rb +0 -7
- data/lib/ruby_yacht/images/app-dependencies/install_gems.rb +0 -12
- data/lib/ruby_yacht/images/database/load_seeds.rb +0 -42
- data/lib/ruby_yacht/images/database/setup.rb +0 -19
- data/lib/ruby_yacht/images/database/setup_database.sql.erb +0 -12
- data/spec/fixtures/app-dependencies-dockerfile +0 -25
@@ -0,0 +1,198 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RubyYacht::Plugins::Rails do
|
4
|
+
before do
|
5
|
+
RubyYacht.configuration.clear
|
6
|
+
described_class.load
|
7
|
+
end
|
8
|
+
|
9
|
+
it "adds rails to the app type list" do
|
10
|
+
expect(RubyYacht.configuration.app_types.map(&:name)).to include :rails
|
11
|
+
end
|
12
|
+
|
13
|
+
it "adds attributes for the rails environment and secret key" do
|
14
|
+
RubyYacht.configure do
|
15
|
+
project :test_project do
|
16
|
+
system_prefix :test_project
|
17
|
+
domain 'test.com'
|
18
|
+
repository 'github.com'
|
19
|
+
rails_secret_key_base 'abc'
|
20
|
+
|
21
|
+
database do
|
22
|
+
host 'localhost'
|
23
|
+
name 'test'
|
24
|
+
password 'test'
|
25
|
+
username 'test'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
project = RubyYacht.configuration.projects.last
|
31
|
+
expect(project.rails_environment).to eq 'development'
|
32
|
+
expect(project.rails_secret_key_base).to eq 'abc'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "sets environment variables for the RAILS_ENV and SECRET_KEY_BASE" do
|
36
|
+
@project = RubyYacht::Project.new
|
37
|
+
@project.rails_environment = 'development'
|
38
|
+
@project.rails_secret_key_base = 'abc'
|
39
|
+
variables = RubyYacht.configuration.find_app_type(:rails).environment_variables
|
40
|
+
|
41
|
+
expect(variables.count).to eq 2
|
42
|
+
expect(variables[0][:name]).to eq 'RAILS_ENV'
|
43
|
+
expect(variables[0][:image]).to eq :app
|
44
|
+
expect(instance_eval(&variables[0][:block])).to eq 'development'
|
45
|
+
expect(variables[1][:name]).to eq 'SECRET_KEY_BASE'
|
46
|
+
expect(variables[1][:image]).to eq :app
|
47
|
+
expect(instance_eval(&variables[1][:block])).to eq 'abc'
|
48
|
+
end
|
49
|
+
|
50
|
+
it "creates a during-install-libraries hook for cleaning the gems" do
|
51
|
+
hooks = RubyYacht.configuration.fetch_hooks(event_time: :during, event_type: :install_libraries)
|
52
|
+
expect(hooks.count).to eq 1
|
53
|
+
expect(hooks[0].command).to eq '/var/docker/install_gems.rb'
|
54
|
+
expect(hooks[0].app_type).to eq :rails
|
55
|
+
end
|
56
|
+
|
57
|
+
it "creates an after-build-checkout hook for cleaning the gems" do
|
58
|
+
hooks = RubyYacht.configuration.fetch_hooks(event_time: :after, event_type: :build_checkout)
|
59
|
+
expect(hooks.count).to eq 1
|
60
|
+
expect(hooks[0].command).to eq 'bundle install && bundle clean --force'
|
61
|
+
expect(hooks[0].app_type).to eq :rails
|
62
|
+
end
|
63
|
+
|
64
|
+
it "creates a during-load-seeds hook for loading the seeds" do
|
65
|
+
hooks = RubyYacht.configuration.fetch_hooks(event_time: :during, event_type: :load_database_seeds)
|
66
|
+
expect(hooks.count).to eq 1
|
67
|
+
expect(hooks[0].command).to eq '/var/docker/load_seeds.rb'
|
68
|
+
expect(hooks[0].app_type).to eq :rails
|
69
|
+
end
|
70
|
+
|
71
|
+
it "creates before-startup hooks for updating the config and preparing the app for launch" do
|
72
|
+
hooks = RubyYacht.configuration.fetch_hooks(event_time: :before, event_type: :startup)
|
73
|
+
expect(hooks.count).to eq 2
|
74
|
+
expect(hooks[0].command).to eq '/var/docker/update_rails_config.rb'
|
75
|
+
expect(hooks[0].app_type).to eq :rails
|
76
|
+
expect(hooks[1].command).to eq '/var/docker/prepare_rails_for_launch.rb'
|
77
|
+
expect(hooks[1].app_type).to eq :rails
|
78
|
+
end
|
79
|
+
|
80
|
+
it "creates a during-startup hook for starting the server" do
|
81
|
+
hooks = RubyYacht.configuration.fetch_hooks(event_time: :during, event_type: :startup)
|
82
|
+
expect(hooks.count).to eq 1
|
83
|
+
expect(hooks[0].command).to eq 'rails s -b 0.0.0.0 -p $APP_PORT -e $RAILS_ENV'
|
84
|
+
expect(hooks[0].app_type).to eq :rails
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "building images" do
|
88
|
+
subject { RubyYacht::Runner::BuildImages.new }
|
89
|
+
include DockerCommandSpec
|
90
|
+
|
91
|
+
before do
|
92
|
+
RubyYacht.configuration.clear
|
93
|
+
described_class.load
|
94
|
+
|
95
|
+
RubyYacht.configure do
|
96
|
+
project :apollo do
|
97
|
+
system_prefix :apollo
|
98
|
+
domain "apollo.test.com"
|
99
|
+
repository "github.com"
|
100
|
+
rails_secret_key_base 'abc'
|
101
|
+
|
102
|
+
database do
|
103
|
+
host "db.test.com"
|
104
|
+
name "apollo"
|
105
|
+
username "apollo"
|
106
|
+
password "test"
|
107
|
+
end
|
108
|
+
|
109
|
+
rails_app :mars do
|
110
|
+
repository_name 'brownleej/mars'
|
111
|
+
end
|
112
|
+
|
113
|
+
rails_app :saturn do
|
114
|
+
repository_name 'brownleej/saturn'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it "builds all the images for the project" do
|
121
|
+
docker.fail_unexpected_commands!
|
122
|
+
docker.expect "network create apollo 2> /dev/null"
|
123
|
+
docker.expect "build -t apollo-rails-app-dependencies tmp"
|
124
|
+
docker.expect "build -t apollo-mars tmp"
|
125
|
+
docker.expect "build -t apollo-saturn tmp"
|
126
|
+
docker.expect "build -t apollo-web tmp"
|
127
|
+
subject.run
|
128
|
+
end
|
129
|
+
|
130
|
+
it "generates the dockerfile for the app dependencies" do
|
131
|
+
docker.expect("build -t apollo-rails-app-dependencies tmp") do
|
132
|
+
files = Dir[File.join("tmp", "*")].sort
|
133
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/install_gems.rb']
|
134
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
135
|
+
expected = File.read(File.join('spec', 'fixtures', 'app-dependencies-dockerfile-rails'))
|
136
|
+
expect(dockerfile).to eq expected
|
137
|
+
end
|
138
|
+
subject.run
|
139
|
+
end
|
140
|
+
|
141
|
+
it "generates the dockerfiles for the apps" do
|
142
|
+
docker.expect("build -t apollo-mars tmp") do
|
143
|
+
files = Dir[File.join("tmp", "*")].sort
|
144
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/before_startup.bash', 'tmp/before_startup.bash.erb', 'tmp/checkout.bash', 'tmp/prepare_rails_for_launch.rb', 'tmp/startup.bash', 'tmp/startup.bash.erb', 'tmp/update_rails_config.rb']
|
145
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
146
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-dockerfile-rails'))
|
147
|
+
expect(dockerfile).to eq expected
|
148
|
+
end
|
149
|
+
subject.run
|
150
|
+
end
|
151
|
+
|
152
|
+
it "builds a startup file for the apps" do
|
153
|
+
docker.expect("build -t apollo-mars tmp") do
|
154
|
+
startup = File.read(File.join('tmp', 'startup.bash'))
|
155
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-startup-rails'))
|
156
|
+
expect(startup).to eq expected
|
157
|
+
end
|
158
|
+
subject.run
|
159
|
+
end
|
160
|
+
|
161
|
+
it "builds a before-startup file for the apps" do
|
162
|
+
docker.expect("build -t apollo-mars tmp") do
|
163
|
+
startup = File.read(File.join('tmp', 'before_startup.bash'))
|
164
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-before-startup-rails'))
|
165
|
+
expect(startup).to eq expected
|
166
|
+
end
|
167
|
+
subject.run
|
168
|
+
end
|
169
|
+
|
170
|
+
it "generates the dockerfiles for the web server" do
|
171
|
+
docker.expect "build -t apollo-web tmp" do
|
172
|
+
files = Dir[File.join("tmp", "*")].sort
|
173
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/add_app.rb', 'tmp/add_project.rb', 'tmp/app_config.erb', 'tmp/index.html.erb', 'tmp/index_config.erb', 'tmp/setup.rb']
|
174
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
175
|
+
expected = File.read(File.join('spec', 'fixtures', 'web-dockerfile'))
|
176
|
+
expect(dockerfile).to eq expected
|
177
|
+
end
|
178
|
+
subject.run
|
179
|
+
end
|
180
|
+
|
181
|
+
context "with a local database" do
|
182
|
+
before do
|
183
|
+
RubyYacht.configuration.projects[0].database.host = 'localhost'
|
184
|
+
end
|
185
|
+
|
186
|
+
it "generates the dockerfiles for the database server" do
|
187
|
+
docker.expect "build -t apollo-database tmp" do
|
188
|
+
files = Dir[File.join("tmp", "*")].sort
|
189
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/checkout.bash', 'tmp/load_seeds.rb', 'tmp/setup.bash']
|
190
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
191
|
+
expected = File.read(File.join('spec', 'fixtures', 'database-dockerfile-rails'))
|
192
|
+
expect(dockerfile).to eq expected
|
193
|
+
end
|
194
|
+
subject.run
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -12,7 +12,8 @@ describe RubyYacht::Runner::BuildImages do
|
|
12
12
|
it "builds all the images for the project" do
|
13
13
|
docker.fail_unexpected_commands!
|
14
14
|
docker.expect "network create apollo 2> /dev/null"
|
15
|
-
docker.expect "build -t apollo-app-dependencies tmp"
|
15
|
+
docker.expect "build -t apollo-generic-app-dependencies tmp"
|
16
|
+
docker.expect "build -t apollo-debian-app-dependencies tmp"
|
16
17
|
docker.expect "build -t apollo-mars tmp"
|
17
18
|
docker.expect "build -t apollo-saturn tmp"
|
18
19
|
docker.expect "build -t apollo-web tmp"
|
@@ -20,11 +21,11 @@ describe RubyYacht::Runner::BuildImages do
|
|
20
21
|
end
|
21
22
|
|
22
23
|
it "generates the dockerfile for the app dependencies" do
|
23
|
-
docker.expect("build -t apollo-app-dependencies tmp") do
|
24
|
+
docker.expect("build -t apollo-generic-app-dependencies tmp") do
|
24
25
|
files = Dir[File.join("tmp", "*")].sort
|
25
|
-
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb'
|
26
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb']
|
26
27
|
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
27
|
-
expected = File.read(File.join('spec', 'fixtures', 'app-dependencies-dockerfile'))
|
28
|
+
expected = File.read(File.join('spec', 'fixtures', 'app-dependencies-dockerfile-generic'))
|
28
29
|
expect(dockerfile).to eq expected
|
29
30
|
end
|
30
31
|
subject.run
|
@@ -33,13 +34,31 @@ describe RubyYacht::Runner::BuildImages do
|
|
33
34
|
it "generates the dockerfiles for the apps" do
|
34
35
|
docker.expect("build -t apollo-mars tmp") do
|
35
36
|
files = Dir[File.join("tmp", "*")].sort
|
36
|
-
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/checkout.
|
37
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/before_startup.bash', 'tmp/before_startup.bash.erb', 'tmp/checkout.bash', 'tmp/startup.bash', 'tmp/startup.bash.erb']
|
37
38
|
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
38
39
|
expected = File.read(File.join('spec', 'fixtures', 'mars-dockerfile'))
|
39
40
|
expect(dockerfile).to eq expected
|
40
41
|
end
|
41
42
|
subject.run
|
42
43
|
end
|
44
|
+
|
45
|
+
it "builds a startup file for the apps" do
|
46
|
+
docker.expect("build -t apollo-mars tmp") do
|
47
|
+
startup = File.read(File.join('tmp', 'startup.bash'))
|
48
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-startup'))
|
49
|
+
expect(startup).to eq expected
|
50
|
+
end
|
51
|
+
subject.run
|
52
|
+
end
|
53
|
+
|
54
|
+
it "builds a before-startup file for the apps" do
|
55
|
+
docker.expect("build -t apollo-mars tmp") do
|
56
|
+
startup = File.read(File.join('tmp', 'before_startup.bash'))
|
57
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-before-startup'))
|
58
|
+
expect(startup).to eq expected
|
59
|
+
end
|
60
|
+
subject.run
|
61
|
+
end
|
43
62
|
|
44
63
|
it "generates the dockerfiles for the web server" do
|
45
64
|
docker.expect "build -t apollo-web tmp" do
|
@@ -63,11 +82,11 @@ describe RubyYacht::Runner::BuildImages do
|
|
63
82
|
|
64
83
|
it "builds the database" do
|
65
84
|
docker.expect("build -t apollo-database tmp") do
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
85
|
+
files = Dir[File.join("tmp", "*")].sort
|
86
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/checkout.bash','tmp/setup.bash']
|
87
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
88
|
+
expected = File.read(File.join('spec', 'fixtures', 'database-dockerfile'))
|
89
|
+
expect(dockerfile).to eq expected
|
71
90
|
end
|
72
91
|
subject.run
|
73
92
|
end
|
@@ -75,6 +94,36 @@ describe RubyYacht::Runner::BuildImages do
|
|
75
94
|
it "returns true" do
|
76
95
|
expect(subject.run).to be_truthy
|
77
96
|
end
|
97
|
+
|
98
|
+
context "with a hook for loading the seeds" do
|
99
|
+
let(:script_folder) { File.join(File.dirname(File.dirname(__FILE__)), 'fixtures', 'hooks') }
|
100
|
+
|
101
|
+
before do
|
102
|
+
script_folder = self.script_folder
|
103
|
+
RubyYacht.configure do
|
104
|
+
add_hooks folder: script_folder, app_type: :generic do
|
105
|
+
during(:load_database_seeds) { run_script 'hook1.rb' }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
it "copies the files for the hooks to the database" do
|
111
|
+
docker.expect("build -t apollo-database tmp") do
|
112
|
+
files = Dir[File.join("tmp", "*")].sort
|
113
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/checkout.bash', 'tmp/hook1.rb', 'tmp/setup.bash']
|
114
|
+
end
|
115
|
+
subject.run
|
116
|
+
end
|
117
|
+
|
118
|
+
it "includes the scripts in the database dockerfile" do
|
119
|
+
docker.expect("build -t apollo-database tmp") do
|
120
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
121
|
+
expected = File.read(File.join('spec', 'fixtures', 'database-dockerfile-with-seed-hooks'))
|
122
|
+
expect(dockerfile).to eq expected
|
123
|
+
end
|
124
|
+
subject.run
|
125
|
+
end
|
126
|
+
end
|
78
127
|
end
|
79
128
|
|
80
129
|
context "with an id_rsa key" do
|
@@ -90,9 +139,9 @@ describe RubyYacht::Runner::BuildImages do
|
|
90
139
|
end
|
91
140
|
|
92
141
|
it "copies the id_rsa key to the app-dependencies container" do
|
93
|
-
docker.expect "build -t apollo-app-dependencies tmp" do
|
142
|
+
docker.expect "build -t apollo-generic-app-dependencies tmp" do
|
94
143
|
files = Dir[File.join("tmp", "*")].sort
|
95
|
-
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/id_rsa'
|
144
|
+
expect(files).to eq ['tmp/Dockerfile', 'tmp/Dockerfile.erb', 'tmp/id_rsa']
|
96
145
|
expect(File.read('tmp/id_rsa')).to eq File.read(id_file_path)
|
97
146
|
end
|
98
147
|
|
@@ -135,10 +184,11 @@ describe RubyYacht::Runner::BuildImages do
|
|
135
184
|
it "builds the containers for both projects" do
|
136
185
|
docker.fail_unexpected_commands!
|
137
186
|
docker.expect "network create apollo 2> /dev/null"
|
138
|
-
docker.expect "build -t apollo-app-dependencies tmp"
|
187
|
+
docker.expect "build -t apollo-generic-app-dependencies tmp"
|
188
|
+
docker.expect "build -t apollo-debian-app-dependencies tmp"
|
139
189
|
docker.expect "build -t apollo-mars tmp"
|
140
190
|
docker.expect "build -t apollo-saturn tmp"
|
141
|
-
docker.expect "build -t jupiter-app-dependencies tmp"
|
191
|
+
docker.expect "build -t jupiter-debian-app-dependencies tmp"
|
142
192
|
docker.expect "build -t jupiter-venus tmp"
|
143
193
|
docker.expect "build -t jupiter-saturn tmp"
|
144
194
|
docker.expect "build -t apollo-web tmp"
|
@@ -160,5 +210,121 @@ describe RubyYacht::Runner::BuildImages do
|
|
160
210
|
expect(subject.run).to be_truthy
|
161
211
|
end
|
162
212
|
end
|
213
|
+
|
214
|
+
context "with hooks before starting an app" do
|
215
|
+
let(:script_folder) { File.join(File.dirname(File.dirname(__FILE__)), 'fixtures', 'hooks') }
|
216
|
+
before do
|
217
|
+
script_folder = self.script_folder
|
218
|
+
RubyYacht.configure do
|
219
|
+
add_hooks folder: script_folder, app_type: :generic do
|
220
|
+
before(:startup) { run_script 'hook1.rb' }
|
221
|
+
before(:startup) { run_script 'hook2.rb' }
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
it "copies the scripts to the tmp directory" do
|
227
|
+
docker.expect("build -t apollo-mars tmp") do
|
228
|
+
files = Dir[File.join('tmp', '*')]
|
229
|
+
expect(files).to include 'tmp/hook1.rb'
|
230
|
+
expect(files).to include 'tmp/hook2.rb'
|
231
|
+
end
|
232
|
+
subject.run
|
233
|
+
end
|
234
|
+
|
235
|
+
it "builds a dockerfile that copies the scripts" do
|
236
|
+
docker.expect("build -t apollo-mars tmp") do
|
237
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
238
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-dockerfile-with-before-startup-hooks'))
|
239
|
+
expect(dockerfile).to eq expected
|
240
|
+
end
|
241
|
+
subject.run
|
242
|
+
end
|
243
|
+
|
244
|
+
it "builds a before-startup file that runs the scripts" do
|
245
|
+
docker.expect("build -t apollo-mars tmp") do
|
246
|
+
startup = File.read(File.join('tmp', 'before_startup.bash'))
|
247
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-before-startup-with-before-startup-hooks'))
|
248
|
+
expect(startup).to eq expected
|
249
|
+
end
|
250
|
+
subject.run
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
context "with hooks after checking out an app" do
|
255
|
+
let(:script_folder) { File.join(File.dirname(File.dirname(__FILE__)), 'fixtures', 'hooks') }
|
256
|
+
before do
|
257
|
+
script_folder = self.script_folder
|
258
|
+
RubyYacht.configure do
|
259
|
+
add_hooks folder: script_folder, app_type: :generic do
|
260
|
+
after(:build_checkout) { run_script 'hook1.rb' }
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
it "copies the scripts to the tmp directory" do
|
266
|
+
docker.expect("build -t apollo-mars tmp") do
|
267
|
+
files = Dir[File.join('tmp', '*')]
|
268
|
+
expect(files).to include 'tmp/hook1.rb'
|
269
|
+
end
|
270
|
+
subject.run
|
271
|
+
end
|
272
|
+
|
273
|
+
it "builds a dockerfile that copies the scripts" do
|
274
|
+
docker.expect("build -t apollo-mars tmp") do
|
275
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
276
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-dockerfile-with-after-checkout-hooks'))
|
277
|
+
expect(dockerfile).to eq expected
|
278
|
+
end
|
279
|
+
subject.run
|
280
|
+
end
|
281
|
+
|
282
|
+
it "builds a normal before-startup" do
|
283
|
+
docker.expect("build -t apollo-mars tmp") do
|
284
|
+
startup = File.read(File.join('tmp', 'before_startup.bash'))
|
285
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-before-startup'))
|
286
|
+
expect(startup).to eq expected
|
287
|
+
end
|
288
|
+
subject.run
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
context "with hooks for installing libraries for an app" do
|
293
|
+
let(:script_folder) { File.join(File.dirname(File.dirname(__FILE__)), 'fixtures', 'hooks') }
|
294
|
+
before do
|
295
|
+
script_folder = self.script_folder
|
296
|
+
RubyYacht.configure do
|
297
|
+
add_hooks folder: script_folder, app_type: :generic do
|
298
|
+
during(:install_libraries) { run_script 'hook2.rb' }
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
it "copies the scripts to the tmp directory" do
|
304
|
+
docker.expect("build -t apollo-generic-app-dependencies tmp") do
|
305
|
+
files = Dir[File.join('tmp', '*')]
|
306
|
+
expect(files).to include 'tmp/hook2.rb'
|
307
|
+
end
|
308
|
+
subject.run
|
309
|
+
end
|
310
|
+
|
311
|
+
it "builds a dependencies dockerfile that copies and runs he scripts" do
|
312
|
+
docker.expect("build -t apollo-generic-app-dependencies tmp") do
|
313
|
+
dockerfile = File.read(File.join('tmp', 'Dockerfile'))
|
314
|
+
expected = File.read(File.join('spec', 'fixtures', 'app-dependencies-dockerfile-generic-with-library-install'))
|
315
|
+
expect(dockerfile).to eq expected
|
316
|
+
end
|
317
|
+
subject.run
|
318
|
+
end
|
319
|
+
|
320
|
+
it "builds a normal before-startup" do
|
321
|
+
docker.expect("build -t apollo-mars tmp") do
|
322
|
+
startup = File.read(File.join('tmp', 'before_startup.bash'))
|
323
|
+
expected = File.read(File.join('spec', 'fixtures', 'mars-before-startup'))
|
324
|
+
expect(startup).to eq expected
|
325
|
+
end
|
326
|
+
subject.run
|
327
|
+
end
|
328
|
+
end
|
163
329
|
end
|
164
|
-
end
|
330
|
+
end
|
@@ -45,7 +45,7 @@ describe RubyYacht::Runner::Checkout do
|
|
45
45
|
it "runs the commands to check out the branch and update the app" do
|
46
46
|
docker.fail_unexpected_commands!
|
47
47
|
docker.expect "exec apollo-saturn bash -c 'cd /var/code; git fetch; git checkout .; git checkout issue1234; git pull'"
|
48
|
-
docker.expect "exec apollo-saturn
|
48
|
+
docker.expect "exec apollo-saturn /var/docker/before_startup.bash"
|
49
49
|
docker.expect "restart apollo-saturn"
|
50
50
|
subject.run
|
51
51
|
end
|
@@ -64,7 +64,7 @@ describe RubyYacht::Runner::Checkout do
|
|
64
64
|
subject.app = 'venus'
|
65
65
|
docker.fail_unexpected_commands!
|
66
66
|
docker.expect "exec jupiter-venus bash -c 'cd /var/code; git fetch; git checkout .; git checkout issue1234; git pull'"
|
67
|
-
docker.expect "exec jupiter-venus
|
67
|
+
docker.expect "exec jupiter-venus /var/docker/before_startup.bash"
|
68
68
|
docker.expect "restart jupiter-venus"
|
69
69
|
subject.run
|
70
70
|
end
|
@@ -1,6 +1,18 @@
|
|
1
1
|
module RubyYacht
|
2
2
|
def self.configure_test_project
|
3
3
|
RubyYacht.configuration.clear
|
4
|
+
RubyYacht.configure do
|
5
|
+
app_type(:generic) { baseline_image 'ubuntu' }
|
6
|
+
app_type(:debian) { baseline_image 'debian' }
|
7
|
+
end
|
8
|
+
|
9
|
+
RubyYacht.configure do
|
10
|
+
during :startup do
|
11
|
+
app_type :generic
|
12
|
+
command '/var/docker/start_app.bash'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
4
16
|
RubyYacht.configure do
|
5
17
|
project :apollo do
|
6
18
|
system_prefix :apollo
|
@@ -14,15 +26,13 @@ module RubyYacht
|
|
14
26
|
password "test"
|
15
27
|
end
|
16
28
|
|
17
|
-
|
29
|
+
generic_app :mars do
|
18
30
|
repository_name 'brownleej/mars'
|
19
31
|
end
|
20
32
|
|
21
|
-
|
33
|
+
debian_app :saturn do
|
22
34
|
repository_name 'brownleej/saturn'
|
23
35
|
end
|
24
|
-
|
25
|
-
secret_key_base 'abc'
|
26
36
|
end
|
27
37
|
end
|
28
38
|
end
|
@@ -41,15 +51,13 @@ module RubyYacht
|
|
41
51
|
password "test"
|
42
52
|
end
|
43
53
|
|
44
|
-
|
54
|
+
debian_app :venus do
|
45
55
|
repository_name 'brownleej/venus'
|
46
56
|
end
|
47
57
|
|
48
|
-
|
58
|
+
debian_app :saturn do
|
49
59
|
repository_name 'brownleej/saturn'
|
50
60
|
end
|
51
|
-
|
52
|
-
secret_key_base 'abc'
|
53
61
|
end
|
54
62
|
end
|
55
63
|
end
|