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.
Files changed (67) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +1 -1
  3. data/doc/TODO.md +16 -6
  4. data/doc/configuration_sample.rb +8 -9
  5. data/lib/ruby_yacht/dsl/app.rb +29 -1
  6. data/lib/ruby_yacht/dsl/app_type.rb +112 -0
  7. data/lib/ruby_yacht/dsl/configuration.rb +163 -2
  8. data/lib/ruby_yacht/dsl/dsl.rb +51 -9
  9. data/lib/ruby_yacht/dsl/hook.rb +105 -0
  10. data/lib/ruby_yacht/dsl/project.rb +17 -21
  11. data/lib/ruby_yacht/dsl.rb +2 -0
  12. data/lib/ruby_yacht/images/app/Dockerfile.erb +20 -13
  13. data/lib/ruby_yacht/images/app/before_startup.bash.erb +8 -0
  14. data/lib/ruby_yacht/images/app/checkout.bash +6 -0
  15. data/lib/ruby_yacht/images/app/startup.bash.erb +5 -0
  16. data/lib/ruby_yacht/images/app-dependencies/Dockerfile.erb +23 -5
  17. data/lib/ruby_yacht/images/database/Dockerfile.erb +25 -11
  18. data/lib/ruby_yacht/images/database/checkout.bash +10 -0
  19. data/lib/ruby_yacht/images/database/setup.bash +15 -0
  20. data/lib/ruby_yacht/images/web/Dockerfile.erb +4 -3
  21. data/lib/ruby_yacht/plugins/rails/scripts/install_gems.rb +3 -0
  22. data/lib/ruby_yacht/plugins/rails/scripts/load_seeds.rb +34 -0
  23. data/lib/ruby_yacht/{images/app/startup.rb → plugins/rails/scripts/prepare_rails_for_launch.rb} +2 -8
  24. data/lib/ruby_yacht/{images/app/update_database_config.rb → plugins/rails/scripts/update_rails_config.rb} +0 -1
  25. data/lib/ruby_yacht/plugins/rails.rb +40 -0
  26. data/lib/ruby_yacht/plugins.rb +6 -0
  27. data/lib/ruby_yacht/runner/build_images.rb +72 -5
  28. data/lib/ruby_yacht/runner/checkout.rb +1 -1
  29. data/lib/ruby_yacht.rb +2 -1
  30. data/ruby_yacht.gemspec +2 -1
  31. data/spec/docker/Dockerfile +1 -1
  32. data/spec/dsl/app_spec.rb +34 -0
  33. data/spec/dsl/app_type_spec.rb +176 -0
  34. data/spec/dsl/configuration_spec.rb +161 -2
  35. data/spec/dsl/dsl_spec.rb +3 -3
  36. data/spec/dsl/hook_spec.rb +111 -0
  37. data/spec/dsl/project_spec.rb +19 -83
  38. data/spec/fixtures/app-dependencies-dockerfile-generic +21 -0
  39. data/spec/fixtures/app-dependencies-dockerfile-generic-with-library-install +28 -0
  40. data/spec/fixtures/app-dependencies-dockerfile-rails +32 -0
  41. data/spec/fixtures/database-dockerfile +16 -15
  42. data/spec/fixtures/database-dockerfile-rails +35 -0
  43. data/spec/fixtures/database-dockerfile-with-seed-hooks +34 -0
  44. data/spec/fixtures/hooks/hook1.rb +0 -0
  45. data/spec/fixtures/hooks/hook2.rb +0 -0
  46. data/spec/fixtures/mars-before-startup +4 -0
  47. data/spec/fixtures/mars-before-startup-rails +7 -0
  48. data/spec/fixtures/mars-before-startup-with-before-startup-hooks +7 -0
  49. data/spec/fixtures/mars-dockerfile +9 -14
  50. data/spec/fixtures/mars-dockerfile-rails +33 -0
  51. data/spec/fixtures/mars-dockerfile-with-after-checkout-hooks +30 -0
  52. data/spec/fixtures/mars-dockerfile-with-before-startup-hooks +29 -0
  53. data/spec/fixtures/mars-startup +3 -0
  54. data/spec/fixtures/mars-startup-rails +3 -0
  55. data/spec/fixtures/multi-project-web-dockerfile +0 -10
  56. data/spec/fixtures/web-dockerfile +0 -6
  57. data/spec/plugins/rails_spec.rb +198 -0
  58. data/spec/runner/build_images_spec.rb +181 -15
  59. data/spec/runner/checkout_spec.rb +2 -2
  60. data/spec/support/test_project.rb +16 -8
  61. metadata +62 -30
  62. data/lib/ruby_yacht/images/app/checkout.rb +0 -7
  63. data/lib/ruby_yacht/images/app-dependencies/install_gems.rb +0 -12
  64. data/lib/ruby_yacht/images/database/load_seeds.rb +0 -42
  65. data/lib/ruby_yacht/images/database/setup.rb +0 -19
  66. data/lib/ruby_yacht/images/database/setup_database.sql.erb +0 -12
  67. data/spec/fixtures/app-dependencies-dockerfile +0 -25
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_yacht
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - John Brownlee
@@ -14,52 +13,46 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: codeclimate-test-reporter
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: timecop
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
- description:
55
+ description: A DSL for building docker containers for a family of Rails apps
63
56
  email: apps@mail.johnbrownlee.com
64
57
  executables: []
65
58
  extensions: []
@@ -81,21 +74,21 @@ files:
81
74
  - lib/ruby_yacht.rb
82
75
  - lib/ruby_yacht/dsl.rb
83
76
  - lib/ruby_yacht/dsl/app.rb
77
+ - lib/ruby_yacht/dsl/app_type.rb
84
78
  - lib/ruby_yacht/dsl/configuration.rb
85
79
  - lib/ruby_yacht/dsl/database.rb
86
80
  - lib/ruby_yacht/dsl/dns_server.rb
87
81
  - lib/ruby_yacht/dsl/dsl.rb
82
+ - lib/ruby_yacht/dsl/hook.rb
88
83
  - lib/ruby_yacht/dsl/project.rb
89
84
  - lib/ruby_yacht/images/app-dependencies/Dockerfile.erb
90
- - lib/ruby_yacht/images/app-dependencies/install_gems.rb
91
85
  - lib/ruby_yacht/images/app/Dockerfile.erb
92
- - lib/ruby_yacht/images/app/checkout.rb
93
- - lib/ruby_yacht/images/app/startup.rb
94
- - lib/ruby_yacht/images/app/update_database_config.rb
86
+ - lib/ruby_yacht/images/app/before_startup.bash.erb
87
+ - lib/ruby_yacht/images/app/checkout.bash
88
+ - lib/ruby_yacht/images/app/startup.bash.erb
95
89
  - lib/ruby_yacht/images/database/Dockerfile.erb
96
- - lib/ruby_yacht/images/database/load_seeds.rb
97
- - lib/ruby_yacht/images/database/setup.rb
98
- - lib/ruby_yacht/images/database/setup_database.sql.erb
90
+ - lib/ruby_yacht/images/database/checkout.bash
91
+ - lib/ruby_yacht/images/database/setup.bash
99
92
  - lib/ruby_yacht/images/deploy/Dockerfile.erb
100
93
  - lib/ruby_yacht/images/web/Dockerfile.erb
101
94
  - lib/ruby_yacht/images/web/add_app.rb
@@ -104,6 +97,12 @@ files:
104
97
  - lib/ruby_yacht/images/web/index.html.erb
105
98
  - lib/ruby_yacht/images/web/index_config.erb
106
99
  - lib/ruby_yacht/images/web/setup.rb
100
+ - lib/ruby_yacht/plugins.rb
101
+ - lib/ruby_yacht/plugins/rails.rb
102
+ - lib/ruby_yacht/plugins/rails/scripts/install_gems.rb
103
+ - lib/ruby_yacht/plugins/rails/scripts/load_seeds.rb
104
+ - lib/ruby_yacht/plugins/rails/scripts/prepare_rails_for_launch.rb
105
+ - lib/ruby_yacht/plugins/rails/scripts/update_rails_config.rb
107
106
  - lib/ruby_yacht/runner.rb
108
107
  - lib/ruby_yacht/runner/build.rb
109
108
  - lib/ruby_yacht/runner/build_images.rb
@@ -120,17 +119,34 @@ files:
120
119
  - spec/docker/Dockerfile
121
120
  - spec/docker/build.bash
122
121
  - spec/dsl/app_spec.rb
122
+ - spec/dsl/app_type_spec.rb
123
123
  - spec/dsl/configuration_spec.rb
124
124
  - spec/dsl/database_spec.rb
125
125
  - spec/dsl/dns_server_spec.rb
126
126
  - spec/dsl/dsl_spec.rb
127
+ - spec/dsl/hook_spec.rb
127
128
  - spec/dsl/project_spec.rb
128
- - spec/fixtures/app-dependencies-dockerfile
129
+ - spec/fixtures/app-dependencies-dockerfile-generic
130
+ - spec/fixtures/app-dependencies-dockerfile-generic-with-library-install
131
+ - spec/fixtures/app-dependencies-dockerfile-rails
129
132
  - spec/fixtures/database-dockerfile
133
+ - spec/fixtures/database-dockerfile-rails
134
+ - spec/fixtures/database-dockerfile-with-seed-hooks
130
135
  - spec/fixtures/deploy-dockerfile
136
+ - spec/fixtures/hooks/hook1.rb
137
+ - spec/fixtures/hooks/hook2.rb
138
+ - spec/fixtures/mars-before-startup
139
+ - spec/fixtures/mars-before-startup-rails
140
+ - spec/fixtures/mars-before-startup-with-before-startup-hooks
131
141
  - spec/fixtures/mars-dockerfile
142
+ - spec/fixtures/mars-dockerfile-rails
143
+ - spec/fixtures/mars-dockerfile-with-after-checkout-hooks
144
+ - spec/fixtures/mars-dockerfile-with-before-startup-hooks
145
+ - spec/fixtures/mars-startup
146
+ - spec/fixtures/mars-startup-rails
132
147
  - spec/fixtures/multi-project-web-dockerfile
133
148
  - spec/fixtures/web-dockerfile
149
+ - spec/plugins/rails_spec.rb
134
150
  - spec/runner/build_images_spec.rb
135
151
  - spec/runner/build_spec.rb
136
152
  - spec/runner/checkout_spec.rb
@@ -148,43 +164,59 @@ files:
148
164
  homepage: https://github.com/brownleej/ruby-yacht
149
165
  licenses:
150
166
  - MIT
167
+ metadata: {}
151
168
  post_install_message:
152
169
  rdoc_options: []
153
170
  require_paths:
154
171
  - lib
155
172
  required_ruby_version: !ruby/object:Gem::Requirement
156
- none: false
157
173
  requirements:
158
- - - ! '>='
174
+ - - '>='
159
175
  - !ruby/object:Gem::Version
160
176
  version: '0'
161
177
  required_rubygems_version: !ruby/object:Gem::Requirement
162
- none: false
163
178
  requirements:
164
- - - ! '>='
179
+ - - '>='
165
180
  - !ruby/object:Gem::Version
166
181
  version: '0'
167
182
  requirements: []
168
183
  rubyforge_project:
169
- rubygems_version: 1.8.23
184
+ rubygems_version: 2.0.14.1
170
185
  signing_key:
171
- specification_version: 3
186
+ specification_version: 4
172
187
  summary: A DSL for building docker containers for a family of Rails apps
173
188
  test_files:
174
189
  - spec/docker/Dockerfile
175
190
  - spec/docker/build.bash
176
191
  - spec/dsl/app_spec.rb
192
+ - spec/dsl/app_type_spec.rb
177
193
  - spec/dsl/configuration_spec.rb
178
194
  - spec/dsl/database_spec.rb
179
195
  - spec/dsl/dns_server_spec.rb
180
196
  - spec/dsl/dsl_spec.rb
197
+ - spec/dsl/hook_spec.rb
181
198
  - spec/dsl/project_spec.rb
182
- - spec/fixtures/app-dependencies-dockerfile
199
+ - spec/fixtures/app-dependencies-dockerfile-generic
200
+ - spec/fixtures/app-dependencies-dockerfile-generic-with-library-install
201
+ - spec/fixtures/app-dependencies-dockerfile-rails
183
202
  - spec/fixtures/database-dockerfile
203
+ - spec/fixtures/database-dockerfile-rails
204
+ - spec/fixtures/database-dockerfile-with-seed-hooks
184
205
  - spec/fixtures/deploy-dockerfile
206
+ - spec/fixtures/hooks/hook1.rb
207
+ - spec/fixtures/hooks/hook2.rb
208
+ - spec/fixtures/mars-before-startup
209
+ - spec/fixtures/mars-before-startup-rails
210
+ - spec/fixtures/mars-before-startup-with-before-startup-hooks
185
211
  - spec/fixtures/mars-dockerfile
212
+ - spec/fixtures/mars-dockerfile-rails
213
+ - spec/fixtures/mars-dockerfile-with-after-checkout-hooks
214
+ - spec/fixtures/mars-dockerfile-with-before-startup-hooks
215
+ - spec/fixtures/mars-startup
216
+ - spec/fixtures/mars-startup-rails
186
217
  - spec/fixtures/multi-project-web-dockerfile
187
218
  - spec/fixtures/web-dockerfile
219
+ - spec/plugins/rails_spec.rb
188
220
  - spec/runner/build_images_spec.rb
189
221
  - spec/runner/build_spec.rb
190
222
  - spec/runner/checkout_spec.rb
@@ -1,7 +0,0 @@
1
- #! /usr/local/bin/ruby
2
-
3
- if !File.exist?('/var/code/Gemfile')
4
- repository_host = ENV['REPOSITORY_HOST']
5
- repository_name = ENV['REPOSITORY_NAME']
6
- system "git clone git@#{repository_host}:#{repository_name} /var/code"
7
- end
@@ -1,12 +0,0 @@
1
- #! /usr/local/bin/ruby
2
-
3
- require 'yaml'
4
-
5
- app_name = ARGV.shift
6
- repository_host = ARGV.shift
7
- repository_name = ARGV.shift
8
-
9
- puts "Installing gems for #{app_name}"
10
- system "mkdir -p /var/code"
11
- system "git clone git@#{repository_host}:#{repository_name} /var/code/#{app_name}"
12
- system "cd /var/code/#{app_name} && bundle install"
@@ -1,42 +0,0 @@
1
- #! /usr/local/bin/ruby
2
-
3
- require 'yaml'
4
- require 'fileutils'
5
-
6
- puts "Loading seeds"
7
-
8
- app_name = ARGV.shift
9
- name = ARGV.shift
10
- username = ARGV.shift
11
- password = ARGV.shift
12
- initialized_database = (ARGV.shift == 'true')
13
-
14
- puts "Creating #{name} database"
15
- system "service mysql start"
16
-
17
- directory = "/var/code/#{app_name}"
18
- config_path = "#{directory}/config/database.yml"
19
-
20
- FileUtils.cd directory
21
- database_config = {
22
- 'development' => {
23
- 'adapter' => 'mysql2',
24
- 'encoding' => 'utf8',
25
- 'reconnect' => true,
26
- 'username' => username,
27
- 'password' => password,
28
- 'host' => 'localhost',
29
- 'database' => name
30
- }
31
- }
32
-
33
- File.open(config_path, "w") do |file|
34
- file.write(database_config.to_yaml)
35
- end
36
-
37
- if initialized_database
38
- rake_command = "bundle exec rake db:migrate; bundle exec rake db:seed"
39
- else
40
- rake_command = "bundle exec rake db:reset"
41
- end
42
- system "bundle install; #{rake_command}"
@@ -1,19 +0,0 @@
1
- #! /usr/local/bin/ruby
2
-
3
- require 'erb'
4
- require 'yaml'
5
-
6
- @database_name = ARGV.shift
7
- @database_user = ARGV.shift
8
- @database_password = ARGV.shift
9
- @rails_environment = ARGV.shift
10
-
11
- system "service mysql start"
12
- system "mysql -uroot -e \"CREATE USER '#{@database_user}'@'localhost' IDENTIFIED BY '#{@database_password}'\""
13
- system "mysql -uroot -e \"CREATE USER '#{@database_user}'@'%' IDENTIFIED BY '#{@database_password}'\""
14
-
15
- template = ERB.new(File.read('/var/docker/setup_database.sql.erb'))
16
- File.open('/var/docker/create_database.sql', 'w') do |file|
17
- file.write(template.result(binding))
18
- end
19
- system "mysql -uroot < /var/docker/create_database.sql"
@@ -1,12 +0,0 @@
1
- <%
2
- if @rails_environment == 'development'
3
- database_names = %w(_development _test).map { |suffix| @database_name + suffix }
4
- else
5
- database_names = [@database_name]
6
- end
7
- %>
8
- <% database_names.each do |database_name| %>
9
- GRANT ALL ON <%= database_name %>.* to '<%= @database_user %>'@'localhost';
10
- GRANT ALL ON <%= database_name %>.* to '<%= @database_user %>'@'%';
11
- CREATE DATABASE <%= database_name %>;
12
- <% end %>
@@ -1,25 +0,0 @@
1
- # This Dockerfile creates an image for installing all of the gem dependencies
2
- # for all of the apps.
3
- #
4
- # This is a slow process, so this should be kept as simple as possible so that
5
- # it can remain unchanged.
6
-
7
- FROM ruby:2.3
8
-
9
- RUN mkdir -p /root/.ssh
10
- COPY id_rsa /root/.ssh
11
- RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
12
-
13
- RUN mkdir -p /var/docker/
14
- COPY install_gems.rb /var/docker/install_gems.rb
15
-
16
-
17
- RUN ruby /var/docker/install_gems.rb mars github.com brownleej/mars
18
-
19
- RUN ruby /var/docker/install_gems.rb saturn github.com brownleej/saturn
20
-
21
-
22
- RUN rm /var/docker/install_gems.rb
23
-
24
- RUN apt-get update && apt-get upgrade -y
25
- RUN apt-get install -y mysql-client