roro 0.3.2 → 0.3.8

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 (364) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -8
  3. data/Guardfile +4 -7
  4. data/lib/roro.rb +1 -1
  5. data/lib/roro/cli.rb +74 -6
  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/cli.rb +99 -0
  14. data/lib/roro/cli/configuration.rb +69 -0
  15. data/lib/roro/cli/expose.rb +8 -7
  16. data/lib/roro/cli/generate/config.rb +13 -0
  17. data/lib/roro/cli/generate/config/rails.rb +17 -0
  18. data/lib/roro/cli/generate/generate.rb +1 -0
  19. data/lib/roro/cli/generate/generate_keys.rb +47 -0
  20. data/lib/roro/cli/greenfield.rb +22 -87
  21. data/lib/roro/cli/obfuscate.rb +10 -11
  22. data/lib/roro/cli/rollon.rb +74 -11
  23. data/lib/roro/cli/rollon/stories.rb +3 -0
  24. data/{docker/env_files/.keep → lib/roro/cli/rollon/stories/database.rb} +0 -0
  25. data/lib/roro/cli/rollon/stories/rails.rb +1 -0
  26. data/lib/roro/cli/rollon/stories/rails/database/database.rb +31 -0
  27. data/lib/roro/cli/rollon/stories/rails/database/with_mysql.rb +22 -0
  28. data/lib/roro/cli/rollon/stories/rails/database/with_postgres.rb +21 -0
  29. data/lib/roro/cli/rollon/stories/ruby_gem.rb +77 -0
  30. data/lib/roro/cli/rollon/stories/ruby_gem/with_ci_cd.rb +60 -0
  31. data/lib/roro/cli/rollon/stories/stories.rb +7 -0
  32. data/lib/roro/cli/roro_configurator.yml +157 -0
  33. data/lib/roro/cli/ruby_gem.rb +61 -42
  34. data/lib/roro/cli/templates/base/.dockerignore +51 -0
  35. data/{docker/keys → lib/roro/cli/templates/base}/.keep +0 -0
  36. data/lib/roro/cli/templates/base/.roro_config.yml +15 -0
  37. data/lib/roro/cli/templates/base/Dockerfile.tt +82 -0
  38. data/lib/roro/cli/templates/base/config/database.mysql.yml +19 -0
  39. data/lib/roro/cli/templates/{config/database.yml → base/config/database.pg.yml} +0 -0
  40. data/{test_apps/dummy_roro/.circleci/config.yml → lib/roro/cli/templates/circleci/config.yml.tt} +7 -6
  41. data/lib/roro/cli/templates/{docker/containers/database → dockerize}/.keep +0 -0
  42. data/lib/roro/cli/templates/dockerize/Dockerfile.tt +23 -0
  43. data/lib/roro/cli/templates/dockerize/docker-compose.yml.tt +60 -0
  44. data/lib/roro/cli/templates/dockerize/docker-entrypoint.sh +9 -0
  45. data/lib/roro/cli/templates/greenfield/Dockerfile.tt +43 -0
  46. data/lib/roro/cli/templates/{docker/env_files → jumpstart}/.keep +0 -0
  47. data/lib/roro/cli/templates/jumpstart/Dockerfile.tt +30 -0
  48. data/lib/roro/cli/templates/jumpstart/docker-compose.yml +59 -0
  49. data/lib/roro/cli/templates/jumpstart/docker-entrypoint.sh +16 -0
  50. data/lib/roro/cli/templates/livereload/hosts.example +7 -0
  51. data/lib/roro/cli/templates/{docker/keys → roro}/.keep +0 -0
  52. data/lib/roro/cli/templates/roro/docker-compose.yml.tt +60 -0
  53. data/lib/roro/cli/templates/{ruby_gem/docker/env_files → roro/roro}/.keep +0 -0
  54. data/lib/roro/cli/templates/{ruby_gem/docker/keys → roro/roro/containers}/.keep +0 -0
  55. data/{test_apps/dummy/app/assets/images → lib/roro/cli/templates/roro/roro/containers/app}/.keep +0 -0
  56. data/{test_apps/dummy/app/assets/javascripts/channels → lib/roro/cli/templates/roro/roro/containers/frontend}/.keep +0 -0
  57. data/lib/roro/cli/templates/roro/roro/docker-entrypoint.sh.tt +8 -0
  58. data/lib/roro/cli/templates/ruby_gem/{config.yml → .circleci/config.yml} +0 -0
  59. data/lib/roro/cli/templates/ruby_gem/docker-compose.yml +3 -3
  60. data/lib/roro/cli/templates/ruby_gem/roro/containers/gem/Dockerfile.tt +9 -0
  61. data/{test_apps/dummy/app/controllers/concerns → lib/roro/cli/templates/ruby_gem/roro/env_files}/.keep +0 -0
  62. data/{test_apps/dummy/app/models/concerns → lib/roro/cli/templates/ruby_gem/roro/keys}/.keep +0 -0
  63. data/{test_apps/dummy/lib/assets → lib/roro/cli/templates/stories}/.keep +0 -0
  64. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +10 -0
  65. data/{test_apps/dummy/lib/tasks → lib/roro/cli/templates/stories/with_postgresql}/.keep +0 -0
  66. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +7 -0
  67. data/lib/roro/version.rb +1 -1
  68. data/roro.gemspec +7 -4
  69. data/{test_apps/dummy/log → sandbox}/.keep +0 -0
  70. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  71. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  72. data/vendor/cache/activesupport-6.0.3.2.gem +0 -0
  73. data/vendor/cache/addressable-2.7.0.gem +0 -0
  74. data/vendor/cache/builder-3.2.4.gem +0 -0
  75. data/vendor/cache/byebug-11.1.3.gem +0 -0
  76. data/vendor/cache/coderay-1.1.3.gem +0 -0
  77. data/vendor/cache/concurrent-ruby-1.1.7.gem +0 -0
  78. data/vendor/cache/crass-1.0.6.gem +0 -0
  79. data/vendor/cache/erubi-1.9.0.gem +0 -0
  80. data/vendor/cache/ffi-1.13.1.gem +0 -0
  81. data/vendor/cache/gem-release-2.1.1.gem +0 -0
  82. data/vendor/cache/guard-2.16.2.gem +0 -0
  83. data/vendor/cache/i18n-1.8.5.gem +0 -0
  84. data/vendor/cache/launchy-2.5.0.gem +0 -0
  85. data/vendor/cache/listen-3.2.1.gem +0 -0
  86. data/vendor/cache/loofah-2.6.0.gem +0 -0
  87. data/vendor/cache/lumberjack-1.2.7.gem +0 -0
  88. data/vendor/cache/method_source-1.0.0.gem +0 -0
  89. data/vendor/cache/minitest-5.14.1.gem +0 -0
  90. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  91. data/vendor/cache/mocha-1.11.2.gem +0 -0
  92. data/vendor/cache/multi_json-1.15.0.gem +0 -0
  93. data/vendor/cache/net-scp-3.0.0.gem +0 -0
  94. data/vendor/cache/net-ssh-6.1.0.gem +0 -0
  95. data/vendor/cache/{nokogiri-1.9.1.gem → nokogiri-1.10.10.gem} +0 -0
  96. data/vendor/cache/notiffany-0.1.3.gem +0 -0
  97. data/vendor/cache/pry-0.13.1.gem +0 -0
  98. data/vendor/cache/public_suffix-4.0.5.gem +0 -0
  99. data/vendor/cache/rack-2.2.3.gem +0 -0
  100. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  101. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  102. data/vendor/cache/rake-13.0.1.gem +0 -0
  103. data/vendor/cache/rb-fsevent-0.10.4.gem +0 -0
  104. data/vendor/cache/rb-inotify-0.10.1.gem +0 -0
  105. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  106. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  107. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
  108. data/vendor/cache/sorcerer-2.0.1.gem +0 -0
  109. data/vendor/cache/thor-1.0.1.gem +0 -0
  110. data/vendor/cache/tzinfo-1.2.7.gem +0 -0
  111. data/vendor/cache/zeitwerk-2.4.0.gem +0 -0
  112. metadata +163 -281
  113. data/.circleci/config.yml +0 -177
  114. data/.circleci/setup-gem-credentials.sh +0 -3
  115. data/.ruby-version +0 -1
  116. data/Gemfile.lock +0 -165
  117. data/_config.yml +0 -1
  118. data/docker-compose.yml +0 -21
  119. data/docker/containers/2_5_3/Dockerfile +0 -10
  120. data/docker/containers/2_6_0/Dockerfile +0 -10
  121. data/docker/containers/app/Dockerfile +0 -10
  122. data/docker/env_files/circleci.env.enc +0 -5
  123. data/lib/roro/cli/base.rb +0 -137
  124. data/lib/roro/cli/generate_keys.rb +0 -79
  125. data/lib/roro/cli/templates/Gemfile.lock +0 -0
  126. data/lib/roro/cli/templates/Guardfile +0 -81
  127. data/lib/roro/cli/templates/circleci/Rakefile +0 -4
  128. data/lib/roro/cli/templates/circleci/config.job-example.yml +0 -33
  129. data/lib/roro/cli/templates/circleci/config.yml +0 -69
  130. data/lib/roro/cli/templates/circleci/config.yml.workflow-example +0 -62
  131. data/lib/roro/cli/templates/circleci/deploy.rake +0 -127
  132. data/lib/roro/cli/templates/config.yml +0 -71
  133. data/lib/roro/cli/templates/docker-compose.yml +0 -53
  134. data/lib/roro/cli/templates/docker/containers/app/Dockerfile.tt +0 -12
  135. data/lib/roro/cli/templates/docker/containers/web/Dockerfile.tt +0 -18
  136. data/lib/roro/cli/templates/docker/containers/web/app.conf.tt +0 -23
  137. data/lib/roro/cli/templates/docker/overrides/circleci.yml.tt +0 -19
  138. data/lib/roro/cli/templates/docker/overrides/production.yml.tt +0 -26
  139. data/lib/roro/cli/templates/docker/web/Dockerfile +0 -20
  140. data/lib/roro/cli/templates/docker/web/app.conf +0 -23
  141. data/lib/roro/cli/templates/gitignore +0 -27
  142. data/lib/roro/cli/templates/greenfield/Dockerfile +0 -8
  143. data/lib/roro/cli/templates/greenfield/Gemfile +0 -2
  144. data/lib/roro/cli/templates/greenfield/Gemfile.lock +0 -0
  145. data/lib/roro/cli/templates/greenfield/config/database.yml.example +0 -16
  146. data/lib/roro/cli/templates/greenfield/docker-compose.yml +0 -15
  147. data/lib/roro/cli/templates/lib/tasks/deploy.rake +0 -126
  148. data/lib/roro/cli/templates/ruby_gem/docker/containers/app/Dockerfile.tt +0 -10
  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/database.yml +0 -85
  179. data/test_apps/dummy/config/environment.rb +0 -5
  180. data/test_apps/dummy/config/environments/development.rb +0 -61
  181. data/test_apps/dummy/config/environments/production.rb +0 -94
  182. data/test_apps/dummy/config/environments/test.rb +0 -46
  183. data/test_apps/dummy/config/initializers/application_controller_renderer.rb +0 -8
  184. data/test_apps/dummy/config/initializers/assets.rb +0 -14
  185. data/test_apps/dummy/config/initializers/backtrace_silencers.rb +0 -7
  186. data/test_apps/dummy/config/initializers/content_security_policy.rb +0 -25
  187. data/test_apps/dummy/config/initializers/cookies_serializer.rb +0 -5
  188. data/test_apps/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  189. data/test_apps/dummy/config/initializers/inflections.rb +0 -16
  190. data/test_apps/dummy/config/initializers/mime_types.rb +0 -4
  191. data/test_apps/dummy/config/initializers/wrap_parameters.rb +0 -14
  192. data/test_apps/dummy/config/locales/en.yml +0 -33
  193. data/test_apps/dummy/config/puma.rb +0 -34
  194. data/test_apps/dummy/config/routes.rb +0 -3
  195. data/test_apps/dummy/config/spring.rb +0 -6
  196. data/test_apps/dummy/config/storage.yml +0 -34
  197. data/test_apps/dummy/db/seeds.rb +0 -7
  198. data/test_apps/dummy/package.json +0 -5
  199. data/test_apps/dummy/public/404.html +0 -67
  200. data/test_apps/dummy/public/422.html +0 -67
  201. data/test_apps/dummy/public/500.html +0 -66
  202. data/test_apps/dummy/public/apple-touch-icon-precomposed.png +0 -0
  203. data/test_apps/dummy/public/apple-touch-icon.png +0 -0
  204. data/test_apps/dummy/public/favicon.ico +0 -0
  205. data/test_apps/dummy/public/robots.txt +0 -1
  206. data/test_apps/dummy/storage/.keep +0 -0
  207. data/test_apps/dummy/test/application_system_test_case.rb +0 -5
  208. data/test_apps/dummy/test/controllers/.keep +0 -0
  209. data/test_apps/dummy/test/fixtures/.keep +0 -0
  210. data/test_apps/dummy/test/fixtures/files/.keep +0 -0
  211. data/test_apps/dummy/test/helpers/.keep +0 -0
  212. data/test_apps/dummy/test/integration/.keep +0 -0
  213. data/test_apps/dummy/test/mailers/.keep +0 -0
  214. data/test_apps/dummy/test/models/.keep +0 -0
  215. data/test_apps/dummy/test/system/.keep +0 -0
  216. data/test_apps/dummy/test/test_helper.rb +0 -10
  217. data/test_apps/dummy/tmp/.keep +0 -0
  218. data/test_apps/dummy/vendor/.keep +0 -0
  219. data/test_apps/dummy_gem/.keep +0 -0
  220. data/test_apps/dummy_roro/.circleci/Rakefile +0 -4
  221. data/test_apps/dummy_roro/.circleci/config.job-example.yml +0 -33
  222. data/test_apps/dummy_roro/.circleci/config.yml.workflow-example +0 -62
  223. data/test_apps/dummy_roro/.circleci/deploy.rake +0 -127
  224. data/test_apps/dummy_roro/.gitignore +0 -27
  225. data/test_apps/dummy_roro/Gemfile +0 -64
  226. data/test_apps/dummy_roro/README.md +0 -24
  227. data/test_apps/dummy_roro/Rakefile +0 -6
  228. data/test_apps/dummy_roro/app/assets/config/manifest.js +0 -3
  229. data/test_apps/dummy_roro/app/assets/images/.keep +0 -0
  230. data/test_apps/dummy_roro/app/assets/javascripts/application.js +0 -16
  231. data/test_apps/dummy_roro/app/assets/javascripts/cable.js +0 -13
  232. data/test_apps/dummy_roro/app/assets/javascripts/channels/.keep +0 -0
  233. data/test_apps/dummy_roro/app/assets/stylesheets/application.css +0 -15
  234. data/test_apps/dummy_roro/app/channels/application_cable/channel.rb +0 -4
  235. data/test_apps/dummy_roro/app/channels/application_cable/connection.rb +0 -4
  236. data/test_apps/dummy_roro/app/controllers/application_controller.rb +0 -2
  237. data/test_apps/dummy_roro/app/controllers/concerns/.keep +0 -0
  238. data/test_apps/dummy_roro/app/helpers/application_helper.rb +0 -2
  239. data/test_apps/dummy_roro/app/jobs/application_job.rb +0 -2
  240. data/test_apps/dummy_roro/app/mailers/application_mailer.rb +0 -4
  241. data/test_apps/dummy_roro/app/models/application_record.rb +0 -3
  242. data/test_apps/dummy_roro/app/models/concerns/.keep +0 -0
  243. data/test_apps/dummy_roro/app/views/layouts/application.html.erb +0 -15
  244. data/test_apps/dummy_roro/app/views/layouts/mailer.html.erb +0 -13
  245. data/test_apps/dummy_roro/app/views/layouts/mailer.text.erb +0 -1
  246. data/test_apps/dummy_roro/bin/bundle +0 -3
  247. data/test_apps/dummy_roro/bin/rails +0 -4
  248. data/test_apps/dummy_roro/bin/rake +0 -4
  249. data/test_apps/dummy_roro/bin/setup +0 -36
  250. data/test_apps/dummy_roro/bin/update +0 -31
  251. data/test_apps/dummy_roro/bin/yarn +0 -11
  252. data/test_apps/dummy_roro/config.ru +0 -5
  253. data/test_apps/dummy_roro/config/application.rb +0 -19
  254. data/test_apps/dummy_roro/config/boot.rb +0 -4
  255. data/test_apps/dummy_roro/config/cable.yml +0 -10
  256. data/test_apps/dummy_roro/config/credentials.yml.enc +0 -1
  257. data/test_apps/dummy_roro/config/database.yml +0 -20
  258. data/test_apps/dummy_roro/config/environment.rb +0 -5
  259. data/test_apps/dummy_roro/config/environments/development.rb +0 -61
  260. data/test_apps/dummy_roro/config/environments/production.rb +0 -94
  261. data/test_apps/dummy_roro/config/environments/test.rb +0 -46
  262. data/test_apps/dummy_roro/config/initializers/application_controller_renderer.rb +0 -8
  263. data/test_apps/dummy_roro/config/initializers/assets.rb +0 -14
  264. data/test_apps/dummy_roro/config/initializers/backtrace_silencers.rb +0 -7
  265. data/test_apps/dummy_roro/config/initializers/content_security_policy.rb +0 -25
  266. data/test_apps/dummy_roro/config/initializers/cookies_serializer.rb +0 -5
  267. data/test_apps/dummy_roro/config/initializers/filter_parameter_logging.rb +0 -4
  268. data/test_apps/dummy_roro/config/initializers/inflections.rb +0 -16
  269. data/test_apps/dummy_roro/config/initializers/mime_types.rb +0 -4
  270. data/test_apps/dummy_roro/config/initializers/wrap_parameters.rb +0 -14
  271. data/test_apps/dummy_roro/config/locales/en.yml +0 -33
  272. data/test_apps/dummy_roro/config/puma.rb +0 -34
  273. data/test_apps/dummy_roro/config/routes.rb +0 -3
  274. data/test_apps/dummy_roro/config/spring.rb +0 -6
  275. data/test_apps/dummy_roro/config/storage.yml +0 -34
  276. data/test_apps/dummy_roro/db/seeds.rb +0 -7
  277. data/test_apps/dummy_roro/docker-compose.yml +0 -51
  278. data/test_apps/dummy_roro/docker/containers/app/Dockerfile +0 -12
  279. data/test_apps/dummy_roro/docker/containers/app/circleci.env +0 -2
  280. data/test_apps/dummy_roro/docker/containers/app/development.env +0 -2
  281. data/test_apps/dummy_roro/docker/containers/app/production.env +0 -2
  282. data/test_apps/dummy_roro/docker/containers/app/staging.env +0 -2
  283. data/test_apps/dummy_roro/docker/containers/database/.keep +0 -0
  284. data/test_apps/dummy_roro/docker/containers/database/circleci.env +0 -3
  285. data/test_apps/dummy_roro/docker/containers/database/development.env +0 -3
  286. data/test_apps/dummy_roro/docker/containers/database/production.env +0 -3
  287. data/test_apps/dummy_roro/docker/containers/database/staging.env +0 -3
  288. data/test_apps/dummy_roro/docker/containers/web/Dockerfile +0 -18
  289. data/test_apps/dummy_roro/docker/containers/web/app.conf +0 -23
  290. data/test_apps/dummy_roro/docker/containers/web/circleci.env +0 -1
  291. data/test_apps/dummy_roro/docker/containers/web/development.env +0 -1
  292. data/test_apps/dummy_roro/docker/containers/web/production.env +0 -1
  293. data/test_apps/dummy_roro/docker/containers/web/staging.env +0 -1
  294. data/test_apps/dummy_roro/docker/env_files/circleci.env +0 -12
  295. data/test_apps/dummy_roro/docker/env_files/circleci.env.enc +0 -14
  296. data/test_apps/dummy_roro/docker/env_files/production.env +0 -2
  297. data/test_apps/dummy_roro/docker/env_files/production.env.enc +0 -2
  298. data/test_apps/dummy_roro/docker/keys/.keep +0 -0
  299. data/test_apps/dummy_roro/docker/overrides/circleci.yml +0 -19
  300. data/test_apps/dummy_roro/docker/overrides/production.yml +0 -26
  301. data/test_apps/dummy_roro/lib/assets/.keep +0 -0
  302. data/test_apps/dummy_roro/lib/tasks/.keep +0 -0
  303. data/test_apps/dummy_roro/lib/tasks/deploy.rake +0 -126
  304. data/test_apps/dummy_roro/log/.keep +0 -0
  305. data/test_apps/dummy_roro/package.json +0 -5
  306. data/test_apps/dummy_roro/public/404.html +0 -67
  307. data/test_apps/dummy_roro/public/422.html +0 -67
  308. data/test_apps/dummy_roro/public/500.html +0 -66
  309. data/test_apps/dummy_roro/public/apple-touch-icon-precomposed.png +0 -0
  310. data/test_apps/dummy_roro/public/apple-touch-icon.png +0 -0
  311. data/test_apps/dummy_roro/public/favicon.ico +0 -0
  312. data/test_apps/dummy_roro/public/robots.txt +0 -1
  313. data/test_apps/dummy_roro/storage/.keep +0 -0
  314. data/test_apps/dummy_roro/test/application_system_test_case.rb +0 -5
  315. data/test_apps/dummy_roro/test/controllers/.keep +0 -0
  316. data/test_apps/dummy_roro/test/fixtures/.keep +0 -0
  317. data/test_apps/dummy_roro/test/fixtures/files/.keep +0 -0
  318. data/test_apps/dummy_roro/test/helpers/.keep +0 -0
  319. data/test_apps/dummy_roro/test/integration/.keep +0 -0
  320. data/test_apps/dummy_roro/test/mailers/.keep +0 -0
  321. data/test_apps/dummy_roro/test/models/.keep +0 -0
  322. data/test_apps/dummy_roro/test/system/.keep +0 -0
  323. data/test_apps/dummy_roro/test/test_helper.rb +0 -10
  324. data/test_apps/dummy_roro/tmp/.keep +0 -0
  325. data/test_apps/dummy_roro/vendor/.keep +0 -0
  326. data/test_apps/greenfield/.keep +0 -0
  327. data/vendor/cache/actionpack-5.2.2.gem +0 -0
  328. data/vendor/cache/actionview-5.2.2.gem +0 -0
  329. data/vendor/cache/activesupport-5.2.2.gem +0 -0
  330. data/vendor/cache/addressable-2.5.2.gem +0 -0
  331. data/vendor/cache/builder-3.2.3.gem +0 -0
  332. data/vendor/cache/coderay-1.1.2.gem +0 -0
  333. data/vendor/cache/concurrent-ruby-1.1.4.gem +0 -0
  334. data/vendor/cache/crass-1.0.4.gem +0 -0
  335. data/vendor/cache/erubi-1.8.0.gem +0 -0
  336. data/vendor/cache/ffi-1.9.25.gem +0 -0
  337. data/vendor/cache/guard-2.15.0.gem +0 -0
  338. data/vendor/cache/i18n-1.3.0.gem +0 -0
  339. data/vendor/cache/launchy-2.4.3.gem +0 -0
  340. data/vendor/cache/listen-3.1.5.gem +0 -0
  341. data/vendor/cache/loofah-2.2.3.gem +0 -0
  342. data/vendor/cache/lumberjack-1.0.13.gem +0 -0
  343. data/vendor/cache/method_source-0.9.2.gem +0 -0
  344. data/vendor/cache/minitest-5.11.3.gem +0 -0
  345. data/vendor/cache/minitest-rails-3.0.0.gem +0 -0
  346. data/vendor/cache/multi_json-1.13.1.gem +0 -0
  347. data/vendor/cache/net-scp-2.0.0.gem +0 -0
  348. data/vendor/cache/net-ssh-5.2.0.gem +0 -0
  349. data/vendor/cache/notiffany-0.1.1.gem +0 -0
  350. data/vendor/cache/pry-0.12.2.gem +0 -0
  351. data/vendor/cache/public_suffix-3.0.3.gem +0 -0
  352. data/vendor/cache/rack-2.0.6.gem +0 -0
  353. data/vendor/cache/rails-html-sanitizer-1.0.4.gem +0 -0
  354. data/vendor/cache/railties-5.2.2.gem +0 -0
  355. data/vendor/cache/rake-10.5.0.gem +0 -0
  356. data/vendor/cache/rb-fsevent-0.10.3.gem +0 -0
  357. data/vendor/cache/rb-inotify-0.10.0.gem +0 -0
  358. data/vendor/cache/ruby_dep-1.5.0.gem +0 -0
  359. data/vendor/cache/shoulda-3.6.0.gem +0 -0
  360. data/vendor/cache/shoulda-context-1.2.2.gem +0 -0
  361. data/vendor/cache/shoulda-matchers-3.1.2.gem +0 -0
  362. data/vendor/cache/sorcerer-1.0.2.gem +0 -0
  363. data/vendor/cache/thor-0.20.3.gem +0 -0
  364. data/vendor/cache/tzinfo-1.2.5.gem +0 -0
@@ -0,0 +1,69 @@
1
+ require 'yaml'
2
+ module Roro
3
+ class Configuration < Thor
4
+
5
+ attr_reader :master, :app, :choices, :thor_actions
6
+
7
+ def initialize(options={})
8
+ @options = options || {}
9
+ @master = YAML.load_file(File.dirname(__FILE__) + '/roro_configurator.yml')
10
+ @master['services']['server_app']['vendors']['rails']['version'] = `ruby -v`.scan(/\d.\d/).first
11
+ @choices = @master['services']['server_app']['vendors']['rails']['choices']
12
+ @app = {}
13
+ @thor_actions = {}
14
+ configure
15
+ end
16
+
17
+ no_commands do
18
+
19
+ def configure
20
+ set_from_defaults
21
+ case
22
+ when @options['interactive'] && File.exist?('.roro_config.yml')
23
+ set_from_roro_config
24
+ set_from_interactive
25
+ when File.exist?('.roro_config.yml')
26
+ set_from_roro_config
27
+ when @options['interactive']
28
+ set_from_interactive
29
+ end
30
+ end
31
+
32
+ def set_from_defaults
33
+ svcs = @master['services']
34
+ rails = svcs['server_app']['vendors']['rails']
35
+ @app = {
36
+ 'main_app_name' => Dir.pwd.split('/').last,
37
+ 'database_host' => rails['env_vars']['DATABASE_HOST'],
38
+ 'ruby_version' => rails['version'],
39
+ 'frontend_service' => svcs['frontend']['name'],
40
+ 'webserver_service' => svcs['webserver']['default'],
41
+ 'database_service' => svcs['database']['name'],
42
+ 'database_vendor' => svcs['database']['vendor'],
43
+ }
44
+ @choices.each { |key, value| @thor_actions[key] = value["default"] }
45
+ end
46
+
47
+ def set_from_roro_config
48
+ yaml = YAML.load_file(Dir.pwd + '/.roro_config.yml')
49
+ yaml.each { |key, value| @app[key] = value }
50
+ if yaml['thor_actions']
51
+ yaml['thor_actions'].each do |key, value|
52
+ @thor_actions[key] = value
53
+ end
54
+ end
55
+ end
56
+
57
+ def set_from_interactive
58
+ @choices.each do |key, v|
59
+ prompt = ["\n\n" + v['question']]
60
+ v['choices'].each { |k,v| prompt << "(#{k}) #{v.to_s}" }
61
+ answer = ask((prompt.join("\n\n") + "\n\n"),
62
+ default: v['default'],
63
+ limited_to: v['choices'].keys)
64
+ @thor_actions[key] = answer
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,13 +1,14 @@
1
1
  module Roro
2
2
  class CLI < Thor
3
+
4
+ no_commands do
3
5
 
4
- desc "expose", "Expose encrypted files"
5
-
6
- def expose(*args)
7
- environments = args.first ? [args.first] : gather_environments
8
- environments.each do |environment|
9
- HandsomeFencer::Crypto.expose(environment, 'docker')
6
+ def expose(*args)
7
+ environments = args.first ? [args.first] : gather_environments
8
+ environments.each do |environment|
9
+ HandsomeFencer::Crypto.expose(environment, 'roro')
10
+ end
10
11
  end
11
12
  end
12
13
  end
13
- end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Roro
2
+ class CLI < Thor
3
+ include Thor::Actions
4
+
5
+ # desc "generate::config::roro", "Generate a config file at .roro_config.yml"
6
+ # map "generate::config::roro" => "generate_roro_config"
7
+
8
+
9
+ # def generate_roro_config
10
+ # create_file ".roro_config.yml", @config.app.to_yaml
11
+ # end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # module Roro
2
+ # class CLI < Thor
3
+ # include Thor::Actions
4
+
5
+ # desc "generate::config::rails", "Generates a config file to use roro with
6
+ # a rails app at .roro.yml"
7
+ # map "generate::config::rails" => "generate_config_rails"
8
+
9
+ # def generate_config_rails
10
+ # master_config = YAML.load_file(ENV['PWD'] + "/lib/roro/cli/roro_configurator.yml")
11
+ # template 'base/.roro_config.yml', '.roro_config.yml'
12
+ # end
13
+
14
+ # no_commands do
15
+ # end
16
+ # end
17
+ # end
@@ -0,0 +1 @@
1
+ require_relative 'config/rails'
@@ -0,0 +1,47 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ no_commands do
6
+
7
+ def generate_key_or_keys(*args)
8
+ environments = args.first ? [args.first] : gather_environments
9
+ environments.each do |environment|
10
+
11
+ confirm_files_decrypted?(environment)
12
+ create_file "roro/keys/#{environment}.key", encoded_key
13
+ end
14
+ end
15
+
16
+ def encoded_key
17
+ @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
18
+ @salt = '8 octets'
19
+ @new_key = @cipher.random_key
20
+ Base64.encode64(@new_key)
21
+ end
22
+
23
+ def gather_environments
24
+ environments = []
25
+ ['.env', '.env.enc'].each do |extension|
26
+ HandsomeFencer::Crypto.source_files('roro', extension).each do |env_file|
27
+ environments << env_file.split('/').last.split(extension).last
28
+ end
29
+ end
30
+ environments.uniq
31
+ end
32
+
33
+ def confirm_files_decrypted?(environment)
34
+ orphan_encrypted = []
35
+ HandsomeFencer::Crypto.source_files('.', '.env.enc').each do |file|
36
+ unless File.exist? file.split('.enc').first
37
+ orphan_encrypted << file
38
+ end
39
+ end
40
+ if !orphan_encrypted.empty?
41
+ 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}.")
42
+ end
43
+ true
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,96 +1,31 @@
1
- require 'os'
2
-
3
1
  module Roro
4
2
 
5
3
  class CLI < Thor
6
-
7
- include Thor::Actions
8
-
9
- desc "greenfield", "Greenfield a brand new rails app using Docker's instructions"
10
-
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
- method_option :interactive, desc: "Set up your environment variables as you go."
13
- method_option :force, desc: "force over-write of existing files"
14
-
15
- def greenfield
16
-
17
- confirm_dependencies
18
- 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'
25
- end
26
-
4
+
27
5
  no_commands do
28
-
29
- def as_system(command)
30
- command = OS.linux? ? "sudo #{command}" : command
31
- system command
6
+
7
+ def greenfield
8
+ confirm_directory_empty
9
+ confirm_dependencies
10
+ remove_roro_artifacts
11
+ configure_for_greenfielding
12
+ copy_greenfield_files
13
+ run_greenfield_commands
32
14
  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
15
+
16
+ def configure_for_greenfielding
17
+ @config ||= Roro::Configuration.new(options)
18
+ end
19
+
20
+ def run_greenfield_commands
21
+ system "DOCKER_BUILDKIT=1 docker build --file Dockerfile --output . ."
22
+ rollon
93
23
  end
24
+
25
+ def copy_greenfield_files
26
+ template 'greenfield/Dockerfile.tt', 'Dockerfile', @config.app
27
+ template 'roro/docker-compose.yml.tt', 'docker-compose.yml', @config.app
28
+ end
94
29
  end
95
30
  end
96
31
  end
@@ -3,17 +3,16 @@ require 'handsome_fencer/crypto'
3
3
  module Roro
4
4
 
5
5
  class CLI < Thor
6
-
7
- include Thor::Actions
8
- include HandsomeFencer::Crypto
9
-
10
- desc "obfuscate", "obfuscates any files matching the pattern ./docker/**/*.env"
11
-
12
- def obfuscate(*args)
13
- default_environments = %w[circleci development staging production]
14
- environments = args.first ? [args.first] : default_environments
15
- environments.each do |environment|
16
- HandsomeFencer::Crypto.obfuscate(environment, 'docker')
6
+
7
+ no_commands do
8
+ include Thor::Actions
9
+ include HandsomeFencer::Crypto
10
+
11
+ def obfuscate(*args)
12
+ environments = args.first ? [args.first] : gather_environments
13
+ environments.each do |environment|
14
+ HandsomeFencer::Crypto.obfuscate(environment, 'roro')
15
+ end
17
16
  end
18
17
  end
19
18
  end
@@ -1,21 +1,84 @@
1
+ require 'roro/cli/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,3 @@
1
+ require 'roro/cli/rollon/stories/ruby_gem'
2
+ require 'roro/cli/rollon/stories/rails'
3
+ require 'roro/cli/rollon/stories/database'
@@ -0,0 +1 @@
1
+ # require 'roro/cli/rollon/stories/ruby_gem/with_ci_cd.rb'
@@ -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
+