roro 0.3.13 → 0.3.21

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 (214) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +55 -11
  3. data/.gitignore +3 -2
  4. data/Guardfile +8 -10
  5. data/README.md +2 -1
  6. data/lib/roro.rb +3 -1
  7. data/lib/roro/cli.rb +16 -74
  8. data/lib/roro/cli/generate/exposed.rb +14 -0
  9. data/lib/roro/cli/generate/{generate_keys.rb → keys.rb} +24 -2
  10. data/lib/roro/cli/generate/obfuscated.rb +17 -0
  11. data/lib/roro/cli/generate/story.rb +18 -0
  12. data/lib/roro/cli/greenfield/rails.rb +14 -0
  13. data/lib/roro/cli/rollon.rb +126 -63
  14. data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
  15. data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
  16. data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
  17. data/lib/roro/cli/rollon/rails/database.rb +26 -0
  18. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_mysql.rb +4 -4
  19. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_postgresql.rb +5 -6
  20. data/lib/roro/cli/rollon/ruby_gem.rb +1 -0
  21. data/lib/roro/cli/rollon/{stories/ruby_gem → ruby_gem}/with_ci_cd.rb +8 -8
  22. data/lib/roro/cli/rollon/stories.rb +2 -2
  23. data/lib/roro/configurator.rb +15 -0
  24. data/lib/roro/configurator/eligibility.rb +137 -0
  25. data/lib/roro/configurator/okonomi.rb +28 -0
  26. data/lib/roro/configurator/omakase.rb +170 -0
  27. data/lib/roro/crypto.rb +73 -0
  28. data/lib/roro/stories/greenfield.yml +1 -0
  29. data/lib/roro/stories/greenfield/rails.yml +9 -0
  30. data/lib/roro/stories/rollon.yml +42 -0
  31. data/lib/roro/stories/rollon/rails.yml +76 -0
  32. data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
  33. data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
  34. data/lib/roro/stories/rollon/rails/database.yml +9 -0
  35. data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
  36. data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
  37. data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
  38. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
  39. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
  40. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
  41. data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
  42. data/lib/roro/templates/base/.circleci/_aliases.yml +8 -0
  43. data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
  44. data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
  45. data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
  46. data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
  47. data/lib/roro/templates/base/.circleci/_version.yml +1 -0
  48. data/lib/roro/templates/base/.circleci/_workflow.yml +2 -0
  49. data/lib/roro/templates/base/.circleci/config.job-example.yml +33 -0
  50. data/lib/roro/templates/base/.circleci/jobs/_build.yml +4 -0
  51. data/lib/roro/templates/base/.circleci/jobs/_release.yml +12 -0
  52. data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +10 -0
  53. data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
  54. data/lib/roro/templates/base/dotenv +1 -0
  55. data/lib/roro/{cli/rollon/stories/rails → templates/base/jumpstart}/.keep +0 -0
  56. data/lib/roro/{cli/templates → templates/base}/jumpstart/Dockerfile.tt +0 -0
  57. data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-compose.yml +0 -0
  58. data/lib/roro/{cli/templates → templates/base}/jumpstart/docker-entrypoint.sh +0 -0
  59. data/lib/roro/{cli/templates → templates/base}/livereload/hosts.example +0 -0
  60. data/lib/roro/{cli/templates/base → templates/base/roro}/.keep +0 -0
  61. data/lib/roro/{cli/templates/jumpstart → templates/base/roro/roro}/.keep +0 -0
  62. data/lib/roro/{cli/templates/roro → templates/base/roro/roro/containers}/.keep +0 -0
  63. data/lib/roro/{cli/templates/roro/roro → templates/base/roro/roro/containers/app}/.keep +0 -0
  64. data/lib/roro/{cli/templates/roro/roro/containers → templates/base/roro/roro/containers/frontend}/.keep +0 -0
  65. data/lib/roro/{cli/templates → templates/base}/roro/roro/docker-entrypoint.sh.tt +0 -0
  66. data/lib/roro/{cli/templates/roro/roro/containers/app → templates/rails/.circleci}/.keep +0 -0
  67. data/lib/roro/templates/rails/.circleci/config.yml.tt +11 -0
  68. data/lib/roro/templates/rails/.circleci/jobs/_build.yml +14 -0
  69. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  70. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  71. data/lib/roro/{cli/templates/ruby_gem → templates/rails}/.circleci/setup-gem-credentials.sh +0 -0
  72. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  73. data/lib/roro/{cli/templates/roro/roro/containers/frontend → templates/rails}/.keep +0 -0
  74. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  75. data/lib/roro/{cli/templates/base → templates/rails}/config/database.mysql.yml +0 -0
  76. data/lib/roro/{cli/templates/base → templates/rails}/config/database.pg.yml +2 -3
  77. data/lib/roro/templates/rails/database/with_mysql/_service.yml +10 -0
  78. data/lib/roro/{cli/templates/ruby_gem/.circleci → templates/rails/database/with_postgresql}/.keep +0 -0
  79. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +7 -0
  80. data/lib/roro/{cli/templates/roro → templates/rails}/docker-compose.yml.tt +9 -10
  81. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/rails/dotenv}/.keep +0 -0
  82. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  83. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  84. data/lib/roro/templates/rails/dotenv/web.env.tt +2 -0
  85. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  86. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/rails/roro}/.keep +0 -0
  87. data/lib/roro/{cli/templates/stories → templates/rails/roro/containers}/.keep +0 -0
  88. data/lib/roro/{cli/templates/stories/rails/database/with_postgresql → templates/rails/roro/containers/app}/.keep +0 -0
  89. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  90. data/lib/roro/{cli/templates/stories/with_postgresql → templates/rails/roro/containers/frontend}/.keep +0 -0
  91. data/lib/roro/templates/rails/roro/docker-entrypoint.sh +8 -0
  92. data/lib/roro/{cli/rollon/stories/database.rb → templates/rails/roro/kube/.keep} +0 -0
  93. data/lib/roro/templates/rails/roro/kube/certificate.yml.tt +0 -0
  94. data/lib/roro/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  95. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  96. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  97. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  98. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  99. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  100. data/lib/roro/templates/rails/roro/kube/ingress.yml.tt +0 -0
  101. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  102. data/lib/roro/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  103. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  104. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  105. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  106. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  107. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  108. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  109. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  110. data/lib/roro/templates/ruby_gem/.circleci/.keep +0 -0
  111. data/lib/roro/templates/ruby_gem/.circleci/config.yml.tt +16 -0
  112. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  113. data/lib/roro/templates/ruby_gem/.circleci/setup-gem-credentials.sh +3 -0
  114. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  115. data/lib/roro/templates/ruby_gem/roro/containers/.keep +0 -0
  116. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  117. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  118. data/lib/roro/templates/ruby_gem/roro/keys/.keep +0 -0
  119. data/lib/roro/version.rb +1 -1
  120. data/roro.gemspec +11 -21
  121. data/roro/containers/app/Dockerfile +51 -0
  122. metadata +165 -173
  123. data/lib/roro/cli/base/base.rb +0 -8
  124. data/lib/roro/cli/base/base_files.rb +0 -24
  125. data/lib/roro/cli/base/check_dependencies.rb +0 -98
  126. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  127. data/lib/roro/cli/base/utilities.rb +0 -39
  128. data/lib/roro/cli/cli.rb +0 -99
  129. data/lib/roro/cli/configuration.rb +0 -69
  130. data/lib/roro/cli/expose.rb +0 -14
  131. data/lib/roro/cli/generate/config.rb +0 -13
  132. data/lib/roro/cli/generate/config/rails.rb +0 -17
  133. data/lib/roro/cli/greenfield.rb +0 -31
  134. data/lib/roro/cli/obfuscate.rb +0 -19
  135. data/lib/roro/cli/rollon/stories/rails.rb +0 -1
  136. data/lib/roro/cli/rollon/stories/rails/database.rb +0 -33
  137. data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
  138. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  139. data/lib/roro/cli/roro_configurator.yml +0 -157
  140. data/lib/roro/cli/ruby_gem.rb +0 -67
  141. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  142. data/lib/roro/cli/templates/base/Dockerfile.tt +0 -82
  143. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +0 -43
  144. data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +0 -40
  145. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  146. data/lib/roro/cli/templates/stories/rails/database/with_mysql/_service.yml +0 -10
  147. data/lib/roro/cli/templates/stories/rails/database/with_postgresql/_service.yml +0 -7
  148. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  149. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +0 -10
  150. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +0 -7
  151. data/lib/tasks/deploy.rake +0 -126
  152. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  153. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  154. data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
  155. data/vendor/cache/addressable-2.7.0.gem +0 -0
  156. data/vendor/cache/builder-3.2.4.gem +0 -0
  157. data/vendor/cache/byebug-11.1.3.gem +0 -0
  158. data/vendor/cache/coderay-1.1.3.gem +0 -0
  159. data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
  160. data/vendor/cache/crass-1.0.6.gem +0 -0
  161. data/vendor/cache/em-websocket-0.5.1.gem +0 -0
  162. data/vendor/cache/erubi-1.9.0.gem +0 -0
  163. data/vendor/cache/eventmachine-1.2.7.gem +0 -0
  164. data/vendor/cache/ffi-1.13.1.gem +0 -0
  165. data/vendor/cache/formatador-0.2.5.gem +0 -0
  166. data/vendor/cache/gem-release-2.1.1.gem +0 -0
  167. data/vendor/cache/given_core-3.8.0.gem +0 -0
  168. data/vendor/cache/guard-2.16.2.gem +0 -0
  169. data/vendor/cache/guard-compat-1.2.1.gem +0 -0
  170. data/vendor/cache/guard-livereload-2.5.2.gem +0 -0
  171. data/vendor/cache/guard-minitest-2.4.6.gem +0 -0
  172. data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
  173. data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
  174. data/vendor/cache/http_parser.rb-0.6.0.gem +0 -0
  175. data/vendor/cache/i18n-1.8.5.gem +0 -0
  176. data/vendor/cache/launchy-2.5.0.gem +0 -0
  177. data/vendor/cache/listen-3.2.1.gem +0 -0
  178. data/vendor/cache/loofah-2.6.0.gem +0 -0
  179. data/vendor/cache/lumberjack-1.2.7.gem +0 -0
  180. data/vendor/cache/method_source-1.0.0.gem +0 -0
  181. data/vendor/cache/mini_portile2-2.4.0.gem +0 -0
  182. data/vendor/cache/minitest-5.14.1.gem +0 -0
  183. data/vendor/cache/minitest-given-3.8.0.gem +0 -0
  184. data/vendor/cache/minitest-matchers_vaccine-1.0.4.gem +0 -0
  185. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  186. data/vendor/cache/mocha-1.11.2.gem +0 -0
  187. data/vendor/cache/multi_json-1.15.0.gem +0 -0
  188. data/vendor/cache/nenv-0.3.0.gem +0 -0
  189. data/vendor/cache/net-scp-3.0.0.gem +0 -0
  190. data/vendor/cache/net-ssh-6.1.0.gem +0 -0
  191. data/vendor/cache/nokogiri-1.10.10.gem +0 -0
  192. data/vendor/cache/notiffany-0.1.3.gem +0 -0
  193. data/vendor/cache/os-1.0.0.gem +0 -0
  194. data/vendor/cache/pry-0.13.1.gem +0 -0
  195. data/vendor/cache/public_suffix-4.0.5.gem +0 -0
  196. data/vendor/cache/rack-2.2.3.gem +0 -0
  197. data/vendor/cache/rack-livereload-0.3.17.gem +0 -0
  198. data/vendor/cache/rack-test-1.1.0.gem +0 -0
  199. data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
  200. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  201. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  202. data/vendor/cache/rake-13.0.1.gem +0 -0
  203. data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
  204. data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
  205. data/vendor/cache/shellany-0.0.1.gem +0 -0
  206. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  207. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  208. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
  209. data/vendor/cache/sorcerer-2.0.1.gem +0 -0
  210. data/vendor/cache/sshkit-1.18.2.gem +0 -0
  211. data/vendor/cache/thor-1.0.1.gem +0 -0
  212. data/vendor/cache/thread_safe-0.3.6.gem +0 -0
  213. data/vendor/cache/tzinfo-1.2.7.gem +0 -0
  214. data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
@@ -0,0 +1,11 @@
1
+ <%= yaml_from_template("base/.circleci/_version.yml") %>
2
+ <%= yaml_from_template("base/.circleci/_defaults.yml") %>
3
+ <%= yaml_from_template("base/.circleci/_major_only.yml") %>
4
+ <%= yaml_from_template("base/.circleci/_executors.yml") %>
5
+ <%= yaml_from_template("base/.circleci/_commands.yml") %>
6
+
7
+ <%= yaml_from_template("rails/.circleci/jobs/_build.yml") %>
8
+ <%= yaml_from_template("rails/.circleci/jobs/_test.yml") %>
9
+ <%= yaml_from_template("rails/.circleci/jobs/_push.yml") %>
10
+ <%= yaml_from_template("base/.circleci/_workflow.yml") %>
11
+ <%= yaml_from_template("rails/.circleci/workflows/_build_test_push.yml") %>
@@ -0,0 +1,14 @@
1
+ jobs:
2
+ build:
3
+ <<: *defaults
4
+ steps:
5
+ - checkout
6
+ - run: gem install roro
7
+ - run: roro generate::exposed ci
8
+ - run: |
9
+ mkdir -p workspace
10
+ cp -r roro workspace/
11
+ - persist_to_workspace:
12
+ root: workspace
13
+ paths:
14
+ - roro
@@ -0,0 +1,11 @@
1
+ push:
2
+ <<: *defaults
3
+ steps:
4
+ - checkout
5
+ - attach-roro
6
+ - run: docker-compose build
7
+ - run: docker login -u ${DOCKER_USER} -p ${DOCKER_PASS}
8
+ - tag-and-push:
9
+ deploy_tag: ${DEPLOY_TAG}
10
+ - tag-and-push:
11
+ deploy_tag: 'latest'
@@ -0,0 +1,12 @@
1
+ test:
2
+ <<: *defaults
3
+ steps:
4
+ - checkout
5
+ - attach-roro
6
+ - run: docker-compose build
7
+ - run: docker-compose up -d
8
+ - run: docker-compose run app bundle
9
+ - run: docker-compose run app yarn
10
+ - run: docker-compose run app bin/rails db:create
11
+ - run: docker-compose run app bin/rails db:migrate
12
+ - run: docker-compose run app bin/rails test
@@ -0,0 +1,12 @@
1
+ build-test-push:
2
+ jobs:
3
+ - build:
4
+ <<: *major_only
5
+ - test:
6
+ <<: *major_only
7
+ requires:
8
+ - build
9
+ - push:
10
+ <<: *major_only
11
+ requires:
12
+ - build
@@ -0,0 +1,51 @@
1
+ FROM ruby:<%= config[:ruby_version] %>-alpine AS builder
2
+
3
+ LABEL maintainer="<%= config[:docker_email] %> using RoRo"
4
+
5
+ # Add basic packages
6
+ RUN apk add --no-cache \
7
+ build-base \
8
+ postgresql-dev \
9
+ git \
10
+ nodejs \
11
+ yarn \
12
+ tzdata \
13
+ file
14
+
15
+ ## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
16
+ ENV APP_HOME /usr/src/app/
17
+ ENV BUNDLE_PATH /gems
18
+
19
+ ## Create both as directories to make sure they exist:
20
+ RUN mkdir -p ${APP_HOME}
21
+ RUN mkdir ${BUNDLE_PATH}
22
+
23
+ ## Tell Docker to create volumes for our workspace and gems
24
+ ## so other containers can access them.
25
+
26
+ RUN gem install bundler:2.1.4
27
+
28
+ WORKDIR ${APP_HOME}
29
+
30
+ ## Create a Gemfile with just the Rails gem inside:
31
+ RUN echo -e "source 'https://rubygems.org'\ngem 'rails'" > Gemfile
32
+
33
+ ## Bundle to install rails:
34
+ RUN bundle install
35
+
36
+ ## Use Rails to generate a new app. We'll configure it later.
37
+ RUN bundle exec rails new . \
38
+ --database=postgresql \
39
+ --skip-bundle \
40
+ --skip-webpack-install
41
+ RUN bundle --jobs 4
42
+ RUN bundle exec rails webpacker:install
43
+ RUN bundle exec rails yarn:install
44
+ ## Tell docker not to create a layer:
45
+ FROM scratch AS export-stage
46
+
47
+ ## Copy the generated files onto the host. Note that because we are in a
48
+ ## new container, we don't have access to the previous ${APP_HOME}
49
+ ## variable and so we must hard code it as our source:
50
+ COPY --from=builder /usr/src/app/ .
51
+
@@ -2,9 +2,9 @@ default: &default
2
2
  adapter: postgresql
3
3
  encoding: unicode
4
4
  host: <%= ENV.fetch('DATABASE_HOST') %>
5
- username: <%= ENV.fetch('POSTGRES_USER') %>
5
+ username: <%= ENV.fetch('POSTGRES_USERNAME') %>
6
6
  password: <%= ENV.fetch('POSTGRES_PASSWORD') %>
7
- database: <%= ENV.fetch('POSTGRES_DB') %>
7
+ database: <%= ENV.fetch('POSTGRES_DATABASE') %>
8
8
  pool: 5
9
9
  variables:
10
10
  statement_timeout: 5000
@@ -15,6 +15,5 @@ development:
15
15
  test:
16
16
  <<: *default
17
17
 
18
-
19
18
  production:
20
19
  <<: *default
@@ -0,0 +1,10 @@
1
+ database:
2
+ image: mysql:5.7
3
+ env_file:
4
+ - roro/containers/database/${RORO_ENV:-development}.env
5
+ - roro/containers/app/${RORO_ENV:-development}.env
6
+ volumes:
7
+ - db_data:/var/lib/mysql
8
+ restart: always
9
+ ports:
10
+ - '3307:3306'
@@ -0,0 +1,7 @@
1
+ database:
2
+ image: postgres
3
+ env_file:
4
+ - roro/containers/database/${RORO_ENV:-development}.env
5
+ - roro/containers/app/${RORO_ENV:-development}.env
6
+ volumes:
7
+ - db_data:/var/lib/postgresql/data
@@ -2,7 +2,7 @@ version: '3.2'
2
2
 
3
3
  services:
4
4
 
5
- web:
5
+ app:
6
6
  build:
7
7
  context: .
8
8
  dockerfile: roro/containers/app/Dockerfile
@@ -10,18 +10,18 @@ services:
10
10
  - database
11
11
  - redis
12
12
 
13
- command: ["bin/rails", "s", "-b", "0.0.0.0"]
14
13
  ports:
15
14
  - "3000:3000"
16
15
  - "4000:4000"
17
16
  volumes:
18
- - app:/usr/src/app
17
+ - .:/usr/src/app
19
18
  - gem_cache:/gems
20
19
  env_file:
21
- - roro/containers/app/development.env
22
- - roro/containers/database/development.env
20
+ - roro/containers/app/${RORO_ENV:-development}.env
21
+ - roro/containers/database/${RORO_ENV:-development}.env
23
22
  environment:
24
23
  - WEBPACKER_DEV_SERVER_HOST=webpack_dev_server
24
+ command: ["bin/rails", "s", "-b", "0.0.0.0"]
25
25
 
26
26
  webpack_dev_server:
27
27
  build:
@@ -33,18 +33,18 @@ services:
33
33
  ports:
34
34
  - 3035:3035
35
35
  volumes:
36
- - app:/usr/src/app
36
+ - .:/usr/src/app
37
37
  - gem_cache:/gems
38
38
  env_file:
39
- - roro/containers/app/development.env
40
- - roro/containers/database/development.env
39
+ - roro/containers/app/${RORO_ENV:-development}.env
40
+ - roro/containers/database/${RORO_ENV:-development}.env
41
41
  environment:
42
42
  - WEBPACKER_DEV_SERVER_HOST=0.0.0.0
43
43
 
44
44
  redis:
45
45
  image: redis
46
46
 
47
- <%= yaml_from_template("stories/with_#{config['database_vendor']}/_service.yml") %>
47
+ <%= yaml_from_template("rails/database/with_#{config[:database_vendor]}/_service.yml") %>
48
48
 
49
49
  system_tests:
50
50
  image: selenium/standalone-chrome-debug
@@ -57,4 +57,3 @@ services:
57
57
  volumes:
58
58
  db_data:
59
59
  gem_cache:
60
- app:
@@ -0,0 +1,6 @@
1
+ MYSQL_DATABASE=<%= config[:main_app_name] + "_" + config[:rails_env] + "_db" %>
2
+ MYSQL_DATABASE_PORT=<%= config[:mysql_database_port] %>
3
+ MYSQL_ROOT_PASSWORD=<%= config[:mysql_root_password] %>
4
+ MYSQL_PASSWORD=<%= config[:mysql_password] %>
5
+ MYSQL_USERNAME=<%= config[:mysql_username] %>
6
+ RAILS_ENV=<%= config[:rails_env] %>
@@ -0,0 +1,4 @@
1
+ POSTGRES_USERNAME=<%= config[:postgres_username] %>
2
+ POSTGRES_PASSWORD=<%= config[:postgres_password] %>
3
+ POSTGRES_DATABASE=<%= config[:main_app_name] + "_" + config[:rails_env] + "_db" %>
4
+ RAILS_ENV=<%= config[:rails_env] %>
@@ -0,0 +1,2 @@
1
+ DATABASE_HOST=database
2
+ RAILS_LOG_TO_STDOUT=true
@@ -0,0 +1,114 @@
1
+ # require 'dotenv/tasks'
2
+
3
+ # Rake.application.options.trace = false
4
+
5
+ # Dotenv.load('.env.production.cluster')
6
+
7
+ namespace :kube do
8
+
9
+ desc 'Rollout a new deployment'
10
+ task :deploy do
11
+ apply "kube/deployment.yml"
12
+ puts `kubectl rollout restart deployment <%= config[:main_app_name] %>-deployment`
13
+ end
14
+
15
+ desc 'Print useful information aout our Kubernete setup'
16
+ task :list do
17
+ kubectl 'get pods --all-namespaces'
18
+ kubectl 'get services --all-namespaces'
19
+ kubectl 'get ingresses --all-namespaces'
20
+ end
21
+
22
+ desc 'Apply our Kubernete configurations to our cluster'
23
+ task :setup do
24
+
25
+ kubectl "apply -f #{Rails.root}/roro/kube/service.yml"
26
+
27
+ # # Add our Docker Hub credentials to our cluster
28
+ # kubectl(%Q{create secret docker-registry regcred \
29
+ # --docker-server=#{ENV['DOCKER_REGISTRY_SERVER']} \
30
+ # --docker-username=#{ENV['DOCKER_USERNAME']} \
31
+ # --docker-password=#{ENV['DOCKER_PASSWORD']} \
32
+ # --docker-email=#{ENV['DOCKER_EMAIL']} || true
33
+ # })
34
+
35
+ # # Install our Service Component
36
+ # apply "kube/service.yml"
37
+
38
+ # # Install our Rails app Deployment
39
+ # apply "kube/deployment.yml"
40
+
41
+ # # Installs Nginx Ingress controller
42
+ # apply "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml"
43
+
44
+ # # Add a load balancer
45
+ # apply "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml"
46
+
47
+ # # Install our Ingress that will link our load balancer to our service(s)
48
+ # apply "kube/ingress.yml"
49
+
50
+ # # Add the Digital Ocean token to the cluster
51
+ # apply "kube/secret-digital-ocean.yml"
52
+
53
+ # # Install cert-manager
54
+ # kubectl 'create namespace cert-manager'
55
+ # apply "https://github.com/jetstack/cert-manager/releases/download/v0.14.0/cert-manager.yaml"
56
+
57
+ # # Add our certificate
58
+ # apply "kube/certificate.yml"
59
+
60
+ # # Add the certificate issuer
61
+ # apply "kube/cluster-issuer.yml"
62
+ end
63
+
64
+ desc "Set the number of instances to run in the cluster"
65
+ task :scale, [:count] => [:environment] do |t, args|
66
+ kubectl "scale deployments/myapp-deployment --replicas #{args[:count]}"
67
+ end
68
+
69
+ desc "Run database migrates the database"
70
+ task :migrate do
71
+ apply "kube/job-migrate.yml"
72
+ end
73
+
74
+ desc "Open a session to a pod on the cluster"
75
+ task :shell do
76
+ exec "kubectl exec -it #{find_first_pod_name} bash"
77
+ end
78
+
79
+ desc "Tail the log files on production"
80
+ task :logs do
81
+ exec 'kubectl logs -f -l app=myapp --all-containers'
82
+ end
83
+
84
+ desc "Runs a command in production"
85
+ task :run, [:command] => [:environment] do |t, args|
86
+ kubectl "exec -it #{find_first_pod_name} echo $(#{args[:command]})"
87
+ end
88
+
89
+ desc "Run rails console in production"
90
+ task :console do
91
+ system "kubectl exec -it #{find_first_pod_name} bundle exec rails console"
92
+ end
93
+
94
+ desc "Print the environment variables"
95
+ task :config do
96
+ system "kubectl exec -it #{find_first_pod_name} printenv | sort"
97
+ end
98
+
99
+ def apply(configuration)
100
+ if File.file?(configuration)
101
+ puts %x{envsubst < #{configuration} | kubectl apply -f -}
102
+ else
103
+ kubectl "apply -f #{configuration}"
104
+ end
105
+ end
106
+
107
+ def kubectl(command)
108
+ print %x{ kubectl #{command} }
109
+ end
110
+
111
+ def find_first_pod_name
112
+ `kubectl get pods|grep myapp-deployment|awk '{print $1}'|head -n 1`.to_s.strip
113
+ end
114
+ end
@@ -0,0 +1,34 @@
1
+ ## The FROM instruction below builds our first layer using an official image:
2
+ FROM ruby:<%= config[:ruby_version] %>-alpine
3
+
4
+ LABEL maintainer="<%= config[:docker_email] %> using RoRo"
5
+
6
+ # Add basic packages
7
+ RUN apk add --no-cache \
8
+ build-base \
9
+ postgresql-dev \
10
+ nodejs \
11
+ yarn \
12
+ tzdata \
13
+ file
14
+
15
+ ## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
16
+ ENV APP_HOME /usr/src/app/
17
+ ENV BUNDLE_PATH /gems
18
+
19
+ ## Create both as directories to make sure they exist:
20
+ RUN mkdir -p ${APP_HOME}
21
+ RUN mkdir ${BUNDLE_PATH}
22
+
23
+ ## Tell Docker to create volumes for our workspace and gems
24
+ ## so other containers can access them.
25
+
26
+ RUN gem install bundler:2.1.4
27
+
28
+ WORKDIR ${APP_HOME}
29
+
30
+ COPY Gemfile* ./
31
+
32
+ RUN bundle --jobs 4
33
+ COPY . ${APP_HOME}
34
+
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Remove a potentially pre-existing server.pid for Rails.
5
+ rm -f /usr/src/app/tmp/pids/server.pid
6
+
7
+ # Then exec the container's main process (what's set as CMD in the Dockerfile).
8
+ exec "$@"