ruby_yacht 0.1.1 → 0.2.0

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.
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