ruby_yacht 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.rdoc_options +8 -2
- data/.rspec +1 -0
- data/.travis.yml +17 -1
- data/Gemfile.lock +18 -2
- data/README.md +28 -10
- data/bin/ruby_yacht +5 -0
- data/doc/TODO.md +1 -20
- data/doc/configuration.md +104 -21
- data/doc/configuration_sample.rb +19 -8
- data/doc/contributing.md +28 -5
- data/doc/plugins.md +105 -45
- data/lib/ruby_yacht/dsl/app.rb +14 -18
- data/lib/ruby_yacht/dsl/configuration.rb +51 -32
- data/lib/ruby_yacht/dsl/database.rb +24 -8
- data/lib/ruby_yacht/dsl/dsl.rb +32 -4
- data/lib/ruby_yacht/dsl/hook.rb +182 -48
- data/lib/ruby_yacht/dsl/project.rb +20 -14
- data/lib/ruby_yacht/dsl/server_type.rb +14 -31
- data/lib/ruby_yacht/dsl/web_server.rb +87 -0
- data/lib/ruby_yacht/dsl.rb +1 -0
- data/lib/ruby_yacht/images/app/Dockerfile.erb +17 -6
- data/lib/ruby_yacht/images/app/before_startup.bash.erb +5 -3
- data/lib/ruby_yacht/images/app/startup.bash.erb +5 -2
- data/lib/ruby_yacht/images/app-dependencies/Dockerfile.erb +7 -11
- data/lib/ruby_yacht/images/database/Dockerfile.erb +7 -18
- data/lib/ruby_yacht/images/database/startup.bash.erb +1 -1
- data/lib/ruby_yacht/images/web/Dockerfile.erb +25 -19
- data/lib/ruby_yacht/plugins/mysql.rb +18 -8
- data/lib/ruby_yacht/{images/web → plugins/nginx/scripts}/add_app.rb +5 -5
- data/lib/ruby_yacht/{images/web → plugins/nginx/scripts}/add_project.rb +3 -3
- data/lib/ruby_yacht/plugins/nginx.rb +28 -0
- data/lib/ruby_yacht/plugins/rails/scripts/build_new_app.rb +10 -0
- data/lib/ruby_yacht/plugins/rails/scripts/update_rails_config.rb +6 -1
- data/lib/ruby_yacht/plugins/rails.rb +34 -19
- data/lib/ruby_yacht/plugins.rb +2 -1
- data/lib/ruby_yacht/runner/build_images.rb +87 -73
- data/lib/ruby_yacht/runner/checkout.rb +1 -1
- data/lib/ruby_yacht/runner/command.rb +13 -1
- data/lib/ruby_yacht/runner/create_new_project.rb +91 -0
- data/lib/ruby_yacht/runner/help.rb +1 -1
- data/lib/ruby_yacht/runner/run_containers.rb +17 -21
- data/lib/ruby_yacht/runner/runner.rb +27 -2
- data/lib/ruby_yacht/runner/services.rb +15 -10
- data/lib/ruby_yacht/runner/shell.rb +1 -1
- data/lib/ruby_yacht/runner/update_hosts.rb +16 -11
- data/lib/ruby_yacht/runner.rb +1 -0
- data/log/.gitkeep +0 -0
- data/ruby_yacht.gemspec +4 -2
- data/spec/docker/Dockerfile +19 -3
- data/spec/docker/install_gems.bash +5 -0
- data/spec/docker/run.bash +44 -0
- data/spec/docker/startup.bash +10 -0
- data/spec/dsl/app_spec.rb +66 -38
- data/spec/dsl/configuration_spec.rb +236 -30
- data/spec/dsl/database_spec.rb +103 -4
- data/spec/dsl/dsl_spec.rb +46 -3
- data/spec/dsl/hook_spec.rb +278 -57
- data/spec/dsl/project_spec.rb +75 -45
- data/spec/dsl/server_type_spec.rb +52 -12
- data/spec/dsl/web_server_spec.rb +160 -0
- data/spec/fixtures/apollo-new-project-config +20 -0
- data/spec/fixtures/app-dependencies-dockerfile-generic +4 -7
- data/spec/fixtures/app-dependencies-dockerfile-generic-with-library-install +6 -10
- data/spec/fixtures/app-dependencies-dockerfile-rails +9 -11
- data/spec/fixtures/app-dependencies-dockerfile-with-no-repository +20 -0
- data/spec/fixtures/database-dockerfile +1 -1
- data/spec/fixtures/database-dockerfile-mysql +3 -3
- data/spec/fixtures/database-dockerfile-rails +5 -4
- data/spec/fixtures/database-dockerfile-rails-with-no-repository +27 -0
- data/spec/fixtures/database-dockerfile-with-seed-hooks +3 -3
- data/spec/fixtures/database-startup-mysql +2 -1
- data/spec/fixtures/mars-before-startup +2 -2
- data/spec/fixtures/mars-before-startup-rails +5 -4
- data/spec/fixtures/mars-before-startup-with-before-startup-hooks +5 -4
- data/spec/fixtures/mars-before-startup-with-custom-file-copy +3 -3
- data/spec/fixtures/mars-before-startup-with-no-repository +3 -0
- data/spec/fixtures/mars-dockerfile +3 -2
- data/spec/fixtures/mars-dockerfile-rails +6 -5
- data/spec/fixtures/mars-dockerfile-rails-with-no-repository +32 -0
- data/spec/fixtures/mars-dockerfile-with-after-checkout-hooks +5 -4
- data/spec/fixtures/mars-dockerfile-with-before-startup-hooks +5 -4
- data/spec/fixtures/mars-dockerfile-with-custom-file-copy +4 -3
- data/spec/fixtures/mars-dockerfile-with-local-database +4 -2
- data/spec/fixtures/mars-dockerfile-with-no-repository +22 -0
- data/spec/fixtures/mars-dockerfile-with-remote-database +4 -2
- data/spec/fixtures/mars-startup +2 -2
- data/spec/fixtures/mars-startup-rails +2 -2
- data/spec/fixtures/mars-startup-rails-with-no-repository +5 -0
- data/spec/fixtures/mars-startup-with-no-repository +4 -0
- data/spec/fixtures/web-dockerfile +18 -11
- data/spec/fixtures/web-dockerfile-jupiter +28 -0
- data/spec/fixtures/web-dockerfile-nginx +38 -0
- data/spec/fixtures/web-dockerfile-with-eponymous-app +16 -10
- data/spec/fixtures/web-dockerfile-with-primary-app +16 -10
- data/spec/integration/build_images_spec.rb +210 -0
- data/spec/integration/build_spec.rb +23 -0
- data/spec/integration/checkout_spec.rb +94 -0
- data/spec/integration/create_new_project_spec.rb +50 -0
- data/spec/integration/implode_spec.rb +20 -0
- data/spec/integration/run.rb +93 -0
- data/spec/integration/run_containers_spec.rb +279 -0
- data/spec/integration/services_spec.rb +99 -0
- data/spec/integration/shell_spec.rb +31 -0
- data/spec/integration/update_hosts_spec.rb +35 -0
- data/spec/plugins/mysql_spec.rb +18 -1
- data/spec/plugins/nginx_spec.rb +66 -0
- data/spec/plugins/rails_spec.rb +61 -89
- data/spec/runner/build_images_spec.rb +111 -58
- data/spec/runner/command_spec.rb +55 -3
- data/spec/runner/create_new_project_spec.rb +93 -0
- data/spec/runner/help_spec.rb +5 -1
- data/spec/runner/run_containers_spec.rb +22 -10
- data/spec/runner/runner_spec.rb +31 -4
- data/spec/runner/services_spec.rb +32 -4
- data/spec/runner/update_hosts_spec.rb +2 -1
- data/spec/spec_helper.rb +16 -1
- data/spec/support/integration_helpers.rb +76 -0
- data/spec/support/test_project.rb +15 -3
- metadata +97 -14
- data/spec/docker/build.bash +0 -10
- data/spec/fixtures/deploy-dockerfile +0 -2
- data/spec/fixtures/multi-project-web-dockerfile +0 -25
- /data/lib/ruby_yacht/{images/web → plugins/nginx/scripts}/app_config.erb +0 -0
- /data/lib/ruby_yacht/{images/web → plugins/nginx/scripts}/index.html.erb +0 -0
- /data/lib/ruby_yacht/{images/web → plugins/nginx/scripts}/index_config.erb +0 -0
|
@@ -2,8 +2,8 @@ FROM apollo-generic-app-dependencies
|
|
|
2
2
|
|
|
3
3
|
ENV APP_PORT 8080
|
|
4
4
|
ENV REPOSITORY_HOST github.com
|
|
5
|
-
ENV REPOSITORY_NAME brownleej/mars
|
|
6
5
|
ENV SYSTEM_PREFIX apollo
|
|
6
|
+
ENV REPOSITORY_NAME brownleej/mars
|
|
7
7
|
|
|
8
8
|
RUN rm -r /var/code
|
|
9
9
|
RUN mkdir -p /var/code
|
|
@@ -11,13 +11,14 @@ RUN mkdir -p /var/code
|
|
|
11
11
|
COPY checkout.bash /var/docker/checkout.bash
|
|
12
12
|
COPY before_startup.bash /var/docker/before_startup.bash
|
|
13
13
|
COPY startup.bash /var/docker/startup.bash
|
|
14
|
-
COPY hook1.rb /var/docker/hook1.rb
|
|
15
14
|
|
|
16
15
|
RUN chmod u+x /var/docker/*
|
|
17
16
|
|
|
18
|
-
RUN /var/docker/checkout.bash
|
|
19
17
|
WORKDIR /var/code
|
|
20
|
-
|
|
18
|
+
|
|
19
|
+
RUN /var/docker/checkout.bash
|
|
20
|
+
COPY hook1.rb /var/docker/
|
|
21
|
+
RUN ruby /var/docker/hook1.rb
|
|
21
22
|
|
|
22
23
|
EXPOSE 8080
|
|
23
24
|
|
|
@@ -2,8 +2,8 @@ FROM apollo-generic-app-dependencies
|
|
|
2
2
|
|
|
3
3
|
ENV APP_PORT 8080
|
|
4
4
|
ENV REPOSITORY_HOST github.com
|
|
5
|
-
ENV REPOSITORY_NAME brownleej/mars
|
|
6
5
|
ENV SYSTEM_PREFIX apollo
|
|
6
|
+
ENV REPOSITORY_NAME brownleej/mars
|
|
7
7
|
|
|
8
8
|
RUN rm -r /var/code
|
|
9
9
|
RUN mkdir -p /var/code
|
|
@@ -11,14 +11,15 @@ RUN mkdir -p /var/code
|
|
|
11
11
|
COPY checkout.bash /var/docker/checkout.bash
|
|
12
12
|
COPY before_startup.bash /var/docker/before_startup.bash
|
|
13
13
|
COPY startup.bash /var/docker/startup.bash
|
|
14
|
-
COPY hook1.rb /var/docker/
|
|
15
|
-
COPY hook2.rb /var/docker/
|
|
14
|
+
COPY hook1.rb /var/docker/
|
|
15
|
+
COPY hook2.rb /var/docker/
|
|
16
16
|
|
|
17
17
|
RUN chmod u+x /var/docker/*
|
|
18
18
|
|
|
19
|
-
RUN /var/docker/checkout.bash
|
|
20
19
|
WORKDIR /var/code
|
|
21
20
|
|
|
21
|
+
RUN /var/docker/checkout.bash
|
|
22
|
+
|
|
22
23
|
EXPOSE 8080
|
|
23
24
|
|
|
24
25
|
CMD /var/docker/startup.bash
|
|
@@ -2,8 +2,8 @@ FROM apollo-generic-app-dependencies
|
|
|
2
2
|
|
|
3
3
|
ENV APP_PORT 8080
|
|
4
4
|
ENV REPOSITORY_HOST github.com
|
|
5
|
-
ENV REPOSITORY_NAME brownleej/mars
|
|
6
5
|
ENV SYSTEM_PREFIX apollo
|
|
6
|
+
ENV REPOSITORY_NAME brownleej/mars
|
|
7
7
|
|
|
8
8
|
RUN rm -r /var/code
|
|
9
9
|
RUN mkdir -p /var/code
|
|
@@ -11,13 +11,14 @@ RUN mkdir -p /var/code
|
|
|
11
11
|
COPY checkout.bash /var/docker/checkout.bash
|
|
12
12
|
COPY before_startup.bash /var/docker/before_startup.bash
|
|
13
13
|
COPY startup.bash /var/docker/startup.bash
|
|
14
|
-
COPY hook1.rb /var/docker/
|
|
14
|
+
COPY hook1.rb /var/docker/
|
|
15
15
|
|
|
16
16
|
RUN chmod u+x /var/docker/*
|
|
17
17
|
|
|
18
|
-
RUN /var/docker/checkout.bash
|
|
19
18
|
WORKDIR /var/code
|
|
20
19
|
|
|
20
|
+
RUN /var/docker/checkout.bash
|
|
21
|
+
|
|
21
22
|
EXPOSE 8080
|
|
22
23
|
|
|
23
24
|
CMD /var/docker/startup.bash
|
|
@@ -5,10 +5,11 @@ ENV DATABASE_NAME apollo
|
|
|
5
5
|
ENV DATABASE_PASSWORD test
|
|
6
6
|
ENV DATABASE_USERNAME apollo
|
|
7
7
|
ENV DATABASE_TYPE sqlite
|
|
8
|
+
ENV DATABASE_PORT 1234
|
|
8
9
|
ENV APP_PORT 8080
|
|
9
10
|
ENV REPOSITORY_HOST github.com
|
|
10
|
-
ENV REPOSITORY_NAME brownleej/mars
|
|
11
11
|
ENV SYSTEM_PREFIX apollo
|
|
12
|
+
ENV REPOSITORY_NAME brownleej/mars
|
|
12
13
|
|
|
13
14
|
RUN rm -r /var/code
|
|
14
15
|
RUN mkdir -p /var/code
|
|
@@ -19,9 +20,10 @@ COPY startup.bash /var/docker/startup.bash
|
|
|
19
20
|
|
|
20
21
|
RUN chmod u+x /var/docker/*
|
|
21
22
|
|
|
22
|
-
RUN /var/docker/checkout.bash
|
|
23
23
|
WORKDIR /var/code
|
|
24
24
|
|
|
25
|
+
RUN /var/docker/checkout.bash
|
|
26
|
+
|
|
25
27
|
EXPOSE 8080
|
|
26
28
|
|
|
27
29
|
CMD /var/docker/startup.bash
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
FROM apollo-generic-app-dependencies
|
|
2
|
+
|
|
3
|
+
ENV APP_PORT 8080
|
|
4
|
+
ENV REPOSITORY_HOST github.com
|
|
5
|
+
ENV SYSTEM_PREFIX apollo
|
|
6
|
+
|
|
7
|
+
RUN rm -r /var/code
|
|
8
|
+
RUN mkdir -p /var/code
|
|
9
|
+
|
|
10
|
+
COPY checkout.bash /var/docker/checkout.bash
|
|
11
|
+
COPY before_startup.bash /var/docker/before_startup.bash
|
|
12
|
+
COPY startup.bash /var/docker/startup.bash
|
|
13
|
+
|
|
14
|
+
RUN chmod u+x /var/docker/*
|
|
15
|
+
|
|
16
|
+
WORKDIR /var/code
|
|
17
|
+
|
|
18
|
+
RUN touch /var/code/app.bash
|
|
19
|
+
|
|
20
|
+
EXPOSE 8080
|
|
21
|
+
|
|
22
|
+
CMD /var/docker/startup.bash
|
|
@@ -5,10 +5,11 @@ ENV DATABASE_NAME apollo
|
|
|
5
5
|
ENV DATABASE_PASSWORD test
|
|
6
6
|
ENV DATABASE_USERNAME apollo
|
|
7
7
|
ENV DATABASE_TYPE mysql
|
|
8
|
+
ENV DATABASE_PORT 3306
|
|
8
9
|
ENV APP_PORT 8080
|
|
9
10
|
ENV REPOSITORY_HOST github.com
|
|
10
|
-
ENV REPOSITORY_NAME brownleej/mars
|
|
11
11
|
ENV SYSTEM_PREFIX apollo
|
|
12
|
+
ENV REPOSITORY_NAME brownleej/mars
|
|
12
13
|
|
|
13
14
|
RUN rm -r /var/code
|
|
14
15
|
RUN mkdir -p /var/code
|
|
@@ -19,9 +20,10 @@ COPY startup.bash /var/docker/startup.bash
|
|
|
19
20
|
|
|
20
21
|
RUN chmod u+x /var/docker/*
|
|
21
22
|
|
|
22
|
-
RUN /var/docker/checkout.bash
|
|
23
23
|
WORKDIR /var/code
|
|
24
24
|
|
|
25
|
+
RUN /var/docker/checkout.bash
|
|
26
|
+
|
|
25
27
|
EXPOSE 8080
|
|
26
28
|
|
|
27
29
|
CMD /var/docker/startup.bash
|
data/spec/fixtures/mars-startup
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#! /bin/bash
|
|
2
|
-
/var/docker/before_startup.bash
|
|
3
|
-
/var/docker/start_app.bash
|
|
2
|
+
/var/docker/before_startup.bash
|
|
3
|
+
/var/docker/start_app.bash
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#! /bin/bash
|
|
2
|
-
/var/docker/before_startup.bash
|
|
3
|
-
rails s -b 0.0.0.0 -p $APP_PORT -e $RAILS_ENV
|
|
2
|
+
/var/docker/before_startup.bash
|
|
3
|
+
rails s -b 0.0.0.0 -p $APP_PORT -e $RAILS_ENV
|
|
@@ -2,20 +2,27 @@ FROM nginx
|
|
|
2
2
|
|
|
3
3
|
RUN apt-get update
|
|
4
4
|
RUN apt-get upgrade -y
|
|
5
|
-
RUN apt-get install -y ruby
|
|
6
5
|
|
|
7
6
|
RUN mkdir -p /var/docker
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
COPY index.html.erb /var/docker/index.html.erb
|
|
12
|
-
COPY index_config.erb /var/docker/index_config.erb
|
|
13
|
-
COPY app_config.erb /var/docker/app_config.erb
|
|
8
|
+
ENV PROJECT apollo
|
|
9
|
+
ENV DOMAIN apollo.test.com
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
ENV APP_LIST mars,saturn
|
|
12
|
+
|
|
13
|
+
ENV APP_NAME mars
|
|
14
|
+
ENV APP_PORT 8080
|
|
15
|
+
ENV APP_PRIMARY false
|
|
16
|
+
|
|
17
|
+
ENV APP_NAME saturn
|
|
18
|
+
ENV APP_PORT 8080
|
|
19
|
+
ENV APP_PRIMARY false
|
|
18
20
|
|
|
19
21
|
RUN rm -r /var/docker
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
|
|
23
|
+
ENV PROJECT ""
|
|
24
|
+
ENV DOMAIN ""
|
|
25
|
+
ENV APP_LIST ""
|
|
26
|
+
ENV APP_NAME ""
|
|
27
|
+
ENV APP_PORT ""
|
|
28
|
+
ENV APP_PRIMARY ""
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
FROM nginx
|
|
2
|
+
|
|
3
|
+
RUN apt-get update
|
|
4
|
+
RUN apt-get upgrade -y
|
|
5
|
+
|
|
6
|
+
RUN mkdir -p /var/docker
|
|
7
|
+
|
|
8
|
+
ENV PROJECT jupiter
|
|
9
|
+
ENV DOMAIN jupiter.test.com
|
|
10
|
+
|
|
11
|
+
ENV APP_LIST venus,saturn
|
|
12
|
+
|
|
13
|
+
ENV APP_NAME venus
|
|
14
|
+
ENV APP_PORT 8080
|
|
15
|
+
ENV APP_PRIMARY false
|
|
16
|
+
|
|
17
|
+
ENV APP_NAME saturn
|
|
18
|
+
ENV APP_PORT 8080
|
|
19
|
+
ENV APP_PRIMARY false
|
|
20
|
+
|
|
21
|
+
RUN rm -r /var/docker
|
|
22
|
+
|
|
23
|
+
ENV PROJECT ""
|
|
24
|
+
ENV DOMAIN ""
|
|
25
|
+
ENV APP_LIST ""
|
|
26
|
+
ENV APP_NAME ""
|
|
27
|
+
ENV APP_PORT ""
|
|
28
|
+
ENV APP_PRIMARY ""
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
FROM nginx
|
|
2
|
+
|
|
3
|
+
RUN apt-get update
|
|
4
|
+
RUN apt-get upgrade -y
|
|
5
|
+
RUN apt-get install -y ruby
|
|
6
|
+
COPY index.html.erb /var/docker/
|
|
7
|
+
COPY index_config.erb /var/docker/
|
|
8
|
+
COPY app_config.erb /var/docker/
|
|
9
|
+
|
|
10
|
+
RUN mkdir -p /var/docker
|
|
11
|
+
|
|
12
|
+
ENV PROJECT apollo
|
|
13
|
+
ENV DOMAIN apollo.test.com
|
|
14
|
+
|
|
15
|
+
ENV APP_LIST mars,saturn
|
|
16
|
+
COPY add_project.rb /var/docker/
|
|
17
|
+
RUN ruby /var/docker/add_project.rb
|
|
18
|
+
|
|
19
|
+
ENV APP_NAME mars
|
|
20
|
+
ENV APP_PORT 8080
|
|
21
|
+
ENV APP_PRIMARY false
|
|
22
|
+
COPY add_app.rb /var/docker/
|
|
23
|
+
RUN ruby /var/docker/add_app.rb
|
|
24
|
+
|
|
25
|
+
ENV APP_NAME saturn
|
|
26
|
+
ENV APP_PORT 8080
|
|
27
|
+
ENV APP_PRIMARY false
|
|
28
|
+
COPY add_app.rb /var/docker/
|
|
29
|
+
RUN ruby /var/docker/add_app.rb
|
|
30
|
+
|
|
31
|
+
RUN rm -r /var/docker
|
|
32
|
+
|
|
33
|
+
ENV PROJECT ""
|
|
34
|
+
ENV DOMAIN ""
|
|
35
|
+
ENV APP_LIST ""
|
|
36
|
+
ENV APP_NAME ""
|
|
37
|
+
ENV APP_PORT ""
|
|
38
|
+
ENV APP_PRIMARY ""
|
|
@@ -2,19 +2,25 @@ FROM nginx
|
|
|
2
2
|
|
|
3
3
|
RUN apt-get update
|
|
4
4
|
RUN apt-get upgrade -y
|
|
5
|
-
RUN apt-get install -y ruby
|
|
6
5
|
|
|
7
6
|
RUN mkdir -p /var/docker
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
COPY index.html.erb /var/docker/index.html.erb
|
|
12
|
-
COPY index_config.erb /var/docker/index_config.erb
|
|
13
|
-
COPY app_config.erb /var/docker/app_config.erb
|
|
8
|
+
ENV PROJECT apollo
|
|
9
|
+
ENV DOMAIN apollo.test.com
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
ENV APP_NAME apollo
|
|
12
|
+
ENV APP_PORT 8080
|
|
13
|
+
ENV APP_PRIMARY true
|
|
14
|
+
|
|
15
|
+
ENV APP_NAME saturn
|
|
16
|
+
ENV APP_PORT 8080
|
|
17
|
+
ENV APP_PRIMARY false
|
|
17
18
|
|
|
18
19
|
RUN rm -r /var/docker
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
ENV PROJECT ""
|
|
22
|
+
ENV DOMAIN ""
|
|
23
|
+
ENV APP_LIST ""
|
|
24
|
+
ENV APP_NAME ""
|
|
25
|
+
ENV APP_PORT ""
|
|
26
|
+
ENV APP_PRIMARY ""
|
|
@@ -2,19 +2,25 @@ FROM nginx
|
|
|
2
2
|
|
|
3
3
|
RUN apt-get update
|
|
4
4
|
RUN apt-get upgrade -y
|
|
5
|
-
RUN apt-get install -y ruby
|
|
6
5
|
|
|
7
6
|
RUN mkdir -p /var/docker
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
COPY index.html.erb /var/docker/index.html.erb
|
|
12
|
-
COPY index_config.erb /var/docker/index_config.erb
|
|
13
|
-
COPY app_config.erb /var/docker/app_config.erb
|
|
8
|
+
ENV PROJECT apollo
|
|
9
|
+
ENV DOMAIN apollo.test.com
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
ENV APP_NAME mars
|
|
12
|
+
ENV APP_PORT 8080
|
|
13
|
+
ENV APP_PRIMARY true
|
|
14
|
+
|
|
15
|
+
ENV APP_NAME saturn
|
|
16
|
+
ENV APP_PORT 8080
|
|
17
|
+
ENV APP_PRIMARY false
|
|
17
18
|
|
|
18
19
|
RUN rm -r /var/docker
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
ENV PROJECT ""
|
|
22
|
+
ENV DOMAIN ""
|
|
23
|
+
ENV APP_LIST ""
|
|
24
|
+
ENV APP_NAME ""
|
|
25
|
+
ENV APP_PORT ""
|
|
26
|
+
ENV APP_PRIMARY ""
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe RubyYacht::Runner::BuildImages, :integration do
|
|
4
|
+
include IntegrationHelpers
|
|
5
|
+
|
|
6
|
+
def start_database
|
|
7
|
+
system "docker run -d --net=apollo --net-alias=apollo-database --name=apollo-database apollo-database > /dev/null"
|
|
8
|
+
wait_on_command_result 'docker run --rm --net=apollo apollo-mars mysql -uapollo -ptestpass -hapollo-database', does_not_contain: 'ERROR'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:images) { `docker images | grep "apollo\\|jupiter"`.split("\n").collect { |line| line.split(/\s+/).first }.sort }
|
|
12
|
+
|
|
13
|
+
before :all do
|
|
14
|
+
configure_project
|
|
15
|
+
system 'docker network create apollo 1> /dev/null 2> /dev/null'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "with the standard config" do
|
|
19
|
+
before :all do
|
|
20
|
+
run_command 'build_images'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
after do
|
|
24
|
+
IntegrationHelpers.clear_docker_containers
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "creates images for the app, dependencies, database, and web server" do
|
|
28
|
+
expect(images).to eq ['apollo-database', 'apollo-mars', 'apollo-rails-app-dependencies', 'apollo-saturn', 'apollo-web']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "populates the tables in the database image" do
|
|
32
|
+
start_database
|
|
33
|
+
|
|
34
|
+
results = run_command_in_docker :mars, 'mysql -uapollo -ptestpass -hapollo-database -e "use apollo; show tables"'
|
|
35
|
+
results = results.split("\n").collect { |line| line.delete('|').strip }.sort
|
|
36
|
+
results.shift
|
|
37
|
+
expect(results).to eq %w(clients posts schema_migrations users)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "populates the seed data in the database image" do
|
|
41
|
+
start_database
|
|
42
|
+
|
|
43
|
+
results = run_command_in_docker :mars, 'mysql -uapollo -ptestpass -hapollo-database -e "select count(*) FROM apollo.users"'
|
|
44
|
+
results = results.split("\n").collect { |line| line.delete('|').strip }
|
|
45
|
+
results.shift
|
|
46
|
+
expect(results).to eq ['1']
|
|
47
|
+
|
|
48
|
+
results = run_command_in_docker :mars, 'mysql -uapollo -ptestpass -hapollo-database -e "select name FROM apollo.clients"'
|
|
49
|
+
results = results.split("\n").collect { |line| line.delete('|').strip }
|
|
50
|
+
results.shift
|
|
51
|
+
expect(results).to eq ['Test Client']
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "creates a test database" do
|
|
55
|
+
start_database
|
|
56
|
+
|
|
57
|
+
results = run_command_in_docker :mars, 'mysql -uapollo -ptestpass -hapollo-database apollo_test 2>&1'
|
|
58
|
+
expect(results).not_to include 'ERROR'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "installs the gems on the app dependency image" do
|
|
62
|
+
results = run_command_in_docker 'rails-app-dependencies', 'gem list'
|
|
63
|
+
expect(results).to include 'mysql2'
|
|
64
|
+
expect(results).to include 'sass-rails'
|
|
65
|
+
expect(results).to include 'byebug'
|
|
66
|
+
expect(results).to include 'factory_girl'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "leaves all the apps checked out on the app dependency image" do
|
|
70
|
+
results = run_command_in_docker 'rails-app-dependencies', 'ls /var/code'
|
|
71
|
+
folders = results.split("\n")
|
|
72
|
+
expect(folders).to include 'mars'
|
|
73
|
+
expect(folders).to include 'saturn'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "installs the gems on the app images" do
|
|
77
|
+
results = run_command_in_docker :mars, 'gem list'
|
|
78
|
+
expect(results).to include 'mysql2'
|
|
79
|
+
expect(results).not_to include 'sass-rails'
|
|
80
|
+
expect(results).to include 'byebug'
|
|
81
|
+
expect(results).to include 'factory_girl'
|
|
82
|
+
|
|
83
|
+
results = run_command_in_docker :saturn, 'gem list'
|
|
84
|
+
expect(results).to include 'mysql2'
|
|
85
|
+
expect(results).to include 'sass-rails'
|
|
86
|
+
expect(results).not_to include 'byebug'
|
|
87
|
+
expect(results).not_to include 'factory_girl'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'installs mysql on the app images' do
|
|
91
|
+
results = run_command_in_docker :mars, 'which mysql'
|
|
92
|
+
expect(results).to eq "/usr/bin/mysql\n"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "checks out just the single app on the app image" do
|
|
96
|
+
results = run_command_in_docker :mars, 'ls /var/code'
|
|
97
|
+
folders = results.split("\n")
|
|
98
|
+
expect(folders).to include 'app'
|
|
99
|
+
expect(folders).to include 'db'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "installs the scripts in the /var/docker folder in the app image" do
|
|
103
|
+
results = run_command_in_docker :mars, 'ls /var/docker'
|
|
104
|
+
files = results.split("\n")
|
|
105
|
+
expect(files).to include 'checkout.bash'
|
|
106
|
+
expect(files).to include 'before_startup.bash'
|
|
107
|
+
expect(files).to include 'startup.bash'
|
|
108
|
+
expect(files).to include 'update_rails_config.rb'
|
|
109
|
+
expect(files).to include 'prepare_rails_for_launch.rb'
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context 'with no database server' do
|
|
114
|
+
before :all do
|
|
115
|
+
system "docker rmi apollo-database 1> /dev/null 2> /dev/null"
|
|
116
|
+
run_command 'build_images', environment: { SKIP_DATABASE: 1 }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "does not build a database image" do
|
|
120
|
+
expect(images).to eq ['apollo-mars', 'apollo-rails-app-dependencies', 'apollo-saturn', 'apollo-web']
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it 'does not install mysql on the app servers' do
|
|
124
|
+
results = run_command_in_docker :mars, 'which mysql'
|
|
125
|
+
expect(results).to eq ''
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context 'with a production environment' do
|
|
130
|
+
before :all do
|
|
131
|
+
run_command 'build_images', environment: { USE_PRODUCTION_ENVIRONMENT: 1 }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
after :all do
|
|
135
|
+
IntegrationHelpers.clear_docker_containers
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "does not install the non-production gems" do
|
|
139
|
+
results = run_command_in_docker 'rails-app-dependencies', 'gem list'
|
|
140
|
+
expect(results).to include 'mysql2'
|
|
141
|
+
expect(results).not_to include 'byebug'
|
|
142
|
+
expect(results).not_to include 'factory_girl'
|
|
143
|
+
|
|
144
|
+
results = run_command_in_docker :mars, 'gem list'
|
|
145
|
+
expect(results).to include 'mysql2'
|
|
146
|
+
expect(results).not_to include 'byebug'
|
|
147
|
+
expect(results).not_to include 'factory_girl'
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "does not create a test database" do
|
|
151
|
+
start_database
|
|
152
|
+
results = run_command_in_docker :mars, 'mysql -uapollo -ptestpass -hapollo-database apollo_test 2>&1'
|
|
153
|
+
expect(results).to include 'ERROR'
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context "with an app with the same name as the project" do
|
|
158
|
+
before :all do
|
|
159
|
+
system "docker rmi apollo-mars 1> /dev/null 2> /dev/null"
|
|
160
|
+
run_command 'build_images', environment: { CREATE_TITULAR_APP: 1 }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
after :all do
|
|
164
|
+
system "docker rmi apollo 1> /dev/null"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "creates an image with the same name as the project" do
|
|
168
|
+
expect(images).to eq ['apollo', 'apollo-database', 'apollo-rails-app-dependencies', 'apollo-saturn', 'apollo-web']
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "checks out the app onto the image" do
|
|
172
|
+
results = `docker run --rm apollo ls /var/code/app/models`
|
|
173
|
+
expect(results).to include 'user.rb'
|
|
174
|
+
expect(results).to include 'post.rb'
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
context "with a second project" do
|
|
179
|
+
before :all do
|
|
180
|
+
run_command 'build_images', environment: { CREATE_SECOND_PROJECT: 1 }
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
after :all do
|
|
184
|
+
IntegrationHelpers.image_names.select { |name| name =~ /jupiter/ }.each do |name|
|
|
185
|
+
`docker rmi #{name} 1> /dev/null`
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "creates images for the app, dependencies, database, and web server" do
|
|
190
|
+
expect(images).to eq ['apollo-database', 'apollo-mars', 'apollo-rails-app-dependencies', 'apollo-saturn', 'apollo-web', 'jupiter-database', 'jupiter-rails-app-dependencies', 'jupiter-saturn', 'jupiter-web']
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
context 'with no repository name' do
|
|
195
|
+
before :all do
|
|
196
|
+
run_command 'build_images', environment: { NO_REPOSITORY: 1 }
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
it 'creates images for the app, dependencies, database, and web server' do
|
|
201
|
+
expect(images).to eq ['apollo-database', 'apollo-mars', 'apollo-rails-app-dependencies', 'apollo-saturn', 'apollo-web']
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it 'creates a fresh app in the app image' do
|
|
205
|
+
results = run_command_in_docker :mars, 'ls /var/code'
|
|
206
|
+
expect(results).to include 'app'
|
|
207
|
+
expect(results).to include 'Gemfile'
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RubyYacht::Runner::Build, :integration do
|
|
4
|
+
include IntegrationHelpers
|
|
5
|
+
|
|
6
|
+
before :all do
|
|
7
|
+
configure_project
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
run_command 'build'
|
|
12
|
+
wait_on_command_success 'curl apollo.johnbrownlee.com'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
after :all do
|
|
16
|
+
restore_hosts_file
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "allows accessing the containers through their hostnames" do
|
|
20
|
+
results = `curl apollo.johnbrownlee.com 2>&1`
|
|
21
|
+
expect(results).to include '<a href="http://mars.apollo.johnbrownlee.com/">'
|
|
22
|
+
end
|
|
23
|
+
end
|