roro 0.3.0 → 0.3.6

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 (359) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -8
  3. data/Guardfile +11 -4
  4. data/lib/roro.rb +1 -1
  5. data/lib/roro/cli.rb +6 -4
  6. data/lib/roro/cli/base/base.rb +8 -0
  7. data/lib/roro/cli/base/base_files.rb +24 -0
  8. data/lib/roro/cli/base/check_dependencies.rb +98 -0
  9. data/lib/roro/cli/base/continuous_integration.rb +13 -0
  10. data/lib/roro/cli/base/insert_gems.rb +31 -0
  11. data/lib/roro/cli/base/insertions.rb +19 -0
  12. data/lib/roro/cli/base/utilities.rb +39 -0
  13. data/lib/roro/cli/configuration.rb +68 -0
  14. data/lib/roro/cli/generate/config.rb +13 -0
  15. data/lib/roro/cli/generate/config/rails.rb +17 -0
  16. data/lib/roro/cli/generate/generate.rb +1 -0
  17. data/lib/roro/cli/generate/generate_keys.rb +79 -0
  18. data/lib/roro/cli/generate_keys.rb +1 -1
  19. data/lib/roro/cli/greenfield.rb +20 -75
  20. data/lib/roro/cli/rollon.rb +74 -11
  21. data/lib/roro/cli/rollon/database/database.rb +31 -0
  22. data/lib/roro/cli/rollon/database/with_mysql.rb +22 -0
  23. data/lib/roro/cli/rollon/database/with_postgres.rb +21 -0
  24. data/lib/roro/cli/rollon/stories.rb +3 -0
  25. data/lib/roro/cli/roro_configurator.yml +157 -0
  26. data/lib/roro/cli/ruby_gem.rb +6 -0
  27. data/lib/roro/cli/templates/base/.dockerignore +51 -0
  28. data/{docker/env_files → lib/roro/cli/templates/base/.env}/.keep +0 -0
  29. data/lib/roro/cli/templates/base/.env/database.mysql.env.tt +4 -0
  30. data/lib/roro/cli/templates/base/.env/database.pg.env.tt +5 -0
  31. data/{test_apps/dummy_roro/docker/containers/app/staging.env → lib/roro/cli/templates/base/.env/web.env.tt} +0 -1
  32. data/{docker/keys → lib/roro/cli/templates/base}/.keep +0 -0
  33. data/lib/roro/cli/templates/base/.roro_config.yml +15 -0
  34. data/lib/roro/cli/templates/base/Dockerfile.tt +44 -0
  35. data/lib/roro/cli/templates/base/config/database.mysql.yml +19 -0
  36. data/lib/roro/cli/templates/{config/database.yml → base/config/database.pg.yml} +0 -0
  37. data/{test_apps/dummy_roro/.circleci/config.yml → lib/roro/cli/templates/circleci/config.yml.tt} +7 -6
  38. data/lib/roro/cli/templates/{docker/containers/database → dockerize/.env}/.keep +0 -0
  39. data/lib/roro/cli/templates/{docker/env_files → dockerize/.env/development}/.keep +0 -0
  40. data/lib/roro/cli/templates/dockerize/.env/development/database +3 -0
  41. data/lib/roro/cli/templates/dockerize/.env/development/web +1 -0
  42. data/lib/roro/cli/templates/{docker/keys → dockerize}/.keep +0 -0
  43. data/lib/roro/cli/templates/dockerize/Dockerfile.tt +23 -0
  44. data/lib/roro/cli/templates/dockerize/docker-compose.yml.tt +60 -0
  45. data/lib/roro/cli/templates/dockerize/docker-entrypoint.sh +9 -0
  46. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +43 -0
  47. data/{test_apps/dummy/app/assets/images → lib/roro/cli/templates/jumpstart/.env}/.keep +0 -0
  48. data/{test_apps/dummy/app/assets/javascripts/channels → lib/roro/cli/templates/jumpstart/.env/development}/.keep +0 -0
  49. data/lib/roro/cli/templates/jumpstart/.env/development/database +3 -0
  50. data/lib/roro/cli/templates/jumpstart/.env/development/web +1 -0
  51. data/{test_apps/dummy/app/controllers/concerns → lib/roro/cli/templates/jumpstart}/.keep +0 -0
  52. data/lib/roro/cli/templates/jumpstart/Dockerfile.tt +30 -0
  53. data/lib/roro/cli/templates/jumpstart/docker-compose.yml +59 -0
  54. data/lib/roro/cli/templates/jumpstart/docker-entrypoint.sh +16 -0
  55. data/lib/roro/cli/templates/livereload/hosts.example +7 -0
  56. data/lib/roro/cli/templates/quickstart/Dockerfile.tt +20 -0
  57. data/{test_apps/dummy/config → lib/roro/cli/templates/quickstart}/database.yml +12 -12
  58. data/lib/roro/cli/templates/{greenfield → quickstart}/docker-compose.yml +4 -2
  59. data/lib/roro/cli/templates/quickstart/entrypoint.sh +8 -0
  60. data/{test_apps/dummy/app/models/concerns → lib/roro/cli/templates/roro}/.keep +0 -0
  61. data/lib/roro/cli/templates/roro/docker-compose.yml.tt +60 -0
  62. data/{test_apps/dummy/lib/assets → lib/roro/cli/templates/roro/roro}/.keep +0 -0
  63. data/{test_apps/dummy/lib/tasks → lib/roro/cli/templates/roro/roro/containers}/.keep +0 -0
  64. data/{test_apps/dummy/log → lib/roro/cli/templates/roro/roro/containers/app}/.keep +0 -0
  65. data/{test_apps/dummy/storage → lib/roro/cli/templates/roro/roro/containers/frontend}/.keep +0 -0
  66. data/lib/roro/cli/templates/roro/roro/docker-entrypoint.sh.tt +8 -0
  67. data/lib/roro/cli/templates/ruby_gem/.gitignore +8 -0
  68. data/{test_apps/dummy/test/controllers → lib/roro/cli/templates/stories}/.keep +0 -0
  69. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +10 -0
  70. data/{test_apps/dummy/test/fixtures → lib/roro/cli/templates/stories/with_postgresql}/.keep +0 -0
  71. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +7 -0
  72. data/lib/roro/version.rb +1 -1
  73. data/roro.gemspec +6 -3
  74. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  75. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  76. data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
  77. data/vendor/cache/addressable-2.7.0.gem +0 -0
  78. data/vendor/cache/builder-3.2.4.gem +0 -0
  79. data/vendor/cache/byebug-11.1.3.gem +0 -0
  80. data/vendor/cache/coderay-1.1.3.gem +0 -0
  81. data/vendor/cache/concurrent-ruby-1.1.6.gem +0 -0
  82. data/vendor/cache/crass-1.0.6.gem +0 -0
  83. data/vendor/cache/erubi-1.9.0.gem +0 -0
  84. data/vendor/cache/ffi-1.13.1.gem +0 -0
  85. data/vendor/cache/guard-2.16.2.gem +0 -0
  86. data/vendor/cache/i18n-1.8.5.gem +0 -0
  87. data/vendor/cache/launchy-2.5.0.gem +0 -0
  88. data/vendor/cache/listen-3.2.1.gem +0 -0
  89. data/vendor/cache/loofah-2.6.0.gem +0 -0
  90. data/vendor/cache/lumberjack-1.2.7.gem +0 -0
  91. data/vendor/cache/method_source-1.0.0.gem +0 -0
  92. data/vendor/cache/minitest-5.14.1.gem +0 -0
  93. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  94. data/vendor/cache/mocha-1.11.2.gem +0 -0
  95. data/vendor/cache/multi_json-1.15.0.gem +0 -0
  96. data/vendor/cache/net-scp-3.0.0.gem +0 -0
  97. data/vendor/cache/net-ssh-6.1.0.gem +0 -0
  98. data/vendor/cache/{nokogiri-1.9.1.gem → nokogiri-1.10.10.gem} +0 -0
  99. data/vendor/cache/notiffany-0.1.3.gem +0 -0
  100. data/vendor/cache/pry-0.13.1.gem +0 -0
  101. data/vendor/cache/public_suffix-4.0.5.gem +0 -0
  102. data/vendor/cache/rack-2.2.3.gem +0 -0
  103. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  104. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  105. data/vendor/cache/rake-13.0.1.gem +0 -0
  106. data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
  107. data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
  108. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  109. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  110. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
  111. data/vendor/cache/sorcerer-2.0.1.gem +0 -0
  112. data/vendor/cache/thor-1.0.1.gem +0 -0
  113. data/vendor/cache/tzinfo-1.2.7.gem +0 -0
  114. data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
  115. metadata +142 -276
  116. data/.circleci/config.yml +0 -177
  117. data/.circleci/setup-gem-credentials.sh +0 -3
  118. data/.ruby-version +0 -1
  119. data/Gemfile.lock +0 -165
  120. data/_config.yml +0 -1
  121. data/docker-compose.yml +0 -21
  122. data/docker/containers/2_5_3/Dockerfile +0 -10
  123. data/docker/containers/2_6_0/Dockerfile +0 -10
  124. data/docker/containers/app/Dockerfile +0 -10
  125. data/docker/env_files/circleci.env.enc +0 -5
  126. data/lib/roro/cli/base.rb +0 -137
  127. data/lib/roro/cli/templates/Gemfile.lock +0 -0
  128. data/lib/roro/cli/templates/Guardfile +0 -81
  129. data/lib/roro/cli/templates/circleci/Rakefile +0 -4
  130. data/lib/roro/cli/templates/circleci/config.job-example.yml +0 -33
  131. data/lib/roro/cli/templates/circleci/config.yml +0 -69
  132. data/lib/roro/cli/templates/circleci/config.yml.workflow-example +0 -62
  133. data/lib/roro/cli/templates/circleci/deploy.rake +0 -127
  134. data/lib/roro/cli/templates/config.yml +0 -71
  135. data/lib/roro/cli/templates/docker-compose.yml +0 -53
  136. data/lib/roro/cli/templates/docker/containers/app/Dockerfile.tt +0 -12
  137. data/lib/roro/cli/templates/docker/containers/web/Dockerfile.tt +0 -18
  138. data/lib/roro/cli/templates/docker/containers/web/app.conf.tt +0 -23
  139. data/lib/roro/cli/templates/docker/overrides/circleci.yml.tt +0 -19
  140. data/lib/roro/cli/templates/docker/overrides/production.yml.tt +0 -26
  141. data/lib/roro/cli/templates/docker/web/Dockerfile +0 -20
  142. data/lib/roro/cli/templates/docker/web/app.conf +0 -23
  143. data/lib/roro/cli/templates/gitignore +0 -27
  144. data/lib/roro/cli/templates/greenfield/Dockerfile +0 -8
  145. data/lib/roro/cli/templates/greenfield/Gemfile +0 -2
  146. data/lib/roro/cli/templates/greenfield/Gemfile.lock +0 -0
  147. data/lib/roro/cli/templates/greenfield/config/database.yml.example +0 -16
  148. data/lib/roro/cli/templates/lib/tasks/deploy.rake +0 -126
  149. data/test_apps/dummy/.gitignore +0 -27
  150. data/test_apps/dummy/Gemfile +0 -61
  151. data/test_apps/dummy/README.md +0 -24
  152. data/test_apps/dummy/Rakefile +0 -6
  153. data/test_apps/dummy/app/assets/config/manifest.js +0 -3
  154. data/test_apps/dummy/app/assets/javascripts/application.js +0 -16
  155. data/test_apps/dummy/app/assets/javascripts/cable.js +0 -13
  156. data/test_apps/dummy/app/assets/stylesheets/application.css +0 -15
  157. data/test_apps/dummy/app/channels/application_cable/channel.rb +0 -4
  158. data/test_apps/dummy/app/channels/application_cable/connection.rb +0 -4
  159. data/test_apps/dummy/app/controllers/application_controller.rb +0 -2
  160. data/test_apps/dummy/app/helpers/application_helper.rb +0 -2
  161. data/test_apps/dummy/app/jobs/application_job.rb +0 -2
  162. data/test_apps/dummy/app/mailers/application_mailer.rb +0 -4
  163. data/test_apps/dummy/app/models/application_record.rb +0 -3
  164. data/test_apps/dummy/app/views/layouts/application.html.erb +0 -15
  165. data/test_apps/dummy/app/views/layouts/mailer.html.erb +0 -13
  166. data/test_apps/dummy/app/views/layouts/mailer.text.erb +0 -1
  167. data/test_apps/dummy/bin/bundle +0 -3
  168. data/test_apps/dummy/bin/rails +0 -4
  169. data/test_apps/dummy/bin/rake +0 -4
  170. data/test_apps/dummy/bin/setup +0 -36
  171. data/test_apps/dummy/bin/update +0 -31
  172. data/test_apps/dummy/bin/yarn +0 -11
  173. data/test_apps/dummy/config.ru +0 -5
  174. data/test_apps/dummy/config/application.rb +0 -19
  175. data/test_apps/dummy/config/boot.rb +0 -4
  176. data/test_apps/dummy/config/cable.yml +0 -10
  177. data/test_apps/dummy/config/credentials.yml.enc +0 -1
  178. data/test_apps/dummy/config/environment.rb +0 -5
  179. data/test_apps/dummy/config/environments/development.rb +0 -61
  180. data/test_apps/dummy/config/environments/production.rb +0 -94
  181. data/test_apps/dummy/config/environments/test.rb +0 -46
  182. data/test_apps/dummy/config/initializers/application_controller_renderer.rb +0 -8
  183. data/test_apps/dummy/config/initializers/assets.rb +0 -14
  184. data/test_apps/dummy/config/initializers/backtrace_silencers.rb +0 -7
  185. data/test_apps/dummy/config/initializers/content_security_policy.rb +0 -25
  186. data/test_apps/dummy/config/initializers/cookies_serializer.rb +0 -5
  187. data/test_apps/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  188. data/test_apps/dummy/config/initializers/inflections.rb +0 -16
  189. data/test_apps/dummy/config/initializers/mime_types.rb +0 -4
  190. data/test_apps/dummy/config/initializers/wrap_parameters.rb +0 -14
  191. data/test_apps/dummy/config/locales/en.yml +0 -33
  192. data/test_apps/dummy/config/puma.rb +0 -34
  193. data/test_apps/dummy/config/routes.rb +0 -3
  194. data/test_apps/dummy/config/spring.rb +0 -6
  195. data/test_apps/dummy/config/storage.yml +0 -34
  196. data/test_apps/dummy/db/seeds.rb +0 -7
  197. data/test_apps/dummy/package.json +0 -5
  198. data/test_apps/dummy/public/404.html +0 -67
  199. data/test_apps/dummy/public/422.html +0 -67
  200. data/test_apps/dummy/public/500.html +0 -66
  201. data/test_apps/dummy/public/apple-touch-icon-precomposed.png +0 -0
  202. data/test_apps/dummy/public/apple-touch-icon.png +0 -0
  203. data/test_apps/dummy/public/favicon.ico +0 -0
  204. data/test_apps/dummy/public/robots.txt +0 -1
  205. data/test_apps/dummy/test/application_system_test_case.rb +0 -5
  206. data/test_apps/dummy/test/fixtures/files/.keep +0 -0
  207. data/test_apps/dummy/test/helpers/.keep +0 -0
  208. data/test_apps/dummy/test/integration/.keep +0 -0
  209. data/test_apps/dummy/test/mailers/.keep +0 -0
  210. data/test_apps/dummy/test/models/.keep +0 -0
  211. data/test_apps/dummy/test/system/.keep +0 -0
  212. data/test_apps/dummy/test/test_helper.rb +0 -10
  213. data/test_apps/dummy/tmp/.keep +0 -0
  214. data/test_apps/dummy/vendor/.keep +0 -0
  215. data/test_apps/dummy_gem/.keep +0 -0
  216. data/test_apps/dummy_roro/.circleci/Rakefile +0 -4
  217. data/test_apps/dummy_roro/.circleci/config.job-example.yml +0 -33
  218. data/test_apps/dummy_roro/.circleci/config.yml.workflow-example +0 -62
  219. data/test_apps/dummy_roro/.circleci/deploy.rake +0 -127
  220. data/test_apps/dummy_roro/.gitignore +0 -27
  221. data/test_apps/dummy_roro/Gemfile +0 -64
  222. data/test_apps/dummy_roro/README.md +0 -24
  223. data/test_apps/dummy_roro/Rakefile +0 -6
  224. data/test_apps/dummy_roro/app/assets/config/manifest.js +0 -3
  225. data/test_apps/dummy_roro/app/assets/images/.keep +0 -0
  226. data/test_apps/dummy_roro/app/assets/javascripts/application.js +0 -16
  227. data/test_apps/dummy_roro/app/assets/javascripts/cable.js +0 -13
  228. data/test_apps/dummy_roro/app/assets/javascripts/channels/.keep +0 -0
  229. data/test_apps/dummy_roro/app/assets/stylesheets/application.css +0 -15
  230. data/test_apps/dummy_roro/app/channels/application_cable/channel.rb +0 -4
  231. data/test_apps/dummy_roro/app/channels/application_cable/connection.rb +0 -4
  232. data/test_apps/dummy_roro/app/controllers/application_controller.rb +0 -2
  233. data/test_apps/dummy_roro/app/controllers/concerns/.keep +0 -0
  234. data/test_apps/dummy_roro/app/helpers/application_helper.rb +0 -2
  235. data/test_apps/dummy_roro/app/jobs/application_job.rb +0 -2
  236. data/test_apps/dummy_roro/app/mailers/application_mailer.rb +0 -4
  237. data/test_apps/dummy_roro/app/models/application_record.rb +0 -3
  238. data/test_apps/dummy_roro/app/models/concerns/.keep +0 -0
  239. data/test_apps/dummy_roro/app/views/layouts/application.html.erb +0 -15
  240. data/test_apps/dummy_roro/app/views/layouts/mailer.html.erb +0 -13
  241. data/test_apps/dummy_roro/app/views/layouts/mailer.text.erb +0 -1
  242. data/test_apps/dummy_roro/bin/bundle +0 -3
  243. data/test_apps/dummy_roro/bin/rails +0 -4
  244. data/test_apps/dummy_roro/bin/rake +0 -4
  245. data/test_apps/dummy_roro/bin/setup +0 -36
  246. data/test_apps/dummy_roro/bin/update +0 -31
  247. data/test_apps/dummy_roro/bin/yarn +0 -11
  248. data/test_apps/dummy_roro/config.ru +0 -5
  249. data/test_apps/dummy_roro/config/application.rb +0 -19
  250. data/test_apps/dummy_roro/config/boot.rb +0 -4
  251. data/test_apps/dummy_roro/config/cable.yml +0 -10
  252. data/test_apps/dummy_roro/config/credentials.yml.enc +0 -1
  253. data/test_apps/dummy_roro/config/database.yml +0 -20
  254. data/test_apps/dummy_roro/config/environment.rb +0 -5
  255. data/test_apps/dummy_roro/config/environments/development.rb +0 -61
  256. data/test_apps/dummy_roro/config/environments/production.rb +0 -94
  257. data/test_apps/dummy_roro/config/environments/test.rb +0 -46
  258. data/test_apps/dummy_roro/config/initializers/application_controller_renderer.rb +0 -8
  259. data/test_apps/dummy_roro/config/initializers/assets.rb +0 -14
  260. data/test_apps/dummy_roro/config/initializers/backtrace_silencers.rb +0 -7
  261. data/test_apps/dummy_roro/config/initializers/content_security_policy.rb +0 -25
  262. data/test_apps/dummy_roro/config/initializers/cookies_serializer.rb +0 -5
  263. data/test_apps/dummy_roro/config/initializers/filter_parameter_logging.rb +0 -4
  264. data/test_apps/dummy_roro/config/initializers/inflections.rb +0 -16
  265. data/test_apps/dummy_roro/config/initializers/mime_types.rb +0 -4
  266. data/test_apps/dummy_roro/config/initializers/wrap_parameters.rb +0 -14
  267. data/test_apps/dummy_roro/config/locales/en.yml +0 -33
  268. data/test_apps/dummy_roro/config/puma.rb +0 -34
  269. data/test_apps/dummy_roro/config/routes.rb +0 -3
  270. data/test_apps/dummy_roro/config/spring.rb +0 -6
  271. data/test_apps/dummy_roro/config/storage.yml +0 -34
  272. data/test_apps/dummy_roro/db/seeds.rb +0 -7
  273. data/test_apps/dummy_roro/docker-compose.yml +0 -51
  274. data/test_apps/dummy_roro/docker/containers/app/Dockerfile +0 -12
  275. data/test_apps/dummy_roro/docker/containers/app/circleci.env +0 -2
  276. data/test_apps/dummy_roro/docker/containers/app/development.env +0 -2
  277. data/test_apps/dummy_roro/docker/containers/app/production.env +0 -2
  278. data/test_apps/dummy_roro/docker/containers/database/.keep +0 -0
  279. data/test_apps/dummy_roro/docker/containers/database/circleci.env +0 -3
  280. data/test_apps/dummy_roro/docker/containers/database/development.env +0 -3
  281. data/test_apps/dummy_roro/docker/containers/database/production.env +0 -3
  282. data/test_apps/dummy_roro/docker/containers/database/staging.env +0 -3
  283. data/test_apps/dummy_roro/docker/containers/web/Dockerfile +0 -18
  284. data/test_apps/dummy_roro/docker/containers/web/app.conf +0 -23
  285. data/test_apps/dummy_roro/docker/containers/web/circleci.env +0 -1
  286. data/test_apps/dummy_roro/docker/containers/web/development.env +0 -1
  287. data/test_apps/dummy_roro/docker/containers/web/production.env +0 -1
  288. data/test_apps/dummy_roro/docker/containers/web/staging.env +0 -1
  289. data/test_apps/dummy_roro/docker/env_files/circleci.env +0 -12
  290. data/test_apps/dummy_roro/docker/env_files/circleci.env.enc +0 -14
  291. data/test_apps/dummy_roro/docker/env_files/production.env +0 -2
  292. data/test_apps/dummy_roro/docker/env_files/production.env.enc +0 -2
  293. data/test_apps/dummy_roro/docker/keys/.keep +0 -0
  294. data/test_apps/dummy_roro/docker/overrides/circleci.yml +0 -19
  295. data/test_apps/dummy_roro/docker/overrides/production.yml +0 -26
  296. data/test_apps/dummy_roro/lib/assets/.keep +0 -0
  297. data/test_apps/dummy_roro/lib/tasks/.keep +0 -0
  298. data/test_apps/dummy_roro/lib/tasks/deploy.rake +0 -126
  299. data/test_apps/dummy_roro/log/.keep +0 -0
  300. data/test_apps/dummy_roro/package.json +0 -5
  301. data/test_apps/dummy_roro/public/404.html +0 -67
  302. data/test_apps/dummy_roro/public/422.html +0 -67
  303. data/test_apps/dummy_roro/public/500.html +0 -66
  304. data/test_apps/dummy_roro/public/apple-touch-icon-precomposed.png +0 -0
  305. data/test_apps/dummy_roro/public/apple-touch-icon.png +0 -0
  306. data/test_apps/dummy_roro/public/favicon.ico +0 -0
  307. data/test_apps/dummy_roro/public/robots.txt +0 -1
  308. data/test_apps/dummy_roro/storage/.keep +0 -0
  309. data/test_apps/dummy_roro/test/application_system_test_case.rb +0 -5
  310. data/test_apps/dummy_roro/test/controllers/.keep +0 -0
  311. data/test_apps/dummy_roro/test/fixtures/.keep +0 -0
  312. data/test_apps/dummy_roro/test/fixtures/files/.keep +0 -0
  313. data/test_apps/dummy_roro/test/helpers/.keep +0 -0
  314. data/test_apps/dummy_roro/test/integration/.keep +0 -0
  315. data/test_apps/dummy_roro/test/mailers/.keep +0 -0
  316. data/test_apps/dummy_roro/test/models/.keep +0 -0
  317. data/test_apps/dummy_roro/test/system/.keep +0 -0
  318. data/test_apps/dummy_roro/test/test_helper.rb +0 -10
  319. data/test_apps/dummy_roro/tmp/.keep +0 -0
  320. data/test_apps/dummy_roro/vendor/.keep +0 -0
  321. data/test_apps/greenfield/.keep +0 -0
  322. data/vendor/cache/actionpack-5.2.2.gem +0 -0
  323. data/vendor/cache/actionview-5.2.2.gem +0 -0
  324. data/vendor/cache/activesupport-5.2.2.gem +0 -0
  325. data/vendor/cache/addressable-2.5.2.gem +0 -0
  326. data/vendor/cache/builder-3.2.3.gem +0 -0
  327. data/vendor/cache/coderay-1.1.2.gem +0 -0
  328. data/vendor/cache/concurrent-ruby-1.1.4.gem +0 -0
  329. data/vendor/cache/crass-1.0.4.gem +0 -0
  330. data/vendor/cache/erubi-1.8.0.gem +0 -0
  331. data/vendor/cache/ffi-1.9.25.gem +0 -0
  332. data/vendor/cache/guard-2.15.0.gem +0 -0
  333. data/vendor/cache/i18n-1.3.0.gem +0 -0
  334. data/vendor/cache/launchy-2.4.3.gem +0 -0
  335. data/vendor/cache/listen-3.1.5.gem +0 -0
  336. data/vendor/cache/loofah-2.2.3.gem +0 -0
  337. data/vendor/cache/lumberjack-1.0.13.gem +0 -0
  338. data/vendor/cache/method_source-0.9.2.gem +0 -0
  339. data/vendor/cache/minitest-5.11.3.gem +0 -0
  340. data/vendor/cache/minitest-rails-3.0.0.gem +0 -0
  341. data/vendor/cache/multi_json-1.13.1.gem +0 -0
  342. data/vendor/cache/net-scp-2.0.0.gem +0 -0
  343. data/vendor/cache/net-ssh-5.2.0.gem +0 -0
  344. data/vendor/cache/notiffany-0.1.1.gem +0 -0
  345. data/vendor/cache/pry-0.12.2.gem +0 -0
  346. data/vendor/cache/public_suffix-3.0.3.gem +0 -0
  347. data/vendor/cache/rack-2.0.6.gem +0 -0
  348. data/vendor/cache/rails-html-sanitizer-1.0.4.gem +0 -0
  349. data/vendor/cache/railties-5.2.2.gem +0 -0
  350. data/vendor/cache/rake-10.5.0.gem +0 -0
  351. data/vendor/cache/rb-fsevent-0.10.3.gem +0 -0
  352. data/vendor/cache/rb-inotify-0.10.0.gem +0 -0
  353. data/vendor/cache/ruby_dep-1.5.0.gem +0 -0
  354. data/vendor/cache/shoulda-3.6.0.gem +0 -0
  355. data/vendor/cache/shoulda-context-1.2.2.gem +0 -0
  356. data/vendor/cache/shoulda-matchers-3.1.2.gem +0 -0
  357. data/vendor/cache/sorcerer-1.0.2.gem +0 -0
  358. data/vendor/cache/thor-0.20.3.gem +0 -0
  359. data/vendor/cache/tzinfo-1.2.5.gem +0 -0
@@ -0,0 +1,79 @@
1
+ # require 'openssl'
2
+ # require 'base64'
3
+ # require 'handsome_fencer/crypto'
4
+
5
+ # module Roro
6
+
7
+ # class CLI < Thor
8
+
9
+ # include Thor::Actions
10
+ # include HandsomeFencer::Crypto
11
+
12
+ # desc "generate_keys", "Generates keys for all environments. If you have .env files like './**/production.env' and './**/staging.env' this command assumes you need keys for the production and staging environments, and will generate them for you."
13
+
14
+ # def generate_keys
15
+ # generate_key
16
+ # end
17
+
18
+ # desc "generate_key", "Generate a key for each environment"
19
+ # method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
20
+
21
+ # def generate_key(*args)
22
+ # environments = args.first ? [args.first] : gather_environments
23
+ # environments.each do |environment|
24
+ # confirm_files_decrypted?(environment)
25
+ # create_file "docker/keys/#{environment}.key", encoded_key
26
+ # end
27
+ # end
28
+
29
+ # no_commands do
30
+
31
+ # def encoded_key
32
+ # @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
33
+ # @salt = '8 octets'
34
+ # @new_key = @cipher.random_key
35
+ # Base64.encode64(@new_key)
36
+ # end
37
+
38
+ # def gather_environments
39
+ # environments = []
40
+ # ['.env', '.env.enc'].each do |extension|
41
+
42
+ # HandsomeFencer::Crypto.source_files('.', extension).each do |env_file|
43
+ # environments << env_file.split('/').last.split(extension).last
44
+ # end
45
+ # end
46
+ # environments.uniq
47
+ # end
48
+
49
+ # def confirm_files_decrypted?(environment)
50
+ # orphan_encrypted = []
51
+ # HandsomeFencer::Crypto.source_files('.', '.env.enc').each do |file|
52
+ # orphan_encrypted << file unless File.exist? file.split('.enc').first
53
+ # end
54
+
55
+ # if !orphan_encrypted.empty?
56
+ # raise Roro::Error.new("You have an encrypted files (.env.enc) #{orphan_encrypted} that do not have corresponding decrypted files (.env). Please decrypt or remove these encrypted files before generating a new key for #{environment}.")
57
+ # end
58
+ # true
59
+ # end
60
+ # end
61
+ # end
62
+
63
+ # # desc "generate keys", "Generate keys on a per-environment basis"
64
+ # #
65
+ # # method_option :environment, type: :string, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
66
+ # #
67
+
68
+ # # def generate_keys
69
+ # # default_environments = %w[circleci development production]
70
+ # # environments = args.first ? [args.first] : default_environments
71
+ # # environments.each do |environment|
72
+ # # @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
73
+ # # @salt = '8 octets'
74
+ # # @new_key = @cipher.random_key
75
+ # #
76
+ # # create_file "docker/keys/#{environment}.key", Base64.encode64(@new_key)
77
+ # # end
78
+ # # end
79
+ # end
@@ -16,7 +16,7 @@ module Roro
16
16
  end
17
17
 
18
18
  desc "generate_key", "Generate a key for each environment"
19
- method_option :environment, type: :string, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
19
+ method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
20
20
 
21
21
  def generate_key(*args)
22
22
  environments = args.first ? [args.first] : gather_environments
@@ -7,90 +7,35 @@ module Roro
7
7
  include Thor::Actions
8
8
 
9
9
  desc "greenfield", "Greenfield a brand new rails app using Docker's instructions"
10
-
10
+
11
11
  method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
12
12
  method_option :interactive, desc: "Set up your environment variables as you go."
13
13
  method_option :force, desc: "force over-write of existing files"
14
-
14
+
15
+
15
16
  def greenfield
16
-
17
+ confirm_directory_empty
17
18
  confirm_dependencies
19
+ remove_roro_artifacts
20
+ configure_for_greenfielding
18
21
  copy_greenfield_files
19
- as_system("docker-compose run web rails new . --force --database=postgresql --skip-bundle")
20
- chown_if_required
21
- as_system('sudo docker-compose build')
22
- as_system('mv -f config/database.yml.example config/database.yml')
23
- as_system('docker-compose up --build --force-recreate -d ')
24
- as_system 'docker-compose run web bin/rails db:create'
22
+ run_greenfield_commands
25
23
  end
26
-
24
+
27
25
  no_commands do
28
-
29
- def as_system(command)
30
- command = OS.linux? ? "sudo #{command}" : command
31
- system command
32
- end
33
-
34
- def chown_if_required()
35
- warning = "It looks like you're running Docker on some flavor of Linux, in which case the files created by your containers are owned by the root user of the container, and not by the user of the host machine. Please change their ownership by supplying your password at the prompt.",
36
- action = "system 'sudo chown -R $USER .'"
37
- msg = []
38
- msg << ""
39
- msg << delineator
40
- msg << warning
41
- msg << ""
42
- msg.join("\n\n")
43
- puts msg
44
- eval(action)
45
- end
46
-
47
- def delineator
48
- ("-" * 80)
49
- end
50
-
51
- def confirm_dependency(options)
52
- msg = []
53
- msg << ""
54
- msg << delineator
55
- msg << "It looks like #{options[:warning]}. The following bash command returns false:"
56
- msg << "\t$ #{options[:system_query]}"
57
- msg << "Please try these instructions:"
58
- msg << ("\t" + options[:suggestion])
59
- msg << delineator
60
- conditional = options[:conditional] ? eval(options[:conditional]) : system(options[:system_query])
61
- if conditional == false
62
- raise(Roro::Error.new(msg.join("\n\n")))
63
- end
64
- end
65
-
66
- def confirm_dependencies
67
- dependencies = [
68
- {
69
- system_query: "ls -A",
70
- warning: "this is not an empty directory. Roro will not greenfield a new Rails app unless either a) the current directory is empty or b) you run greenfield with the --force flag",
71
- suggestion: "$ roro greenfield --force",
72
- conditional: "Dir.glob('*').empty?"
73
- }, {
74
-
75
- system_query: "which docker",
76
- warning: "Docker isn't installed",
77
- suggestion: "https://docs.docker.com/install/"
78
- }, {
79
- system_query: "which docker-compose",
80
- warning: "Docker Compose isn't installed",
81
- suggestion: "https://docs.docker.com/compose/install/"
82
-
83
- }, {
84
- system_query: "docker info",
85
- warning: "the Docker daemon isn't running",
86
- suggestion: "https://docs.docker.com/config/daemon/#start-the-daemon-manually"
87
- }
88
- ]
89
-
90
- dependencies.each do |dependency|
91
- confirm_dependency(dependency)
92
- end
26
+
27
+ def configure_for_greenfielding
28
+ @config ||= Roro::Configuration.new(options)
29
+ end
30
+
31
+ def run_greenfield_commands
32
+ system "DOCKER_BUILDKIT=1 docker build --file Dockerfile --output . ."
33
+ rollon
93
34
  end
35
+
36
+ def copy_greenfield_files
37
+ template 'greenfield/Dockerfile.tt', 'Dockerfile', @config.app
38
+ end
94
39
  end
95
40
  end
96
41
  end
@@ -1,21 +1,84 @@
1
+ require_relative 'rollon/stories'
2
+
1
3
  module Roro
2
4
 
3
5
  class CLI < Thor
4
6
 
5
- method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
6
- desc "rollon", "Generates files necessary to greenfield a new app within a dockerized rails container, along with a set of files necessary for continuous deployment using CircleCI"
7
- method_option :interactive, desc: "Set up your environment variables as you go."
7
+ desc "rollon", "Generates files for and makes changes to your app
8
+ so it can run using Docker containers."
9
+ method_option :interactive, desc: "Set up your environment variables as
10
+ you go."
8
11
 
9
12
  def rollon
10
- configurate
11
- if Dir['./*'].empty?
12
- raise Roro::Error.new("Oops -- Roro can't roll itself onto a Rails app if it doesn't exist. Please either change into a directory with a Rails app or generate a new one using '$ roro greenfield'.")
13
+ confirm_directory_not_empty
14
+ confirm_dependencies
15
+ remove_roro_artifacts
16
+
17
+ configure_for_rollon
18
+
19
+ copy_roro_files
20
+ generate_roro_config
21
+ startup_commands
22
+ end
23
+
24
+ no_commands do
25
+
26
+ def configure_for_rollon
27
+ @config ||= Roro::Configuration.new(options)
28
+ end
29
+
30
+ def yaml_from_template(file)
31
+ File.read(File.dirname(__FILE__) + "/templates/#{file}")
32
+ end
33
+
34
+ def copy_roro_files
35
+ configure_database
36
+ directory 'roro', './', @config.app
37
+ template 'base/Dockerfile.tt', 'roro/containers/app/Dockerfile', @config.app
38
+ take_thor_actions
39
+ end
40
+
41
+ def take_thor_actions
42
+ @config.thor_actions.each {|k, v| eval(k) if v.eql?('y') }
43
+ end
44
+
45
+ def startup_commands
46
+ system 'docker-compose build'
47
+ system 'docker-compose run web bundle'
48
+ system 'docker-compose run web bin/rails webpacker:install'
49
+ system 'docker-compose run web bin/rails yarn:install'
50
+ system 'docker-compose run web bin/rails db:create'
51
+ system 'docker-compose run web bin/rails db:migrate'
52
+ system 'docker-compose up'
53
+ end
54
+
55
+ def confirm_directory_empty
56
+ confirm = confirm_dependency({
57
+ system_query: "ls -A",
58
+ warning: "this is not an empty directory. Roro will not greenfield a new Rails app unless either a) the current directory is empty or b) you run greenfield with the --force flag",
59
+ suggestion: "$ roro greenfield --force",
60
+ conditional: "Dir.glob('*').empty?" })
61
+ confirm || true
13
62
  end
14
- copy_base_files
15
- append_to_existing_files
16
- insert_into_file 'Gemfile', "gem 'sshkit'\n\n", before: "group :development, :test do"
17
- insert_into_file 'Gemfile', "\n\tgem 'handsome_fencer-test'", after: "group :development, :test do"
18
63
 
64
+
65
+ def confirm_dependency(options)
66
+ msg = []
67
+ msg << ""
68
+ msg << delineator
69
+ msg << "It looks like #{options[:warning]}. The following bash command returns false:"
70
+ msg << "\t$ #{options[:system_query]}"
71
+ msg << "Please try these instructions:"
72
+ msg << ("\t" + options[:suggestion])
73
+ msg << delineator
74
+ conditional = options[:conditional] ? eval(options[:conditional]) : system(options[:system_query])
75
+ if conditional == false
76
+ raise(Roro::Error.new(msg.join("\n\n")))
77
+ else
78
+ true
79
+ end
80
+ end
81
+
19
82
  end
20
83
  end
21
- end
84
+ end
@@ -0,0 +1,31 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ no_commands do
6
+
7
+ def configure_database
8
+ database = @config.thor_actions['configure_database']
9
+ vendor = @config.master['services']['database']['vendors']
10
+ case database
11
+ when 'p'
12
+ @config.app['database_vendor'] = 'postgresql'
13
+ @config.app['postgresql_env_vars'] = vendor['postgresql']['env_vars']
14
+ configure_for_pg
15
+ when 'm'
16
+ @config.app['database_vendor'] = 'mysql'
17
+ @config.app['mysql_env_vars'] = vendor['mysql']['env_vars']
18
+ configure_for_mysql
19
+ end
20
+
21
+ %w(development production test staging ci).each do |environment|
22
+ template(
23
+ 'base/.env/web.env.tt',
24
+ "roro/containers/app/#{environment}.env", @config.app
25
+ )
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
@@ -0,0 +1,22 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ no_commands do
6
+
7
+ def configure_for_mysql
8
+ insert_db_gem('mysql2')
9
+ copy_file 'base/config/database.mysql.yml', 'config/database.yml', force: true
10
+ config = @config.app.clone
11
+
12
+ %w(development production test staging ci).each do |environment|
13
+ config['rails_env'] = environment
14
+
15
+ source = 'base/.env/database.mysql.env.tt'
16
+ target = "roro/containers/database/#{environment}.env"
17
+ template( source, target, config )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ no_commands do
6
+
7
+ def configure_for_pg
8
+ insert_db_gem('pg')
9
+ copy_file 'base/config/database.pg.yml', 'config/database.yml', force: true
10
+ config = @config.app.clone
11
+ %w(development production test staging ci).each do |environment|
12
+ config['rails_env'] = environment
13
+
14
+ source = 'base/.env/database.pg.env.tt'
15
+ target = "roro/containers/database/#{environment}.env"
16
+ template( source, target, config )
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ require_relative 'database/with_postgres.rb'
2
+ require_relative 'database/with_mysql.rb'
3
+ require_relative 'database/database.rb'
@@ -0,0 +1,157 @@
1
+ ---
2
+ main_app_name: <%= Dir.pwd.split('/').last %>
3
+ developer:
4
+ name: your-name
5
+ email: your.email@example.com
6
+
7
+ services:
8
+ server_app:
9
+ name: app
10
+ vendors:
11
+ rails:
12
+ version:
13
+ image:
14
+ official_name: ruby
15
+ variants:
16
+ - alpine
17
+ - buster
18
+ - slim
19
+ - slim-buster
20
+ - stretch
21
+
22
+ choices:
23
+
24
+ config_std_out_true:
25
+ question: |
26
+ The team at Heroku, among others, recommend logging to STDOUT
27
+ and treating your logs as streams. We'll set this to
28
+ true as an environment variable but it may also be helpful
29
+ to configure './config/boot.rb' with '$stdout.sync = true'
30
+ just in case that doesn't work.
31
+ Would you like to configure this?
32
+ choices:
33
+ y: 'Yes'
34
+ n: 'No'
35
+ default: y
36
+
37
+ insert_roro_gem_into_gemfile:
38
+ question: |
39
+ Many developers believe it's good idea to secure sensitive
40
+ environment files and variables. You can use RoRo to
41
+ generate secret keys known only to you for use in any
42
+ environment, and then use them to encrypt and decrypt
43
+ these files. Would you like to add RoRo to your Gemfile?
44
+ choices:
45
+ y: 'Yes'
46
+ n: 'No'
47
+ default: y
48
+
49
+ gitignore_sensitive_files:
50
+ question: |
51
+ If you plan to use the environment files RoRo generates for
52
+ your own environment variables, it's a good idea to keep
53
+ these files out of source control. Would you like RoRo to
54
+ modify your .gitignore file to accomplish this for you ?
55
+ choices:
56
+ y: 'Yes'
57
+ n: 'No'
58
+ default: y
59
+
60
+ insert_hfci_gem_into_gemfile:
61
+ question: |
62
+ Jim Weirich passed too soon and remains missed. In addition
63
+ to Rake, Jim wrote a beautiful gem called 'Given' that makes
64
+ Rspec and Minitest less ugly and thus your tests more easy to
65
+ write. Would you like to install a gem called
66
+ handsome_fencer-test that allows you to try it out?
67
+ choices:
68
+ y: 'Yes'
69
+ n: 'No'
70
+ default: n
71
+
72
+ backup_existing_files:
73
+ question: |
74
+ RoRo will be generating a number of files, some of which will
75
+ replace existing ones. Would you like to back them up?
76
+ choices:
77
+ y: 'Yes'
78
+ n: 'No'
79
+ default: n
80
+
81
+ copy_dockerignore:
82
+ question: |
83
+ Would you like to create a .dockerignore file?
84
+ choices:
85
+ y: 'Yes'
86
+ n: 'No'
87
+ default: y
88
+
89
+ configure_database:
90
+ question: |
91
+ RoRo can reliably dockerize your Rails app with either
92
+ MySQL or PostgreSQL stories. Which story would you prefer
93
+ to roll on?
94
+ choices:
95
+ p: PostgreSQL
96
+ m: MySQL
97
+ default: p
98
+
99
+ env_vars:
100
+ DATABASE_HOST: database
101
+
102
+ database:
103
+ name: database
104
+ vendor: postgresql
105
+ vendors:
106
+ postgresql:
107
+ images:
108
+ official_name:
109
+ versions:
110
+ - latest
111
+ env_vars:
112
+ POSTGRES_USER: postgres
113
+ POSTGRES_PASSWORD: your-postgres-password
114
+
115
+ mysql:
116
+ env_vars:
117
+ MYSQL_ROOT_PASSWORD: root
118
+ MYSQL_PASSWORD: root
119
+ MYSQL_USERNAME: root
120
+ MYSQL_DATABASE_PORT: '3306'
121
+
122
+ frontend:
123
+ name: frontend
124
+ vendors:
125
+
126
+ - frontend
127
+ - vuejs
128
+ - react
129
+ - angular
130
+ webserver:
131
+ default: nginx
132
+ vendors:
133
+ - nginx
134
+ application_server:
135
+ name: appserver
136
+ vendors:
137
+ - unicorn:
138
+ - puma:
139
+ registries:
140
+ dockerhub:
141
+ env_vars:
142
+ DOCKERHUB_EMAIL: your-docker-hub-email
143
+ DOCKERHUB_ORG: your-docker-hub-org-name
144
+ DOCKERHUB_PASSWORD: your-docker-hub-password
145
+ DOCKERHUB_USER: your-docker-hub-user-name
146
+
147
+ ci_cd:
148
+ semaphore:
149
+ circleci:
150
+ env_vars:
151
+ DEPLOY_TAG: "${CIRCLE_SHA1:0:7}"
152
+
153
+ deployment:
154
+ env_vars:
155
+ SERVER_HOST: "ip-address-of-your-server"
156
+ SERVER_PORT: '22'
157
+ SERVER_USER: root