roro 0.3.17 → 0.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +11 -10
  3. data/.gitignore +3 -2
  4. data/Guardfile +8 -10
  5. data/README.md +2 -1
  6. data/lib/roro.rb +1 -0
  7. data/lib/roro/cli.rb +13 -7
  8. data/lib/roro/cli/generate/story.rb +18 -0
  9. data/lib/roro/cli/greenfield/rails.rb +2 -24
  10. data/lib/roro/cli/rollon.rb +135 -8
  11. data/lib/roro/cli/rollon/rails/base/base.rb +4 -0
  12. data/lib/roro/cli/{base → rollon/rails/base}/insert_gems.rb +2 -10
  13. data/lib/roro/cli/{base → rollon/rails/base}/insertions.rb +8 -0
  14. data/lib/roro/cli/rollon/rails/database.rb +4 -8
  15. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +2 -2
  16. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +3 -4
  17. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +7 -7
  18. data/lib/roro/configurator.rb +15 -0
  19. data/lib/roro/configurator/eligibility.rb +137 -0
  20. data/lib/roro/configurator/okonomi.rb +28 -0
  21. data/lib/roro/configurator/omakase.rb +170 -0
  22. data/lib/roro/stories/greenfield.yml +1 -0
  23. data/lib/roro/stories/greenfield/rails.yml +9 -0
  24. data/lib/roro/stories/rollon.yml +42 -0
  25. data/lib/roro/stories/rollon/rails.yml +76 -0
  26. data/lib/roro/stories/rollon/rails/ci_cd.yml +1 -0
  27. data/lib/roro/stories/rollon/rails/ci_cd/circleci.yml +2 -0
  28. data/lib/roro/stories/rollon/rails/database.yml +9 -0
  29. data/lib/roro/stories/rollon/rails/database/mysql.yml +17 -0
  30. data/lib/roro/stories/rollon/rails/database/postgresql.yml +15 -0
  31. data/lib/roro/stories/rollon/rails/kubernetes.yml +1 -0
  32. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +10 -0
  33. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/default.yml +1 -0
  34. data/lib/roro/stories/rollon/rails/kubernetes/postgresql/edge.yml +1 -0
  35. data/lib/roro/stories/rollon/ruby_gem.yml +5 -0
  36. data/lib/roro/{cli/templates/rails → templates/base}/.circleci/_aliases.yml +0 -0
  37. data/lib/roro/templates/base/.circleci/_commands.yml +31 -0
  38. data/lib/roro/templates/base/.circleci/_defaults.yml +5 -0
  39. data/lib/roro/templates/base/.circleci/_executors.yml +11 -0
  40. data/lib/roro/templates/base/.circleci/_major_only.yml +4 -0
  41. data/lib/roro/templates/base/.circleci/_version.yml +1 -0
  42. data/lib/roro/{cli/templates → templates}/base/.circleci/_workflow.yml +0 -0
  43. data/lib/roro/{cli/templates → templates}/base/.circleci/config.job-example.yml +5 -5
  44. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_build.yml +0 -0
  45. data/lib/roro/{cli/templates → templates}/base/.circleci/jobs/_release.yml +0 -0
  46. data/lib/roro/{cli/templates → templates}/base/.circleci/workflows/_build_release.yml +0 -0
  47. data/lib/roro/{cli/templates → templates}/base/.dockerignore +0 -0
  48. data/lib/roro/{cli/templates → templates}/base/dotenv +0 -0
  49. data/lib/roro/{cli/templates → templates}/base/jumpstart/.keep +0 -0
  50. data/lib/roro/{cli/templates → templates}/base/jumpstart/Dockerfile.tt +0 -0
  51. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-compose.yml +0 -0
  52. data/lib/roro/{cli/templates → templates}/base/jumpstart/docker-entrypoint.sh +0 -0
  53. data/lib/roro/{cli/templates → templates}/base/livereload/hosts.example +0 -0
  54. data/lib/roro/{cli/templates → templates}/base/roro/.keep +0 -0
  55. data/lib/roro/{cli/templates → templates}/base/roro/roro/.keep +0 -0
  56. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/.keep +0 -0
  57. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/app/.keep +0 -0
  58. data/lib/roro/{cli/templates → templates}/base/roro/roro/containers/frontend/.keep +0 -0
  59. data/lib/roro/{cli/templates → templates}/base/roro/roro/docker-entrypoint.sh.tt +0 -0
  60. data/lib/roro/{cli/templates → templates}/rails/.circleci/.keep +0 -0
  61. data/lib/roro/{cli/templates → templates}/rails/.circleci/config.yml.tt +4 -6
  62. data/lib/roro/{cli/templates → templates}/rails/.circleci/jobs/_build.yml +4 -6
  63. data/lib/roro/templates/rails/.circleci/jobs/_push.yml +11 -0
  64. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +12 -0
  65. data/lib/roro/{cli/templates → templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  66. data/lib/roro/templates/rails/.circleci/workflows/_build_test_push.yml +12 -0
  67. data/lib/roro/{cli/templates → templates}/rails/.keep +0 -0
  68. data/lib/roro/templates/rails/Dockerfile.greenfield.tt +51 -0
  69. data/lib/roro/{cli/templates → templates}/rails/config/database.mysql.yml +0 -0
  70. data/lib/roro/{cli/templates → templates}/rails/config/database.pg.yml +2 -3
  71. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_mysql/_service.yml +0 -0
  72. data/lib/roro/{cli/templates → templates}/rails/database/with_postgresql/.keep +0 -0
  73. data/lib/roro/{cli/templates/stories → templates/rails/database}/with_postgresql/_service.yml +0 -0
  74. data/lib/roro/{cli/templates → templates}/rails/docker-compose.yml.tt +3 -3
  75. data/lib/roro/{cli/templates → templates}/rails/dotenv/.keep +0 -0
  76. data/lib/roro/templates/rails/dotenv/database.mysql.env.tt +6 -0
  77. data/lib/roro/templates/rails/dotenv/database.pg.env.tt +4 -0
  78. data/lib/roro/{cli/templates → templates}/rails/dotenv/web.env.tt +0 -0
  79. data/lib/roro/templates/rails/kube.rake.tt +114 -0
  80. data/lib/roro/{cli/templates → templates}/rails/roro/.keep +0 -0
  81. data/lib/roro/{cli/templates → templates}/rails/roro/containers/.keep +0 -0
  82. data/lib/roro/{cli/templates → templates}/rails/roro/containers/app/.keep +0 -0
  83. data/lib/roro/templates/rails/roro/containers/app/Dockerfile.tt +34 -0
  84. data/lib/roro/{cli/templates → templates}/rails/roro/containers/frontend/.keep +0 -0
  85. data/lib/roro/{cli/templates/rails/roro/docker-entrypoint.sh.tt → templates/rails/roro/docker-entrypoint.sh} +0 -0
  86. data/lib/roro/{cli/templates/rails/roro/roro → templates/rails/roro/kube}/.keep +0 -0
  87. data/lib/roro/{cli/templates/rails/roro/roro/containers/.keep → templates/rails/roro/kube/certificate.yml.tt} +0 -0
  88. data/lib/roro/{cli/templates/rails/roro/roro/containers/app/.keep → templates/rails/roro/kube/cluster-issuer.yml.tt} +0 -0
  89. data/lib/roro/templates/rails/roro/kube/deployment.yml.tt +50 -0
  90. data/lib/roro/templates/rails/roro/kube/deployments/postgres_deploy.yaml +47 -0
  91. data/lib/roro/templates/rails/roro/kube/deployments/rails_deploy.yaml +62 -0
  92. data/lib/roro/templates/rails/roro/kube/deployments/redis_deploy.yaml +23 -0
  93. data/lib/roro/templates/rails/roro/kube/deployments/sidekiq_deploy.yaml +56 -0
  94. data/lib/roro/{cli/templates/rails/roro/roro/containers/frontend/.keep → templates/rails/roro/kube/ingress.yml.tt} +0 -0
  95. data/lib/roro/templates/rails/roro/kube/ingresses/ingress.yaml +13 -0
  96. data/lib/roro/{cli/templates/ruby_gem/.circleci/.keep → templates/rails/roro/kube/job-migrate.yml.tt} +0 -0
  97. data/lib/roro/templates/rails/roro/kube/jobs/setup.yaml +42 -0
  98. data/lib/roro/templates/rails/roro/kube/secret-digital-ocean.yml.tt +4 -0
  99. data/lib/roro/templates/rails/roro/kube/service.yml.tt +10 -0
  100. data/lib/roro/templates/rails/roro/kube/services/postgres_svc.yaml +13 -0
  101. data/lib/roro/templates/rails/roro/kube/services/rails_svc.yaml +13 -0
  102. data/lib/roro/templates/rails/roro/kube/services/redis_svc.yaml +13 -0
  103. data/lib/roro/templates/rails/roro/kube/volumes/postgres_volumes.yaml +25 -0
  104. data/lib/roro/{cli/templates/ruby_gem/roro/containers → templates/ruby_gem/.circleci}/.keep +0 -0
  105. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/config.yml.tt +4 -4
  106. data/lib/roro/templates/ruby_gem/.circleci/jobs/_test.yml +4 -0
  107. data/lib/roro/{cli/templates → templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  108. data/lib/roro/{cli/templates → templates}/ruby_gem/docker-compose.yml +0 -0
  109. data/lib/roro/{cli/templates/ruby_gem/roro/keys → templates/ruby_gem/roro/containers}/.keep +0 -0
  110. data/lib/roro/{cli/templates → templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +1 -1
  111. data/lib/roro/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +1 -0
  112. data/lib/roro/{cli/templates/stories → templates/ruby_gem/roro/keys}/.keep +0 -0
  113. data/lib/roro/version.rb +1 -1
  114. metadata +101 -80
  115. data/lib/roro/cli/base/base.rb +0 -8
  116. data/lib/roro/cli/base/base_files.rb +0 -24
  117. data/lib/roro/cli/base/check_dependencies.rb +0 -97
  118. data/lib/roro/cli/base/continuous_integration.rb +0 -13
  119. data/lib/roro/cli/base/utilities.rb +0 -38
  120. data/lib/roro/cli/configuration.rb +0 -69
  121. data/lib/roro/cli/generate/config.rb +0 -11
  122. data/lib/roro/cli/generate/config/rails.rb +0 -17
  123. data/lib/roro/cli/rollon/rails.rb +0 -47
  124. data/lib/roro/cli/rollon/stories/stories.rb +0 -3
  125. data/lib/roro/cli/roro_configurator.yml +0 -157
  126. data/lib/roro/cli/templates/base/.circleci/_defaults.yml +0 -17
  127. data/lib/roro/cli/templates/base/.roro_config.yml +0 -15
  128. data/lib/roro/cli/templates/rails/.circleci/jobs/_push.yml +0 -23
  129. data/lib/roro/cli/templates/rails/.circleci/jobs/_test.yml +0 -13
  130. data/lib/roro/cli/templates/rails/.circleci/workflows/_build_test_push.yml +0 -9
  131. data/lib/roro/cli/templates/rails/Dockerfile.greenfield.tt +0 -47
  132. data/lib/roro/cli/templates/rails/database/with_mysql/_service.yml +0 -10
  133. data/lib/roro/cli/templates/rails/database/with_postgresql/_service.yml +0 -7
  134. data/lib/roro/cli/templates/rails/dotenv/database.mysql.env.tt +0 -3
  135. data/lib/roro/cli/templates/rails/dotenv/database.pg.env.tt +0 -4
  136. data/lib/roro/cli/templates/rails/roro/containers/app/Dockerfile.tt +0 -88
  137. data/lib/roro/cli/templates/rails/roro/roro/docker-entrypoint.sh.tt +0 -8
  138. data/lib/roro/cli/templates/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -1
  139. data/lib/roro/cli/templates/stories/ruby_gem/with_ci_cd/_build.yml +0 -11
  140. data/lib/roro/cli/templates/stories/with_postgresql/.keep +0 -0
  141. data/lib/tasks/deploy.rake +0 -126
@@ -1,7 +0,0 @@
1
- database:
2
- image: postgres
3
- env_file:
4
- - roro/containers/database/development.env
5
- - roro/containers/app/development.env
6
- volumes:
7
- - db_data:/var/lib/postgresql/data
@@ -1,3 +0,0 @@
1
- <% config['mysql_env_vars'].each do |k,v| %><%= "\n" + k + "=" + v %><% end %>
2
- MYSQL_DATABASE=<%= config['main_app_name'] + "_db"%>
3
- RAILS_ENV=<%= config['rails_env'] %>
@@ -1,4 +0,0 @@
1
- <% config['postgresql_env_vars'].each do |k,v| %><%= "\n" + k + "=" + v %><% end %>
2
- POSTGRES_DB=<%= config['main_app_name'] + "_" + config['rails_env'] %>
3
- RAILS_ENV=<%= config['rails_env'] %>
4
-
@@ -1,88 +0,0 @@
1
- ## The FROM instruction below builds our first layer using an official image:
2
- FROM ruby:<%= config['ruby_version'] %>
3
-
4
- LABEL maintainer="<%= config['dockerhub_email'] %>"
5
-
6
- ## This is a rails app so, we will want to add node and yarn. In order for our
7
- ## container to trust yarn as a source, we first need to add yarn's public key.
8
- ## One good way to accomplish this is with apt-key, but apt-key is designed to
9
- ## send output to the terminal and not to stdout, and thus apt-key will send a
10
- ## warning message during the build context. One way to deal with the warning
11
- ## is to set an environment variable telling apt-get to be quiet. To do this,
12
- ## you'd first write an ENV instruction setting the environment variable, then
13
- ## write the RUN instruction adding the key to the container, and then you'd
14
- ## have to write another ENV instruction unsetting the variable. This would be
15
- ## ugly and inconvenient. Another way to deal with the warning is to just ignore
16
- ## it. There's no shame in that but ignoring it in the build context might
17
- ## condition us to ignore it in other contexts. But what if there was a way to
18
- ## deal with it that allowed you to set that variable just for the build
19
- ## context? Fortunately there is, using the ARG instruction. Variables set with
20
- ## ARG instructions stay in the build context while those set with ENV
21
- ## instructions follow into the container.
22
-
23
- ## Use an ARG instruction to set a variable disabling the apt-key warning:
24
- ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1
25
-
26
- ## Add yarn's public key using apt-key:
27
- RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
28
-
29
- ## Add yarn to our sources:
30
- RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
31
-
32
-
33
- ## Build a layer updating the image while adding node and yarn from the source
34
- ## above:
35
- RUN apt-get update -qq && apt-get install -y build-essential git nodejs yarn
36
-
37
- ## We have two directories we'd like to follow from the build context into
38
- ## our containers. APP_HOME is where we'll do most of our work and BUNDLE_PATH
39
- ## is where we want bundler to store our gems.
40
-
41
- ## Set APP_HOME and BUNDLE_PATH as using ENV instructions:
42
- ENV APP_HOME /usr/src/app/
43
- ENV BUNDLE_PATH /gems
44
-
45
- ## Create both as directories to make sure they exist:
46
- RUN mkdir ${APP_HOME}
47
- RUN mkdir ${BUNDLE_PATH}
48
-
49
- ## Tell Docker to create volumes for our workspace and gems
50
- ## so other containers can access them.
51
- VOLUME ${APP_HOME}
52
- VOLUME ${BUNDLE_PATH}
53
-
54
- ## If we copy our entire app using a single COPY instruction, Docker will build
55
- ## it all as a single new layer. When Docker notices a change to a file, it then
56
- ## has to rebuild the entire layer. This can slow development. One way to speed
57
- ## it back up is to break a single big COPY layer into several smaller ones,
58
- ## with slow-building layers that don't change often underneath smaller,
59
- ## lighter, qucker oens that might change a lot.
60
-
61
- ## Set your work directory:
62
- WORKDIR ${APP_HOME}
63
-
64
- ## You may need to adjust the bundler version based on your app Gemfile.lock's
65
- ## bundler version:
66
- RUN gem install bundler:2.1.4
67
-
68
- ## Set your work directory. After this line you will be running commands in
69
- ## ${APP_HOME}. COPY instructions will move files from host to ${APP_HOME}:
70
- WORKDIR ${APP_HOME}
71
-
72
- ## Build your big, slow gem layer by first copying your Gemfile && Gemfile.lock:
73
- COPY package.json ./
74
- COPY Gemfile* ./
75
-
76
- ## build the bundle layer, which now only runs if your Gemfile changes:
77
- RUN bundle
78
-
79
- ## Now build a layer with everything in your app that's likely to change
80
- ## frequently. If you make a change to any of these files, only this layer has
81
- ## to rebuild:
82
- COPY . ${APP_HOME}
83
-
84
- ## Now make your entrypoint executable.
85
- RUN chmod +x roro/docker-entrypoint.sh
86
-
87
-
88
-
@@ -1,8 +0,0 @@
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 "$@"
@@ -1 +0,0 @@
1
- export RUBYGEMS_API_KEY=<%= config['rubygems_api_key'] %>
@@ -1,11 +0,0 @@
1
- build:
2
- machine: true
3
- steps:
4
- - checkout
5
-
6
- <%= 'getsome' %>
7
- - run: gem install roro
8
- - run: roro generate::exposed ci
9
- - run: echo 'source roro/containers/ruby_image/ci.env' >> $BASH_ENV
10
- - run: gem install gem-release
11
- # - run: gem release --key $RUBYGEMS_API_KEY
@@ -1,126 +0,0 @@
1
- # use SSHKit directly instead of Capistrano
2
- require 'sshkit'
3
- require 'sshkit/dsl'
4
- include SSHKit::DSL
5
-
6
- deploy_tag = ENV['DEPLOY_TAG']
7
- hostname = ENV['SERVER_HOST']
8
- user = ENV['SERVER_USER']
9
- dockerhub_user = ENV['DOCKERHUB_USER']
10
- dockerhub_pass = ENV['DOCKERHUB_PASS']
11
- dockerhub_org = ENV['DOCKERHUB_ORG']
12
- port = ENV['SERVER_PORT']
13
- deploy_env = ENV['DEPLOY_ENV'] || :production
14
- deploy_path = ENV['APP_NAME']
15
-
16
- server = SSHKit::Host.new(hostname: hostname, port: port, user: user)
17
-
18
- namespace :deploy do
19
-
20
- desc 'copy to server files needed to run and manage Docker containers'
21
- task :configs do
22
-
23
- on server do
24
- within deploy_path do
25
- upload! File.expand_path('../../docker/overrides/production.docker-compose.yml', __dir__), 'docker-compose.yml'
26
- upload! File.expand_path('../../docker', __dir__), '.', recursive: true
27
- execute 'apt', 'install', 'ruby'
28
- execute 'gem', 'install', 'handsome_fencer-circle_c_i'
29
- execute 'handsome_fencer-circle_c_i', 'expose', 'production'
30
- end
31
- end
32
- end
33
-
34
- desc 'copy production key to server'
35
- task :production_key do
36
-
37
- on server do
38
- within deploy_path do
39
-
40
- upload! '.circleci/keys/production.key', '.circleci/keys/production.key'
41
- end
42
- end
43
- end
44
-
45
- desc 'expose production environment'
46
- task :expose_production_environment do
47
-
48
- on server do
49
- within deploy_path do
50
-
51
- execute 'apt', 'install', 'ruby'
52
- execute 'gem', 'install', 'handsome_fencer-circle_c_i'
53
- execute 'handsome_fencer-circle_c_i', 'expose', 'production'
54
- end
55
- end
56
- end
57
- end
58
-
59
-
60
- namespace :docker do
61
-
62
- desc 'logs into Docker Hub for pushing and pulling'
63
-
64
- task :login do
65
- on server do
66
- execute "mkdir -p #{deploy_path}"
67
- within deploy_path do
68
- execute 'docker', 'login', '-u', dockerhub_user, '-p', dockerhub_pass
69
- end
70
- end
71
- end
72
-
73
- desc 'stops all Docker containers via Docker Compose'
74
-
75
- task stop: 'deploy:configs' do
76
- on server do
77
- within deploy_path do
78
- with rails_env: deploy_env, deploy_tag: deploy_tag do
79
- execute 'docker-compose', 'stop'
80
-
81
- end
82
- end
83
- end
84
- end
85
-
86
- desc 'starts all Docker containers via Docker Compose'
87
-
88
- task start: 'deploy:configs' do
89
- on server do
90
- within deploy_path do
91
- with rails_env: deploy_env, deploy_tag: deploy_tag do
92
- execute 'docker-compose', 'up', '-d'
93
- execute 'echo', deploy_tag , '>', 'deploy.tag'
94
- end
95
- end
96
- end
97
- end
98
-
99
- desc 'pulls images from Docker Hub'
100
-
101
- task pull: 'docker:login' do
102
- on server do
103
- within deploy_path do
104
- ["#{deploy_path}_app", "#{deploy_path}_web"].each do |image_name|
105
- execute 'docker', 'pull', "#{dockerhub_org}/#{image_name}:#{deploy_tag}"
106
- end
107
- execute 'docker', 'pull', 'postgres:9.4.5'
108
- end
109
- end
110
- end
111
-
112
-
113
- desc 'runs database migrations in application container via Docker Compose'
114
- task migrate: 'deploy:configs' do
115
- on server do
116
- within deploy_path do
117
- with rails_env: deploy_env, deploy_tag: deploy_tag do
118
- execute 'docker-compose', 'run', 'app', "bin/rails", 'db:create', 'db:migrate'
119
- end
120
- end
121
- end
122
- end
123
-
124
- desc 'pulls images, stops old containers, updates the database, and starts new containers'
125
- task deploy: %w{docker:pull docker:stop docker:migrate docker:start }
126
- end