roro 0.3.22 → 0.3.23

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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +99 -68
  3. data/.gitignore +31 -7
  4. data/.ruby-version +1 -0
  5. data/Gemfile +1 -1
  6. data/Guardfile +23 -13
  7. data/README.md +9 -10
  8. data/bin/console +1 -1
  9. data/bin/setup +1 -1
  10. data/docker-compose.yml +3 -3
  11. data/lib/roro/cli/generate/generate.rb +52 -1
  12. data/lib/roro/cli/generate/generate_containers.rb +23 -0
  13. data/lib/roro/cli/generate/generate_environments.rb +25 -0
  14. data/lib/roro/cli/generate/generate_exposed.rb +4 -11
  15. data/lib/roro/cli/generate/generate_keys.rb +7 -6
  16. data/lib/roro/cli/generate/generate_mise.rb +13 -0
  17. data/lib/roro/cli/generate/generate_obfuscated.rb +5 -25
  18. data/lib/roro/cli/roll_your_own.rb +12 -0
  19. data/lib/roro/cli/rollon.rb +11 -138
  20. data/lib/roro/cli.rb +30 -23
  21. data/lib/roro/common/file_reflection.rb +33 -0
  22. data/lib/roro/common/utilities.rb +185 -0
  23. data/lib/roro/configurator.rb +14 -14
  24. data/lib/roro/configurators/adventure_case_builder.rb +65 -0
  25. data/lib/roro/configurators/adventure_chooser.rb +46 -0
  26. data/lib/roro/configurators/adventure_picker.rb +68 -0
  27. data/lib/roro/configurators/adventure_writer.rb +34 -0
  28. data/lib/roro/configurators/catalog_builder.rb +17 -0
  29. data/lib/roro/configurators/configurator.rb +64 -0
  30. data/lib/roro/configurators/eligibility.rb +141 -0
  31. data/lib/roro/configurators/question_asker.rb +29 -0
  32. data/lib/roro/configurators/question_builder.rb +83 -0
  33. data/lib/roro/configurators/structure_builder.rb +34 -0
  34. data/lib/roro/configurators/utilities.rb +188 -0
  35. data/lib/roro/configurators/validator.rb +109 -0
  36. data/lib/roro/crypto/cipher.rb +35 -0
  37. data/lib/roro/crypto/exposer.rb +33 -0
  38. data/lib/roro/crypto/file_writer.rb +14 -0
  39. data/lib/roro/crypto/key_writer.rb +35 -0
  40. data/lib/roro/crypto/obfuscator.rb +25 -0
  41. data/lib/roro/error.rb +31 -0
  42. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/fatsufodo.yml +1 -0
  43. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/django.yml +38 -0
  44. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  45. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  46. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  47. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_two/settings.py +130 -0
  48. data/lib/roro/{templates/base/jumpstart → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/dummy}/.keep +0 -0
  49. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/stage_one_test.rb +37 -0
  50. data/lib/roro/{templates/base/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_two/dummy}/.keep +0 -0
  51. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/expressjs.yml +8 -0
  52. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  53. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  54. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/flask.yml +14 -0
  55. data/lib/roro/{templates/base/roro/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one}/.keep +0 -0
  56. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/Dockerfile +11 -0
  57. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/app.py +23 -0
  58. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/docker-compose.yml +8 -0
  59. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/requirements.txt +2 -0
  60. data/lib/roro/{templates/base/roro/roro/containers → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test}/.keep +0 -0
  61. data/lib/roro/{templates/base/roro/roro/containers/app → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one}/.keep +0 -0
  62. data/lib/roro/{templates/base/roro/roro/containers/frontend → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_dummy}/.keep +0 -0
  63. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_test.rb +37 -0
  64. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/rails.yml +12 -0
  65. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  66. data/lib/roro/{templates/base/roro/roro/keys/.keep → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  67. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  68. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/docker-compose.yml.tt +9 -0
  69. data/lib/roro/{templates/base/roro/roro/docker-entrypoint.sh.tt → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/entrypoint.sh} +1 -1
  70. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_two/database.yml.tt +16 -0
  71. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  72. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/wordpress.yml +17 -0
  73. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/okonomi.yml +1 -0
  74. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/roll_your_own.yml +23 -0
  75. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/%interpolated_story_name%.yml.tt +10 -0
  76. data/lib/roro/{templates/rails/.circleci → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/templates/stage_one}/.keep +0 -0
  77. data/lib/roro/{templates/rails → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test}/.keep +0 -0
  78. data/lib/roro/{templates/rails/database/with_postgresql → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one}/.keep +0 -0
  79. data/lib/roro/{templates/rails/dotenv → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_dummy}/.keep +0 -0
  80. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_test.rb.tt +37 -0
  81. data/lib/roro/{templates/rails/roro → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/dummy}/.keep +0 -0
  82. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/stage_one_test.rb +58 -0
  83. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/omakase.yml +1 -0
  84. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/rails.yml +13 -0
  85. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  86. data/lib/roro/{templates/rails/roro/containers/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  87. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  88. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  89. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  90. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_two/database.yml.tt +16 -0
  91. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/.env +38 -0
  92. data/lib/roro/{templates/rails/roro/containers/app → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one}/.keep +0 -0
  93. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/LICENSE +674 -0
  94. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/README.md +346 -0
  95. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/build.sh +39 -0
  96. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-custom-configs.conf +117 -0
  97. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-wp-hardening.conf +131 -0
  98. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-http.conf.template +103 -0
  99. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-https.conf.example +123 -0
  100. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/php.conf.ini +3 -0
  101. data/lib/roro/{templates/rails/roro/containers/frontend/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/conf/.placeholder} +0 -0
  102. data/lib/roro/{templates/rails/roro/keys/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/www/.placeholder} +0 -0
  103. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-build.yml +24 -0
  104. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-dev.yml +96 -0
  105. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-prod.yml +147 -0
  106. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/dump_mysql.sh +16 -0
  107. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/init_letsencrypt.sh +80 -0
  108. data/lib/roro/{templates/rails/roro/kube/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/mysql-dumps/.placeholder} +0 -0
  109. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/push.sh +22 -0
  110. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/Dockerfile +14 -0
  111. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/adduser.sh +15 -0
  112. data/lib/roro/{templates/rails/roro/kube/certificate.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-sql/.placeholder} +0 -0
  113. data/lib/roro/{templates/rails/roro/kube/cluster-issuer.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-src/.placeholder} +0 -0
  114. data/lib/roro/{templates/ruby_gem/.circleci → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test}/.keep +0 -0
  115. data/lib/roro/{templates/ruby_gem/roro/containers → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one}/.keep +0 -0
  116. data/lib/roro/{templates/ruby_gem/roro/keys → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_dummy}/.keep +0 -0
  117. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_test.rb +40 -0
  118. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/wordpress.yml +76 -0
  119. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/fatsufodo.yml +1 -0
  120. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/django.yml +36 -0
  121. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  122. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  123. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  124. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_two/settings.py +130 -0
  125. data/{roro/containers → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/dummy}/.keep +0 -0
  126. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/stage_one_test.rb +37 -0
  127. data/{roro/keys → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_two/dummy}/.keep +0 -0
  128. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/expressjs.yml +7 -0
  129. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  130. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  131. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/rails.yml +12 -0
  132. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  133. data/lib/roro/{templates/rails/roro/kube/ingress.yml.tt → stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  134. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  135. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  136. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  137. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_two/database.yml.tt +16 -0
  138. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/__MACOSX/scripts/._.DS_Store +0 -0
  139. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/.DS_Store +0 -0
  140. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/bundler.sh +22 -0
  141. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/git.sh +21 -0
  142. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/rvm.sh +38 -0
  143. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/utilities.sh +53 -0
  144. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base.sh +6 -0
  145. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_idea.sh +14 -0
  146. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_repos.sh +33 -0
  147. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_correct_bundler.sh +21 -0
  148. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_rubies.sh +6 -0
  149. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize.sh +18 -0
  150. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/roro.sh +15 -0
  151. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/source.sh +28 -0
  152. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/bundle_all.sh +12 -0
  153. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/git_pull_all.sh +15 -0
  154. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/rvm_install_all.sh +12 -0
  155. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/yarn_install_all.sh +10 -0
  156. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  157. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/wordpress.yml +16 -0
  158. data/{sandbox → lib/roro/stacks/library/roro}/.keep +0 -0
  159. data/lib/roro/stacks/library/roro/docker_compose/docker-compose.yml +22 -0
  160. data/lib/roro/stacks/library/roro/k8s/k8s.yml +15 -0
  161. data/lib/roro/{templates/rails/roro/kube/job-migrate.yml.tt → stacks/library/roro/plots/node/.keep} +0 -0
  162. data/lib/roro/stacks/library/roro/plots/node/node.yml +22 -0
  163. data/lib/roro/stacks/library/roro/plots/php/.keep +0 -0
  164. data/lib/roro/stacks/library/roro/plots/php/php.yml +22 -0
  165. data/lib/roro/stacks/library/roro/plots/python/plots/django/.keep +0 -0
  166. data/lib/roro/stacks/library/roro/plots/python/plots/django/django.yml +10 -0
  167. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/Dockerfile +7 -0
  168. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/docker-compose.yml +20 -0
  169. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/requirements.txt +2 -0
  170. data/lib/roro/stacks/library/roro/plots/python/plots/flask/flask.yml +0 -0
  171. data/lib/roro/stacks/library/roro/plots/python/python.yml +1 -0
  172. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/.keep +0 -0
  173. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/mysql.yml +22 -0
  174. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/postgres.yml +22 -0
  175. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/rails.yml +22 -0
  176. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/templates/.keep +0 -0
  177. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/rails_react.yml +22 -0
  178. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/templates/.keep +0 -0
  179. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/rails_vue.yml +22 -0
  180. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/templates/.keep +0 -0
  181. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/rails.yml +16 -0
  182. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/templates/.keep +0 -0
  183. data/lib/roro/stacks/library/roro/plots/ruby/plots/ruby_gem/ruby_gem.yml +22 -0
  184. data/lib/roro/stacks/library/roro/plots/ruby/ruby.yml +22 -0
  185. data/lib/roro/stacks/library/roro/roro/roro.yml +15 -0
  186. data/lib/roro/{stories → stacks/stories_v1}/greenfield/rails.yml +2 -2
  187. data/lib/roro/stacks/stories_v1/greenfield/roro.yml +7 -0
  188. data/lib/roro/{stories → stacks/stories_v1}/greenfield.yml +0 -0
  189. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd/circleci.yml +0 -0
  190. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd.yml +0 -0
  191. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/mysql.yml +1 -1
  192. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/postgresql.yml +1 -1
  193. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database.yml +0 -0
  194. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/default.yml +0 -0
  195. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/edge.yml +0 -0
  196. data/lib/roro/stacks/stories_v1/rollon/rails/kubernetes/postgresql.yml +10 -0
  197. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes.yml +0 -0
  198. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails.yml +7 -7
  199. data/lib/roro/stacks/stories_v1/rollon/roro.yml +5 -0
  200. data/lib/roro/{stories → stacks/stories_v1}/rollon/ruby_gem.yml +0 -0
  201. data/lib/roro/{stories → stacks/stories_v1}/rollon.yml +0 -0
  202. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/.keep +0 -0
  203. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/config.yml.tt +0 -0
  204. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_build.yml +1 -1
  205. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_push.yml +1 -1
  206. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/jobs/_test.yml +12 -0
  207. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  208. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/workflows/_build_test_push.yml +0 -0
  209. data/lib/roro/stacks/stories_v1/templates/rails/.keep +0 -0
  210. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/Dockerfile.greenfield.tt +0 -0
  211. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.mysql.yml +0 -0
  212. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.pg.yml +0 -0
  213. data/lib/roro/stacks/stories_v1/templates/rails/database/with_mysql/_service.yml +10 -0
  214. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/.keep +0 -0
  215. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/_service.yml +7 -0
  216. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/docker-compose.yml.tt +0 -0
  217. data/lib/roro/stacks/stories_v1/templates/rails/dotenv/.keep +0 -0
  218. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.mysql.env.tt +0 -0
  219. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.pg.env.tt +0 -0
  220. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/web.env.tt +0 -0
  221. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/kube.rake.tt +0 -0
  222. data/lib/roro/stacks/stories_v1/templates/rails/roro/.keep +0 -0
  223. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/.keep +0 -0
  224. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/app/.keep +0 -0
  225. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/containers/app/Dockerfile.tt +0 -0
  226. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/frontend/.keep +0 -0
  227. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/docker-entrypoint.sh +0 -0
  228. data/lib/roro/stacks/stories_v1/templates/rails/roro/keys/.keep +0 -0
  229. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/.keep +0 -0
  230. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/certificate.yml.tt +0 -0
  231. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  232. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployment.yml.tt +0 -0
  233. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/postgres_deploy.yaml +3 -3
  234. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/rails_deploy.yaml +5 -5
  235. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/redis_deploy.yaml +2 -2
  236. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/sidekiq_deploy.yaml +3 -3
  237. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/ingress.yml.tt +0 -0
  238. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/ingresses/ingress.yaml +0 -0
  239. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  240. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/jobs/setup.yaml +1 -1
  241. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/secret-digital-ocean.yml.tt +0 -0
  242. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/service.yml.tt +0 -0
  243. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/postgres_svc.yaml +2 -2
  244. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/rails_svc.yaml +3 -3
  245. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/redis_svc.yaml +2 -2
  246. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/volumes/postgres_volumes.yaml +0 -0
  247. data/lib/roro/stacks/stories_v1/templates/roro/containers/.keep +0 -0
  248. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/env/.keep +0 -0
  249. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/scripts/.keep +0 -0
  250. data/lib/roro/stacks/stories_v1/templates/roro/env/.keep +0 -0
  251. data/lib/roro/stacks/stories_v1/templates/roro/keys/.keep +0 -0
  252. data/lib/roro/stacks/stories_v1/templates/roro/scripts/.keep +0 -0
  253. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/bundler.sh +22 -0
  254. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/git.sh +21 -0
  255. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/rvm.sh +38 -0
  256. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/utilities.sh +53 -0
  257. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base.sh +6 -0
  258. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_idea.sh +14 -0
  259. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_repos.sh +33 -0
  260. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_correct_bundler.sh +21 -0
  261. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_rubies.sh +6 -0
  262. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize.sh +18 -0
  263. data/lib/roro/stacks/stories_v1/templates/roro/scripts/roro.sh +15 -0
  264. data/lib/roro/stacks/stories_v1/templates/roro/scripts/source.sh +28 -0
  265. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/bundle_all.sh +12 -0
  266. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/git_pull_all.sh +15 -0
  267. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/rvm_install_all.sh +12 -0
  268. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/yarn_install_all.sh +10 -0
  269. data/lib/roro/stacks/stories_v1/templates/ruby_gem/.circleci/.keep +0 -0
  270. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/config.yml.tt +0 -0
  271. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/jobs/_test.yml +0 -0
  272. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  273. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/docker-compose.yml +1 -1
  274. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/containers/.keep +0 -0
  275. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +0 -0
  276. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -0
  277. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/keys/.keep +0 -0
  278. data/lib/roro/version.rb +1 -1
  279. data/lib/roro.rb +59 -14
  280. data/mise/containers/ruby_gem/Dockerfile +16 -0
  281. data/{roro/containers/app/Dockerfile → mise/containers/ruby_gem/Dockerfile-app} +0 -0
  282. data/{roro/containers/ruby_image/Dockerfile → mise/containers/ruby_gem/Dockerfile-ruby_gem} +0 -0
  283. data/mise/containers/ruby_gem/env/.keep +0 -0
  284. data/mise/containers/ruby_gem/env/base.env.enc +1 -0
  285. data/mise/containers/ruby_gem/env/ci.env.enc +2 -0
  286. data/mise/containers/ruby_gem/env/development.env.enc +1 -0
  287. data/mise/containers/ruby_gem/env/production.env.enc +1 -0
  288. data/mise/containers/ruby_gem/scripts/.keep +0 -0
  289. data/mise/env/base.env.enc +1 -0
  290. data/mise/env/ci.env.enc +1 -0
  291. data/mise/env/development.env.enc +1 -0
  292. data/mise/env/production.env.enc +1 -0
  293. data/mise/mise.roro +0 -0
  294. data/process.yml +401 -0
  295. data/roro.gemspec +6 -1
  296. metadata +322 -118
  297. data/lib/roro/cli/generate/generate_story.rb +0 -18
  298. data/lib/roro/cli/greenfield/rails.rb +0 -14
  299. data/lib/roro/cli/rollon/rails/base/base.rb +0 -4
  300. data/lib/roro/cli/rollon/rails/base/insert_gems.rb +0 -23
  301. data/lib/roro/cli/rollon/rails/base/insertions.rb +0 -27
  302. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +0 -22
  303. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +0 -20
  304. data/lib/roro/cli/rollon/rails/database.rb +0 -26
  305. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +0 -45
  306. data/lib/roro/cli/rollon/ruby_gem.rb +0 -1
  307. data/lib/roro/cli/rollon/stories.rb +0 -2
  308. data/lib/roro/configurator/eligibility.rb +0 -137
  309. data/lib/roro/configurator/okonomi.rb +0 -28
  310. data/lib/roro/configurator/omakase.rb +0 -170
  311. data/lib/roro/crypto.rb +0 -113
  312. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +0 -10
  313. data/lib/roro/templates/base/.circleci/_aliases.yml +0 -8
  314. data/lib/roro/templates/base/.circleci/_commands.yml +0 -31
  315. data/lib/roro/templates/base/.circleci/_defaults.yml +0 -5
  316. data/lib/roro/templates/base/.circleci/_executors.yml +0 -11
  317. data/lib/roro/templates/base/.circleci/_major_only.yml +0 -4
  318. data/lib/roro/templates/base/.circleci/_version.yml +0 -1
  319. data/lib/roro/templates/base/.circleci/_workflow.yml +0 -2
  320. data/lib/roro/templates/base/.circleci/config.job-example.yml +0 -33
  321. data/lib/roro/templates/base/.circleci/jobs/_build.yml +0 -4
  322. data/lib/roro/templates/base/.circleci/jobs/_release.yml +0 -12
  323. data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +0 -10
  324. data/lib/roro/templates/base/.dockerignore +0 -51
  325. data/lib/roro/templates/base/dotenv +0 -1
  326. data/lib/roro/templates/base/jumpstart/Dockerfile.tt +0 -30
  327. data/lib/roro/templates/base/jumpstart/docker-compose.yml +0 -59
  328. data/lib/roro/templates/base/jumpstart/docker-entrypoint.sh +0 -16
  329. data/lib/roro/templates/base/livereload/hosts.example +0 -7
  330. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +0 -12
  331. data/lib/roro/templates/rails/database/with_mysql/_service.yml +0 -10
  332. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +0 -7
  333. data/roro/containers/app/dotenv +0 -1
@@ -1,22 +0,0 @@
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 'rails/config/database.mysql.yml', 'config/database.yml', force: true
10
- config = @config.env.clone
11
-
12
- %w(development production test staging ci).each do |environment|
13
- config[:rails_env] = environment
14
-
15
- source = 'rails/dotenv/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
@@ -1,20 +0,0 @@
1
- module Roro
2
-
3
- class CLI < Thor
4
-
5
- no_commands do
6
-
7
- def configure_for_pg
8
- copy_file 'rails/config/database.pg.yml', 'config/database.yml', force: true
9
- config = @config.env.clone
10
- %w(development production test staging ci).each do |environment|
11
- config[:rails_env] = environment
12
-
13
- source = 'rails/dotenv/database.pg.env.tt'
14
- target = "roro/containers/database/#{environment}.env"
15
- template( source, target, config )
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,26 +0,0 @@
1
- module Roro
2
-
3
- class CLI < Thor
4
-
5
- no_commands do
6
-
7
- def configure_database
8
- database = @config.intentions[:configure_database]
9
- case database
10
- when 'p'
11
- @config.env[:database_vendor] = 'postgresql'
12
- configure_for_pg
13
- when 'm'
14
- @config.env[:database_vendor] = 'mysql'
15
- configure_for_mysql
16
- end
17
- %w(development production test staging ci).each do |environment|
18
- src = 'rails/dotenv/web.env.tt'
19
- dest = "roro/containers/app/#{environment}.env"
20
- template src, dest, @config.env
21
- end
22
- end
23
- end
24
- end
25
- end
26
-
@@ -1,45 +0,0 @@
1
- module Roro
2
- class CLI < Thor
3
-
4
- desc "rollon::ruby_gem::with_ci_cd", "Generate files for containerized gem testing, CircleCI, and releasing to RubyGems."
5
- map "rollon::ruby_gem::with_ci_cd" => "rollon_ruby_gem_with_ci_cd"
6
-
7
- def rollon_ruby_gem_with_ci_cd(*args)
8
- ruby_gem_with_ci_cd(*args)
9
- configure_for_rollon
10
- end
11
-
12
- no_commands do
13
- def ruby_gem_with_ci_cd(*args)
14
- answer = ask("\nYou can add your rubygems api key in\n\t
15
- './roro/containers/ruby_gem/ci.env' \n\nlater, or we'll try to add it here:",
16
- default: '')
17
- rubygems_api_key = (answer.eql?("") ? 'some-key' : answer)
18
- @config.env[:rubygems_api_key] = rubygems_api_key
19
- @config.env[:rubies] = []
20
- 3.times do |index|
21
- newruby = @config.env[:ruby_version].gsub('.', '').to_i - index
22
- @config.env[:rubies] << newruby.to_s.split('').join('.')
23
- end
24
- directory 'ruby_gem/roro', './roro', @config.env
25
- directory 'ruby_gem/.circleci', './.circleci', @config.env
26
- copy_file 'ruby_gem/docker-compose.yml', './docker-compose.yml'
27
-
28
- @config.env[:rubies].each do |ruby|
29
- file = '.circleci/config.yml'
30
- spacer = "\n - run: "
31
- rv = "RUBY_VERSION=#{ruby} docker-compose "
32
- build = "build ruby_gem"
33
- up = "up -d --force-recreate ruby_gem"
34
- run_tests = "run ruby_gem bundle exec rake test"
35
- append_to_file file, spacer + rv + run_tests, after: "- placeholder"
36
- append_to_file file, spacer + rv + up, after: "- placeholder"
37
- append_to_file file, spacer + rv + build, after: "- placeholder"
38
- end
39
- gsub_file '.circleci/config.yml', "- placeholder", "- checkout"
40
- append_to_file ".gitignore", "\nGemfile.lock"
41
- gitignore_sensitive_files
42
- end
43
- end
44
- end
45
- end
@@ -1 +0,0 @@
1
- require 'roro/cli/rollon/ruby_gem/with_ci_cd.rb'
@@ -1,2 +0,0 @@
1
- require 'roro/cli/rollon/ruby_gem'
2
- require 'roro/cli/rollon/rails'
@@ -1,137 +0,0 @@
1
- require 'open3'
2
-
3
- module Roro
4
- module Configurator
5
- module Eligibility
6
-
7
- def screen_target_directory
8
- @structure[:greenfield] ? confirm_directory_empty : confirm_directory_app
9
- handle_roro_artifacts
10
- end
11
-
12
- def confirm_directory_app
13
- confirm_dependency({
14
- system_query: "ls -A",
15
- warning: "This is an empty directory. You can generate a new and fully
16
- dockerized Rails app using the 'greenfield' command here here but if
17
- you want to containerize an existing app -- which is what the 'rollon'
18
- command is for -- you'll need to navigate to a directory with an app we
19
- can roll onto.",
20
- suggestion: "$ roro greenfield",
21
- conditional: "!Dir.glob('*').empty?"})
22
- end
23
-
24
- def confirm_directory_empty
25
- confirm = confirm_dependency({
26
- system_query: "ls -A",
27
- 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",
28
- suggestion: "$ roro greenfield --force",
29
- conditional: "Dir.glob('*').empty?" # || (Dir.glob('*').size.eql?(1) && Dir.glob('roro_configurator.yml'))"
30
- })
31
- confirm || true
32
- end
33
-
34
- def artifacts?
35
- @appname = @env[:main_app_name]
36
- @artifacts = {}
37
- hash = {
38
- containers: {
39
- list: "docker ps --filter name=#{@appname}\ -a",
40
- remove: " -q | xargs docker stop | xargs docker rm -f"
41
- },
42
- volumes: {
43
- list: "docker volume ls --filter name=#{@appname}*",
44
- remove: " -q | xargs docker volume rm -f"
45
- },
46
- networks: {
47
- list: "docker network ls --filter name=#{@appname}",
48
- remove: " -q | xargs docker network rm"
49
- },
50
- images: {
51
- list: "docker image ls #{@appname}*",
52
- remove: " -q | xargs docker rmi -f"
53
- }
54
- }
55
- hash.each do |k, v|
56
- check = IO.popen(v[:list] + ' -q').count > 0
57
- @artifacts[k] = v if check
58
- end
59
- true if @artifacts.empty?
60
- end
61
-
62
- def handle_roro_artifacts
63
- return if artifacts?
64
- question = [
65
- "\n\nThis machine has some docker artifacts which may clash with ",
66
- "RoRo moving forward. You can verify their existence with:\n"
67
- ]
68
- @artifacts.each { |k,v| question << "\t$ #{v[:list]}" }
69
- question << "\nYou can remove these artifacts with something like:\n"
70
- @artifacts.each { |k,v| question << "\t$ #{v[:list]} #{v[:remove]}" }
71
- question << "\nWould you like RoRo to attempt to remove them for you?"
72
- choices = {'y' => 'Yes', 'n' => 'No'}
73
-
74
- choices.each { |k,v| question << "(#{k}) #{v.to_s}" }
75
-
76
- prompt = question.join
77
- answer = ask(prompt, default: 'y', limited_to: choices.keys)
78
-
79
- if answer.eql?('y')
80
-
81
- @artifacts.each do |k,v|
82
- puts "Attempting to remove #{k}"
83
- system( v[:list] + v[:remove] )
84
- end
85
- end
86
- end
87
-
88
- def confirm_dependency(options)
89
- msg = []
90
- msg << ""
91
- msg << delineator
92
- msg << "It looks like #{options[:warning]}. The following bash command returns false:"
93
- msg << "\t$ #{options[:system_query]}"
94
- msg << "Try this:"
95
- msg << ("\t" + options[:suggestion])
96
- msg << delineator
97
- conditional = options[:conditional] ? eval(options[:conditional]) : system(options[:system_query])
98
- query = options[:system_query]
99
- if conditional == false
100
-
101
- raise(Roro::Error.new(msg.join("\n\n")))
102
- else
103
- true
104
- end
105
- end
106
-
107
- def confirm_dependencies
108
- dependencies.each do |dependency|
109
- confirm_dependency(dependency)
110
- end
111
- end
112
-
113
- private
114
-
115
- def delineator
116
- ("-" * 80)
117
- end
118
-
119
- def dependencies
120
- [
121
- {
122
- system_query: "which docker",
123
- warning: "Docker isn't installed",
124
- suggestion: "https://docs.docker.com/install/"
125
- }, {
126
- system_query: "which docker-compose",
127
- warning: "Docker Compose isn't installed",
128
- suggestion: "https://docs.docker.com/compose/install/"
129
- }, {
130
- system_query: "docker info",
131
- warning: "the Docker daemon isn't running",
132
- suggestion: "https://docs.docker.com/config/daemon/#start-the-daemon-manually"
133
- } ]
134
- end
135
- end
136
- end
137
- end
@@ -1,28 +0,0 @@
1
- require 'yaml'
2
- require 'json'
3
-
4
- module Roro
5
- module Configurator
6
- module Okonomi
7
-
8
- def take_order
9
- ask_questions
10
- end
11
-
12
- def ask_questions
13
- choices = @structure[:choices]
14
- choices.each do |key, value|
15
- @structure[:intentions][key] = ask_question(value)
16
- end
17
- end
18
-
19
- def ask_question(question)
20
- prompt = question[:question]
21
- default = question[:default]
22
- choices = question[:choices].keys
23
- answer = ask(prompt, default: default, limited_to: choices)
24
- answer
25
- end
26
- end
27
- end
28
- end
@@ -1,170 +0,0 @@
1
- module Roro
2
- module Configurator
3
- module Omakase
4
- attr_reader :structure, :intentions, :env, :options, :story
5
-
6
- def initialize(args={}, options={})
7
-
8
- @options = sanitize(args)
9
- @structure = {
10
- intentions: {},
11
- choices: {},
12
- env_vars: {}
13
- }
14
- @story = @options[:story] ? { rollon: @options[:story] } : default_story
15
- build_story
16
- @intentions = @structure[:intentions]
17
- @env = @structure[:env_vars]
18
- @env[:main_app_name] = Dir.pwd.split('/').last
19
- @env[:ruby_version] = RUBY_VERSION
20
- @env[:force] = true
21
- @env[:verbose] = false
22
- @env[:roro_version] = VERSION
23
- screen_target_directory
24
- end
25
-
26
- def build_story
27
- layer_greenfield
28
- layer_rollon
29
- layer_story
30
- layer_okonomi
31
- end
32
-
33
- def layer_okonomi
34
- return unless @options.keys.include?(:okonomi)
35
- @structure[:okonomi] = true
36
- take_order
37
- end
38
-
39
- def layer_greenfield
40
- return unless @options.keys.include?(:greenfield)
41
- @structure[:greenfield] = true
42
- build_layers( { greenfield: :rails } )
43
- end
44
-
45
- def layer_rollon
46
- build_layers(@story)
47
- end
48
-
49
- def layer_story
50
- file = '.roro_story'
51
- return unless File.exist?("#{file}.yml")
52
- overlay(get_layer(file))
53
- end
54
-
55
- def build_layers(story, location=nil)
56
- story = story.is_a?(Hash) ? story : { story => {}}
57
- story.each do |key, value|
58
- location = location ? "#{location}/#{key}" : key
59
- case value
60
- when Array
61
- value.each {|value| build_layers(value, location) }
62
- when true
63
- when
64
- build_layers(value, location)
65
- end
66
- end
67
- overlay(get_layer("#{Roro::CLI.story_root}/#{location}"))
68
- end
69
-
70
- def overlay(layer)
71
- layer.each do |key, value|
72
- @structure[key] ||= value
73
- end
74
- overlay_choices(layer) if layer[:choices]
75
- overlay_env_vars(layer) if layer[:env_vars]
76
- overlay_actions(layer) if layer[:actions]
77
- end
78
-
79
- def overlay_actions(layer)
80
- @structure[:actions].concat(layer[:actions])
81
- end
82
-
83
- def overlay_env_vars(layer)
84
- layer[:env_vars].each do |key, value|
85
- @structure[:env_vars][key] = value
86
- end
87
- end
88
-
89
- def overlay_choices(layer)
90
- @structure[:intentions] ||= {}
91
- layer[:choices].each do |key, value|
92
- @structure[:choices][key] = value
93
- @structure[:intentions][key] = value[:default]
94
- end
95
- end
96
-
97
- def overlay_intentions(layer)
98
- layer[:intentions].each do |key, value|
99
- @structure[:intentions][key] = value
100
- end
101
- end
102
-
103
- def sanitize(options)
104
- options ||= {}
105
- options.transform_keys!{|k| k.to_sym}
106
- options.each do |key, value|
107
- case value
108
- when Array
109
- value.each { |vs| sanitize(vs) }
110
- when Hash
111
- sanitize(value)
112
- when true
113
- options[key] = true
114
- when String || Symbol
115
- options[key] = value.to_sym
116
- end
117
- end
118
- end
119
-
120
- def get_layer(filedir)
121
- filepath = filedir + '.yml'
122
- if !File.exist?(filepath)
123
- key = filedir.split('/').last
124
- error_msg = "Cannot find that story #{key} at #{filepath}. Has it been written?"
125
- raise (Roro::Error.new(error_msg))
126
- end
127
- json = JSON.parse(YAML.load_file(filepath).to_json, symbolize_names: true)
128
- json ? json : ( raise (Roro::Error.new(error_msg)))
129
- end
130
-
131
- def story_map(story='stories')
132
- array ||= []
133
- loc = Roro::CLI.story_root + "/#{story}"
134
- validate_story(loc)
135
- stories = Dir.glob(loc + "/*.yml")
136
- stories.each do |ss|
137
- name = ss.split('/').last.split('.yml').first
138
- array << { name.to_sym => story_map([story, name].join('/'))}
139
- end
140
- array
141
- end
142
-
143
- def default_story(story='rollon', loc=nil)
144
- hash = {}
145
- loc = [(loc ||= Roro::CLI.story_root), story].join('/')
146
- substory = get_layer(loc)[:stories]
147
- if substory.is_a?(Array)
148
- array = []
149
- substory.each do |s|
150
- ss = get_layer([loc, s].join('/'))[:stories]
151
- array << (ss.is_a?(String) ? { s.to_sym => ss.to_sym } : default_story( s, loc ) )
152
- end
153
- hash[story.to_sym] = array
154
- else
155
- hash[story.to_sym] = default_story(substory, loc)
156
- end
157
- hash
158
- end
159
-
160
- def validate_story(story)
161
- substories = get_layer(story)[:stories]
162
- if substories.is_a? String
163
- File.exist?(story + substories + '.yml')
164
- elsif substories.is_a? Array
165
- substories.each { |substory| validate_story(story + '/' + substory) }
166
- end
167
- end
168
- end
169
- end
170
- end
data/lib/roro/crypto.rb DELETED
@@ -1,113 +0,0 @@
1
- require "openssl"
2
- require "base64"
3
- module Roro::Crypto
4
-
5
- class << self
6
-
7
- def generate_key
8
- @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
9
- @salt = '8 octets'
10
- @new_key = @cipher.random_key
11
- Base64.encode64(@new_key)
12
- end
13
-
14
- def source_files(dir, pattern)
15
- Dir.glob(dir + "/**/*#{pattern}")
16
- end
17
-
18
- def gather_environments(dir, ext)
19
- environments = []
20
- source_files(dir, ext).each do |source_file|
21
- environments << source_file.split('/').last.split('.').first
22
- end
23
- if environments.empty?
24
- raise EnvironmentError, "No files in the #{dir} directory matching #{ext}"
25
- else
26
- environments.uniq
27
- end
28
- end
29
-
30
- def generate_keys(keys, dir, ext)
31
- (keys.empty? ? gather_environments(dir, ext) : keys).each do |key|
32
- write_to_file generate_key, "#{dir}/keys/#{key}.key"
33
- end
34
- end
35
-
36
- def expose(environments, dir, ext)
37
- if environments.empty?
38
- environments = gather_environments('./roro/keys', '.key')
39
- end
40
- environments.each do |environment|
41
- pattern = "#{environment}*#{ext}"
42
-
43
- exposable = source_files(dir, pattern)
44
- if exposable.empty?
45
- puts "No #{environment} files in ./roro matching #{pattern}"
46
- end
47
- source_files(dir, pattern).each do |file|
48
- decrypt(file, environment)
49
- end
50
- end
51
- end
52
-
53
- def obfuscate(envs, dir, ext)
54
- environments = envs.empty? ? gather_environments(dir, ext) : envs
55
- environments.each do |environment|
56
- pattern = "#{environment}*#{ext}"
57
- get_key(environment)
58
- encryptable_files = source_files(dir, pattern)
59
- if encryptable_files.empty?
60
- puts "No #{environment} files in ./roro matching #{pattern}"
61
- end
62
- encryptable_files.each do |file|
63
- encrypt(file, environment)
64
- end
65
- end
66
- end
67
-
68
- def write_to_file(data, filename)
69
- if File.exist?(filename)
70
- raise DataDestructionError, "Existing file at #{filename}. Please remove it and try again."
71
- else
72
- File.open(filename, "w") { |io| io.write data }
73
- end
74
- end
75
-
76
-
77
- def encrypt(file, key)
78
- build_cipher(key)
79
- encrypted = @cipher.update(File.read file) + @cipher.final
80
- write_to_file(Base64.encode64(encrypted), file + '.enc')
81
- end
82
-
83
- def decrypt(file, key)
84
- build_cipher(key)
85
- encrypted = Base64.decode64 File.read(file)
86
- @cipher.decrypt.pkcs5_keyivgen @pass_phrase, @salt
87
- decrypted = @cipher.update(encrypted) + @cipher.final
88
- decrypted_file = file.split('.enc').first
89
- write_to_file decrypted, decrypted_file
90
- end
91
-
92
- def get_key(environment, dir='roro')
93
- env_key = environment.upcase + '_KEY'
94
- key_file = Dir.glob("roro/keys/#{environment}.key").first
95
- case
96
- when ENV[env_key].nil? && key_file.nil?
97
- raise KeyError, "No #{env_key} set. Please set one as a variable or in a file."
98
- when ENV[env_key]
99
- ENV[env_key]
100
- when File.exist?(key_file)
101
- File.read(key_file).strip
102
- end
103
- end
104
-
105
- private
106
- def build_cipher(environment)
107
- @cipher = OpenSSL::Cipher.new 'AES-128-CBC'
108
- @salt = '8 octets'
109
- @pass_phrase = get_key(environment)
110
- @cipher.encrypt.pkcs5_keyivgen @pass_phrase, @salt
111
- end
112
- end
113
- end
@@ -1,10 +0,0 @@
1
- stories:
2
- - default
3
- - edge
4
-
5
- actions:
6
- - template 'rails/.circleci/config.yml.tt', './.circleci/config.yml'
7
- - template 'rails/docker-compose.yml.tt', './docker-compose.yml', @config.env
8
- - template 'base/dotenv', './.env', @config.env
9
- - directory 'rails/roro', './roro', @config.env
10
- - template 'rails/kube.rake.tt', './lib/tasks/kube.rake', @config.env
@@ -1,8 +0,0 @@
1
- aliases:
2
- - &workspace-location
3
- at: /tmp/workspace
4
- - &copy-ci-dotenv |
5
- cp -rf /tmp/workspace/roro .
6
- - &source-ci-variables |
7
- echo 'source roro/containers/app/ci.env' >> $BASH_ENV
8
- source $BASH_ENV
@@ -1,31 +0,0 @@
1
- commands:
2
- setup-docker-builds:
3
- steps:
4
- - setup_remote_docker:
5
- docker_layer_caching: false
6
-
7
- source-ci-vars:
8
- steps:
9
- - run: |
10
- echo 'source roro/containers/app/ci.env' >> ${BASH_ENV}
11
- source ${BASH_ENV}
12
-
13
- attach-roro:
14
- steps:
15
- - attach_workspace:
16
- at: workspace
17
- - run: cp -rf workspace/roro .
18
- - source-ci-vars
19
-
20
- tag-and-push:
21
- parameters:
22
- deploy_tag:
23
- type: string
24
- default: latest
25
- steps:
26
- - run: |
27
- SOURCE=$(docker images | grep project_app | awk '{ print $3 }')
28
- DOCKER_REPO=${DOCKER_ORG}/${APP_NAME}_app
29
- TAGGED_IMAGE=${DOCKER_REPO}:<< parameters.deploy_tag >>
30
- docker tag ${SOURCE} ${TAGGED_IMAGE}
31
- docker push ${TAGGED_IMAGE}
@@ -1,5 +0,0 @@
1
- defaults: &defaults
2
- executor: machine-layer-caching
3
- working_directory: ~/project
4
- environment:
5
- RORO_ENV: ci
@@ -1,11 +0,0 @@
1
- executors:
2
- machine-layer-caching:
3
- machine:
4
- image: circleci/classic:latest
5
- docker_layer_caching: true
6
- machine-executor:
7
- machine:
8
- image: circleci/classic:latest
9
- ruby-executor:
10
- docker:
11
- - image: cimg/ruby:2.7
@@ -1,4 +0,0 @@
1
- major_only: &major_only
2
- filters:
3
- branches:
4
- only: master
@@ -1 +0,0 @@
1
- version: 2.1
@@ -1,2 +0,0 @@
1
- workflows:
2
- version: 2